Angenommen, ich möchte alle Übereinstimmungen in einer komprimierten Textdatei finden:
$ gzcat file.txt.gz | pv --rate -i 5 | grep some-pattern
pv --rate
wird hier zur Messung des Rohrdurchsatzes verwendet. Auf meinem Computer sind es ungefähr 420 MBit / s (nach der Dekomprimierung).
Jetzt versuche ich paralleles grep mit GNU parallel zu machen.
$ gzcat documents.json.gz | pv --rate -i 5 | parallel --pipe -j4 --round-robin grep some-pattern
Jetzt sinkt der Durchsatz auf ~ 260 MBit / s. Und was noch interessanter parallel
ist, ist, dass viel CPU verbraucht wird. Mehr als grep
Prozesse (aber weniger als gzcat
).
EDIT 1 : Ich habe verschiedene Blockgrößen ( --block
) sowie verschiedene Werte für -N
/ -L
options ausprobiert . An dieser Stelle hilft mir nichts.
Was mache ich falsch?
--pipe
es ineffizient ist? Ich meine, ist es ein grundlegendes Problem oder eher ein spezifisches Implementierungsproblem?