tee optimal?

01/02/2012 - 13:34 von Christian Brandt | Report spam
Gegeben:

Eine Pipe soll nach Prüfsumme und Grösse des Inhalts ausgewertet werden
um die Korrektheit der Daten zu verifizieren. Basissystem Knoppix
6.irgendwasaktuell auf einem Athlon Neo X325 = Dualcore Athlon64 2x1,5Ghz.

cat /dev/sda | tee >(wc -c >sda-length) | md5sum >sda-md5

Konkretes Problem: tee braucht unerwartet viel Rechenleistung - cat auch
aber das ist hier nur ein exemplarischer Platzhalter. cat, tee, wc und
md5sum brauchen jeweils grob einen halben Kern komplett und schaffen es
nicht die angeschlossene Platte - eine lahme 2,5"-Platte - auch nur halb
auszulasten. Es kann ja nicht sein daß ich vier oder mehr Kerne brauche
um thrashingfree diese beiden trivialen Operationen abzuschliesen, oder?

1. gehts eleganter?

2. gehts effizienter?

Zum Vergleich, ein wc -c /dev/sda braucht 8% eines Kerns bei voller
Plattenleistung, ein md5sum /dev/sda 30%.

Der Fairnesshalber, der zweite Teil der Aufgabe sieht so aus:

xz -cd hdimage.xz | tee >(wc -c >sda-length) | md5sum >sda-md5

Und da fàllt die Last von tee und md5sum nicht mehr so sehr ins Gewicht
weil die Pipes ohnehin nur auf xz warten.

Christian Brandt
 

Lesen sie die antworten

#1 Stefan Reuther
01/02/2012 - 19:11 | Warnen spam
Christian Brandt wrote:
cat /dev/sda | tee >(wc -c >sda-length) | md5sum >sda-md5

Konkretes Problem: tee braucht unerwartet viel Rechenleistung - cat auch
aber das ist hier nur ein exemplarischer Platzhalter. cat, tee, wc und
md5sum brauchen jeweils grob einen halben Kern komplett und schaffen es
nicht die angeschlossene Platte - eine lahme 2,5"-Platte - auch nur halb
auszulasten. Es kann ja nicht sein daß ich vier oder mehr Kerne brauche
um thrashingfree diese beiden trivialen Operationen abzuschliesen, oder?

1. gehts eleganter?

2. gehts effizienter?



Ich würde hier statt des 'cat' eher 'buffer' verwenden, was deutlich
größere Puffer als 'cat' verwendet und Lesen und Schreiben auf die Pipe
entkoppelt. Das hat zumindest bei mir in einigen Anwendungsfàllen
àhnlicher Art ein paar Prozente gebracht.

Damit kann vielleicht sogar das tee > wc entfallen.

NAME
buffer - very fast reblocking program

-t On exiting print to stderr a brief message showing the total
number of bytes written.

(Wobei die manpage gelogen ist, er druckt die Anzahl in Kilobytes.)


Stefan

Ähnliche fragen