[SAGE-MUC] Löschen von vielen (!) Files
Andreas Jellinghaus
aj at dungeon.inka.de
Do Sep 25 10:03:32 CEST 2008
Am Mittwoch, 24. September 2008 23:55:27 schrieb Armin Kunaschik:
> > Ein einfaches rm * scheidet also aus. In Internet wird die Lösung
> >
> > find . -type -f | xargs -n100 rm -f
>
> Bei dieser Loesung muss ich mal wieder etwas "klugscheissen":
> xargs "weiss" selber (auch unter Linux), wie lang eine Argumenten-
> Liste sein darf und wieviel Argumente dem rm uebergeben werden duerfen.
> Die oben beschriebene Loesung sollte sich also schon um einige
> ein- bis zweistellige Prozentzahlen tunen lassen, wenn man einfach
> das -n100 weglaesst.
Das kam mir seltsam vor. So viel unterschied? Ich habe mal gemessen:
Vorbereitung:
cd /tmp
mkdir x
cd x
let i=0; while let "i<100000"; do echo > `printf %06d $i`; let i="$i+1"; done
cd ..
tar cfz 100k.tar.gz x
rm -rf x
Test Verfahren 1
cd /tmp
tar xfz 100k.tar.gz
cd x
time (find . -type f|xargs -n100 rm -f)
cd ..
rmdir x
Test Verfahren 2
cd /tmp
tar xfz 100k.tar.gz
cd x
time (find . -type f|xargs rm -f)
cd ..
rmdir x
Test Verfahren 3
cd /tmp
tar xfz 100k.tar.gz
time (rm -rf x)
Getestet auf Ubuntu 8.04, x86_64, lenovo T61 laptop
(T7500 @ 2.2Ghz, 4GB Ram, ext3 data=ordered, ...)
[ 25.369582] ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[ 25.371633] ata1.00: ATA-7: WDC WD1600BEVS-08RST2, 08.01G08, max UDMA/133
[ 25.371635] ata1.00: 312581808 sectors, multi 16: LBA48 NCQ (depth 31/32)
[ 25.371469] ata1.00: configured for UDMA/133
Ergebnisse
Test 1
real 0m14.428s user 0m1.668s sys 0m4.168s
real 0m11.316s user 0m1.952s sys 0m4.808s
real 0m16.188s user 0m1.836s sys 0m4.680s
real 0m15.320s user 0m1.704s sys 0m3.808s
real 0m15.883s user 0m1.808s sys 0m4.512s
Test 2
real 0m11.720s user 0m0.112s sys 0m1.824s
real 0m12.451s user 0m0.112s sys 0m2.152s
real 0m14.777s user 0m0.164s sys 0m2.832s
real 0m14.818s user 0m0.212s sys 0m3.032s
real 0m16.457s user 0m0.108s sys 0m1.968s
Test 3
real 0m9.494s user 0m0.032s sys 0m2.532s
real 0m11.044s user 0m0.028s sys 0m2.656s
real 0m16.114s user 0m0.032s sys 0m3.012s
real 0m15.686s user 0m0.056s sys 0m2.992s
real 0m15.075s user 0m0.084s sys 0m3.272s
Durchschnitt
Test 1 real 14.627 user 1.793 sys 4.395
Test 2 real 14.044 user 0.141 sys 2.361
Test 3 real 13.482 user 0.056 sys 2.892
In Prozent (Test1=100%)
Test 1 real 100 user 100 sys 100
Test 2 real 96 user 7.8 sys 53.7
Test 3 real 92.1 user 3.1 sys 65.8
Sind 4% Unterschied nun "einige ein- bis zweistellige Prozentzahlen"? Möge
doch bitte jeder selbst entscheiden. Natürlich lässt sich die Messgenauigkeit
verbessern, wenn man z.B. mit sync das journal vor dem löschen wegschreibt,
wenn man den ram des Rechners leert (reboot oder kernel entsprechend
anweisen). Vor allem auch mehr tests, 5 Tests sind nun nicht soo
aussagekräftig. Natürlich mehr Dateien, es hies im orginal
Posting ja "> 100000".
Am wichtigsten scheint mir aber, das die hier verwendeten Dateien mit einem
Byte unverhältnismässig klein sind. Größere Dateien zu löschen verbraucht
mehr Arbeit, weil mehr Datenstrukturen des Filesystems berührt werden. Solche
mehr Arbeit wird aber vorraussichtlich in alle Test Scenarien gleichermassen
eingehen. Die Unterschiede zwischen den verschiedenen Methoden werden dann
eher geringer, als stärker ausgeprägt.
Ich komme daher zum Schluss, das durch ein verschiedene Löschbefehle nur bis
zu 5 Prozent Unterschied feststellbar sind, in einem realistischeren Scenario
wohl eher 1-2 Prozenz, wenn überhaupt. Ein Tuning um "einige ein- bis
zweistellige Prozentzahlen" kann ich damit nicht nachvollziehen.
Mit freundlichen Grüßen
Andreas Jellinghaus