다중 파이프라인 명령에서 "병목 현상"을 확인하는 방법

다중 파이프라인 명령에서 "병목 현상"을 확인하는 방법

여러 파이프를 사용하는 명령이 있다고 가정해 보겠습니다. 이는 어떤 명령이든 가능하지만 예를 들어 이 간단한 잘라내기 및 정렬을 사용해 보겠습니다. 예를 들어

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] 

관련 정보