如何計算網絡利用率爲發送和接收或者使用C或shell腳本?如何計算網絡利用率爲發送和接收
我的系統是一個嵌入式Linux。我目前的方法是記錄收到的字節(b1),等待1秒,然後再次記錄(b2)。然後知道鏈路速度,我計算使用的接收帶寬的百分比。
接收利用率=(((B2 - B1)* 8)/ LINK_SPEED)* 100
是否有更好的方法?
如何計算網絡利用率爲發送和接收或者使用C或shell腳本?如何計算網絡利用率爲發送和接收
我的系統是一個嵌入式Linux。我目前的方法是記錄收到的字節(b1),等待1秒,然後再次記錄(b2)。然後知道鏈路速度,我計算使用的接收帶寬的百分比。
接收利用率=(((B2 - B1)* 8)/ LINK_SPEED)* 100
是否有更好的方法?
感謝'csl'指向我的方向vnstat。這裏使用vnstat示例是我如何計算網絡利用率。
#define FP32 4294967295ULL
#define FP64 18446744073709551615ULL
#define COUNTERCALC(a,b) (b>a ? b-a : (a > FP32 ? FP64-a-b : FP32-a-b))
int sample_time = 2; /* seconds */
int link_speed = 100; /* Mbits/s */
uint64_t rx, rx1, rx2;
float rate;
/*
* Either read:
* '/proc/net/dev'
* or
* '/sys/class/net/%s/statistics/rx_bytes'
* for bytes received counter
*/
rx1 = read_bytes_received("eth0");
sleep(sample_time); /* wait */
rx2 = read_bytes_received("eth0");
/* calculate MB/s first the convert to Mbits/s*/
rx = rintf(COUNTERCALC(rx1, rx2)/(float)1048576);
rate = (rx*8)/(float)sample_time;
percent = (rate/(float)link_speed)*100;
退房的開源程序,做類似的事情。
我的搜索出現了一個叫vnstat的小工具。
它試圖查詢/ proc文件系統(如果可用),並且對於沒有它的系統使用getifaddrs。然後它獲取正確的AF_LINK接口,獲取相應的if_data結構,然後讀出發送和接收的字節,這樣的:
ifinfo.rx = ifd->ifi_ibytes;
ifinfo.tx = ifd->ifi_obytes;
還記得睡眠()可能會睡超過正好1秒,那麼你或許應該在你的公式中使用高分辨率(掛鐘)定時器 - 或者你可以深入研究if函數和結構,看看你是否找到適合你的任務的東西。
爲什麼你乘以(b2-b1)八? – csl 2009-10-06 13:16:56
@csl:鏈接速度將在bitspersecond我想,這就是爲什麼改變字節位 – vpram86 2009-10-06 13:18:21
@Aviator也許吧,但後來應該已經嵌入在不斷_link_speed_ – csl 2009-10-06 13:19:01