1

測定デバイスが存在しないかproc1 | proc2のように動作を変更することなく、パイプを流れるビットレートを正確に測定する方法はありますか? ティーのようなものは大丈夫ですか?私は欲しいですproc1 | tee proc2 > flow_measurement_thingproc1 | 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

4

1 に答える 1

2

Corey Goldberg が言ったように、 を使用する必要がありますpv。これは非常に優れたツールであり、ほとんどの *nix システムで利用できます。次のことができます。

capture | pv > /dev/null
capture | convert | pv > /dev/null

pvケースごとのスループットを教えてくれます。

または、出力captureが決定論的である場合は、タイマーを使用してください。

于 2011-06-17T01:47:22.020 に答える