Dlaczego dopasowywanie 1250 ciągów znaków do 90k wzorów jest tak wolne?

12

Moje ciągi to ścieżki plików s/14/11/13/15/n7ce49B_235_25ed2d70.jpg; moje wzory są dość proste n7ce49B_.+.

Biegnę GNU grep 2.6.3pod Debianem 6.0.10 na Dell DL360G7 serwera (Wspominam go po prostu dać poczucie tego urządzenia perfomance) z 15k dysków, a to poleceniem: time LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_filePo prostu nie mogę kompletny - swapy serwera źle. Z 20k wzorami zajmuje to ponad 3 godziny.

Wydaje mi się to nierozsądne.

Na żądanie komentarza są pliki: ścieżki plików 20k wzorców

Można również przetestować i dostosować liczbę linii wejściowych i wzorów za pomocą:

xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
  grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)
skaurus
źródło
3
twój tytuł ma 90k, opis ma 20Kwzory
RomanPerekhrest
2
Cóż, 90k to mój oryginalny rozmiar wejściowy, co powoduje, że moja maszyna zamienia się tak mocno, że muszę zabić grepa. Potem próbowałem podzielić to na 20k plików i nadal działa to okropnie ... Ale masz rację, że mój opis jest niespójny.
skaurus
2
Wyjaśnij, czy serwer mógł być przeciążony (wykonując inne zadania wymagające dużych zasobów) podczas grep.
agc
2
Można się rozmnażać z xxd -p /dev/urandom | fold -sw 100 | head -n 1250 | grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000). Wygląda na to, że spędza się czas na kompilowaniu wyrażeń regularnych i przydzielaniu dużej ilości pamięci. Z -Fzamiast -Ejest to natychmiastowe.
Stéphane Chazelas
2
W tym przypadku nie n7ce49B_.+jest to równoważne zn7ce49B_.
Stéphane Chazelas

Odpowiedzi: