圧縮されたテキストファイルですべての一致を検索するとします。
$ gzcat file.txt.gz | pv --rate -i 5 | grep some-pattern
pv --rate
パイプのスループットを測定するためにここで使用されます。私のマシンでは、約420Mb / s(解凍後)です。
現在、GNUパラレルを使用してパラレルgrepを実行しようとしています。
$ gzcat documents.json.gz | pv --rate -i 5 | parallel --pipe -j4 --round-robin grep some-pattern
現在、スループットは〜260Mb / sに低下しています。そして、より興味深いparallel
プロセス自体は、多くのCPUを使用しています。grep
プロセスより多い(ただし未満gzcat
)。
編集1:私はさまざまなブロックサイズ(--block
)と-N
/ -L
オプションのさまざまな値を試しました。この時点では何も助けになりません。
何が悪いのですか?
--pipe
非効率的である理由はありますか?つまり、それはある種の根本的な問題、または実装固有のものです。