Am Samstag, 18. Juni 2011, 23:44:54 schrieb Tao te Puh:
Am 18.06.2011 19:30, schrieb Sandy Drobic:
On 18.06.2011 16:59, Tao te Puh wrote:
Es ist die Lokalisierung !
Szenario: Ich habe mir ein Verzeichnis mit 4162 PDF-Dateien erzeugt (~1,3GB). Darin suche ich mit grep:
time grep -i "hurz" /mnt/tmp_pdf/*
Das dauert 5m42.398s.
Dann stelle ich die Lokalisierung um auf C (das ist der Standard bei Tiny Core Linux):
export LANG=C export LANGUAGE=C export LC_ALL=C
und führe genau die gleiche Suche durch:
time grep -i "hurz" /mnt/tmp_pdf/*
Das dauert lediglich 0m7.566s.
Die Suche ist also 48x schneller.
Kann mir das jemand erklären?
Hast du vor dem zweiten Versuch auch den Rechner neu gestartet? Wenn nicht, dann hast du deine Suche aus dem Cache bedient. Versuche es doch mal anders herum: erst auf C umstellen (NACH Neustartt!!), messen, dann auf UTF8 noch einmal messen.
Ich habe, innerhalb einer Sitzung, mehrfach gemessen. Dabei habe ich die Lokalisierung auch mehrfach hin- und zurückgestellt. Die Ergebnisse differieren minimal (-> Cache spielt hier also keine Rolle), der Unterschied zwischen den Lokalisierungen, bleibt aber immens. Auch auf einem anderen System, dort läuft 11.2, habe ich diesen Effekt nachvollziehen können.
Interessant ist aber vielleicht das Folgende: Auf einem Alt-System mit SuSE 9.3, ist der Unterschied zwischen unterschiedliche Lokalisierung nur minimal, also praktisch 0.
Ansonsten kannst Du das sehr einfach und schnell selber testen:
Folgende Kommandos erzeugen ein Verzeichnis (/mnt/tmp_nullfiles) und darin 1000 Dateien mit jeweils 1MB. Dann wird mit grep getestet, die Lokalisierung gewechselt und erneut getestet:
mkdir /mnt/tmp_nullfiles
# 1000 Dateien mit jeweils 1MB anlegen i=1; while [ $i -le 1000 ]; do dd if=/dev/zero of=/mnt/tmp_nullfiles/nullfile-$i bs=1M count=1; i=$(( $i + 1 )); done;
# Test mit locale=de_DE.UTF-8 time grep -i "hurz" /mnt/tmp_nullfiles/*
# Lokalisierung wechseln export LANG=C export LANGUAGE=C export LC_ALL=C
# Test mit locale=C time grep -i "hurz" /mnt/tmp_nullfiles/*
# Lokalisierung wieder zurückstellen export LANG=de_DE.UTF-8 export LANGUAGE=de_DE.UTF-8 export LC_ALL=de_DE.UTF-8
Mach mal "strace" statt time für ein einzelnes nullfile, dann dürfte der Unterschied klar werden. Die Variante mit einer locale <> "C" versucht, jede Menge Dateien zu öffenen, in denen die Lokalisierungen beschrieben sind (/usr/lib/locale/ ...). mfg Hendrik -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org