2011-06-17 20 views
1

如果我有proc1 | proc2有沒有方法可以準確測量流過管道的比特率,而不會像測量設備不在那樣改變行爲?會像T恤一樣工作好嗎?我想要proc1 | tee proc2 > flow_measurement_thing還是proc1 | tee flow_measurement_thing > proc2?如果我正確理解管道,默認情況下,unix管道可以咀嚼4096字節,並且如果接收器沒有以最快的速度讀取數據,它們可以阻止,所以我擔心測量設備本身可能會導致「層流」如果我沒有正確實施,管道將變得「動盪」。如何精確測量流經命名管道的比特率?

實際使用情況是粘起來蟒蛇,從操作系統命名管道..這裏有一個大大簡化例子

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相同的速率抽取比特

+2

確實光伏(管道查看器)的幫助? http://www.ivarch.com/programs/pv.shtml – 2011-06-17 01:27:44

+0

是的,這只是訣竅。謝謝 ! – wim 2011-06-17 04:36:31

回答

2

正如Corey Goldberg所說,您應該使用pv。這是一個非常好的工具,可用於大多數* nix系統。你可以做這些事情:

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

pv會告訴你每種情況下的吞吐量。

或者,如果capture的輸出是確定性的,則只需使用計時器即可。

+0

+1 pv非常適合這份工作 – joeslice 2011-06-17 01:54:02

+0

如何強制'pv'以b/s表示吞吐量?我試圖使用'netcat'來測量不同位置的WLAN吞吐量。目前我只是使用Gnome系統監視器來測量WiFi接口的吞吐量,但是在將來我想使用像'pv'這樣的命令行工具。 – 2013-08-09 14:39:34

+0

@JamesHaigh:在我的系統上(使用MacPorts的Mac OS,使用'port install pv'),pv打印B/s(每秒字節數)。如果你說你需要位而不是字節,那麼只需乘以8.; – 2013-08-09 14:48:58