如果我有proc1 | proc2
有没有办法准确测量流经管道的比特率,而不改变行为,好像测量设备不在那里?会发球怎么样?我想要proc1 | tee proc2 > flow_measurement_thing
还是proc1 | tee flow_measurement_thing > proc2
?如果我正确理解管道,默认情况下unix管道可以咀嚼4096字节,如果接收器没有像它进来那样快地读取数据,它们就会阻塞,所以我担心测量设备本身可能导致“层流”流过如果我没有正确实现它,管道将变得“动荡”。
实际的用例是用python编写的,使用来自os的命名管道。这是一个非常简化的例子
import os, subprocess
os.mkfifo('pipe')
subprocess.Popen(['convert', '-i', 'pipe', '-o', 'somewhere_else'])
subprocess.Popen(['capture', '-o', 'pipe'])
为简单起见,我们假设转换器不会修改比特率,那么我希望能够验证capture | convert | /dev/null
是否以与capture | /dev/null
相同的速率抽取比特
答案 0 :(得分:2)
正如Corey Goldberg所说,你应该使用pv
。它是一个非常好的工具,可在大多数* nix系统上使用。你可以做这些事情:
capture | pv > /dev/null
capture | convert | pv > /dev/null
pv
将告诉您每种情况的吞吐量。
或者,如果capture
的输出是确定性的,只需使用计时器。