2014-07-07 10 views
6

Ich habe eine sehr große Speicherplatte (16T). Ich möchte 'du' darauf ausführen, um herauszufinden, wie viel jedes Unterverzeichnis benötigt. Das dauert jedoch sehr lange. Zum Glück habe ich eine Gruppe von Computern zur Verfügung. Ich kann daher 'du' parallel ausführen, jeder Job läuft in einem separaten Unterverzeichnis und schreibt ein einfaches Skript, das das tut. Gibt es schon so etwas oder muss ich es selbst schreiben?Run du parallel

+0

Beachten Sie, dass IO nicht immer multi-tasked sein kann. – konsolebox

Antwort

3

Es ist einfach, es mit GNU Parallel zu tun:

parallel du ::: */* 
3

Es ist nicht klar aus Ihrer Frage, wie Ihr Speicher entworfen wurde (RAID-Array, NAS, NFS oder etwas anderes).

Aber, fast unabhängig von der aktuellen Technologie, laufen du parallel vielleicht nicht so eine gute Idee - es ist sehr wahrscheinlich, die Dinge tatsächlich zu verlangsamen.

Das Disk-Array verfügt über eine begrenzte IOPS-Kapazität, und mehrere Threads du werden alle aus diesem Pool genommen. Noch schlimmer, oft einzelne du verlangsamt alle anderen IO-Vorgänge viele Male, auch wenn du Prozess nicht viel Festplatten-Durchsatz verbrauchen.

Im Vergleich, wenn Sie nur einzelne CPU haben, wird die parallele Ausführung (make -j N) den Build-Prozess verlangsamen, da die Prozessumschaltung einen beträchtlichen Overhead hat.

Gleiches Prinzip gilt für Festplatten, insbesondere für rotierende Festplatten. Die einzige Situation, in der Sie eine beträchtliche Geschwindigkeitssteigerung erzielen, ist, wenn Sie N Laufwerke in unabhängigen Verzeichnissen installiert haben (etwa /mnt/disk1, /mnt/disk2, ..., /mnt/diskN). In diesem Fall sollten Sie du in N Threads ausführen, 1 pro Datenträger.

Eine häufige Verbesserung, um die Geschwindigkeit zu erhöhen, ist, Ihre Festplatten mit noatime Flag zu mounten. Ohne dieses Flag wird beim Scannen großer Laufwerke eine Menge Schreibaktivität zur Aktualisierung der Zugriffszeit generiert. Wenn Sie noatime Flag verwenden, wird Schreibaktivität vermieden, und du funktioniert viel schneller.

+0

Dies ist der Speicher meiner Universität, daher kenne ich die Details nicht. Da dies jedoch ein großer Datenträger ist, dessen Zweck darin besteht, als Datenträger für einen Cluster zu dienen (in diesem Fall Condor), gehe ich davon aus, dass er so ausgelegt ist, dass er mehrere, wenn nicht viele IO-Vorgänge gleichzeitig unterstützt. –

+0

Wie verwenden Ihre Clientcomputer diesen Speicher? NFS mounten? Wenn ja, dann könnte der parallele Scan funktionieren, weil NFS einen beträchtlichen Netzwerk-Round-Trip-Overhead hat. – mvp

+0

Gibt es eine Möglichkeit für mich, dies selbst zu überprüfen (einige Befehle laufen gerne)? –

0

Gibt es schon so etwas oder muss ich es selbst schreiben?

Ich schrieb sn für mich, aber Sie könnten es auch zu schätzen wissen.

sn p . 

geben Sie Größen von allem im aktuellen Verzeichnis. Es läuft parallel und ist schneller als du auf großen Verzeichnissen.