マルチパイプラインコマンドで「ボトルネック」を確認する方法

マルチパイプラインコマンドで「ボトルネック」を確認する方法

複数のパイプを使用するコマンドがあるとします。これはどんなコマンドでも可能ですが、たとえば、この単純な切り取りと並べ替えを試してみましょう。例えば

cat data.tsv | cut -f1,5,8,12 | sort | uniq -c | sed -e "s/cat/dog/g" | sort -k1nr > output.tsv

これをどのように「分析」しますか?

とにかく私の実行時間を遅くするのはsedまたはuniqであると言えますか?

私の理想的な世界では、次のようなことを見たいと思います。

1- cat: 15 lines per second
2- cut: 13 lines per second
3- sort: 6 lines per second
4- uniq: 6 lines per second (Limited by input)
5- sed: 6 lines per second (Limited by input)
6- sort 6 lines per second (Limited by input)
7- write 6 lines per second (Limited by input)

どんなアイデアがありますか?

ベストアンサー1

pvパイプを通過する行数を計算するために使用することをお勧めします。 PVを通じてボトルネック現象を段階的に閲覧できます。

cat data.tsv | pv -lr > /dev/null

cat data.tsv | cut -f1,5,8,12 | pv -lr > /dev/null

cat data.tsv | cut -f1,5,8,12 | sort | pv -lr > /dev/null

cat data.tsv | cut -f1,5,8,12 | sort | uniq -c | pv -lr > /dev/null

...

PV出力の例:

timeout 10 yes | sed 's/yes/foo/' | rev | pv -lr >/dev/null
[ 120k/s] 

おすすめ記事