圧縮されたテキストファイルですべての一致を検索するとします。
$ 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非効率的である理由はありますか?つまり、それはある種の根本的な問題、または実装固有のものです。