Por que a correspondência de 1250 strings contra padrões de 90k é tão lenta?

12

Minhas sequências são caminhos de arquivo como s/14/11/13/15/n7ce49B_235_25ed2d70.jpg ; meus padrões são bem simples, todos como n7ce49B_.+ .

Estou executando o GNU grep 2.6.3 sob Debian 6.0.10 no servidor Dell DL360G7 (menciono apenas para dar uma noção da performance da máquina) com HDDs de 15k , e este comando: time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_file simplesmente não pode concluir - o servidor troca muito mal. Com padrões de 20k, leva mais de 3 horas.

Isso não parece razoável para mim.

Por solicitação de comentários, há os arquivos: caminhos de arquivo 20k padrões

Também é possível testar e ajustar o número de linhas e padrões de entrada com:

xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
  grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
    
por skaurus 27.06.2017 / 19:31

1 resposta

15

Você se deparou com um problema de desempenho em versões anteriores do GNU grep ( bug # 22357 ) que foi endereçado por este commit , lançado em 2.28 embora essa mudança introduziu algumas regressões , então você gostaria de obter o GNU grep 3.0 ou mais recente.

    
por 27.06.2017 / 22:23

Tags