如何计算发送和接收的networking利用率

如何使用C或shell脚本来计算传输和接收的networking利用率?

我的系统是一个embedded式Linux。 我现在的方法是logging收到的字节(b1),等待1秒,然后再次logging(b2)。 然后知道链接速度,我计算使用的接收带宽的百分比。

接收利用率=(((b2-b1)* 8)/ link_speed)* 100

有没有更好的方法?

查看一些类似的开源程序。

我的搜索出现了一个名为vnstat的小工具。

它试图查询/ proc文件系统(如果可用),并为没有它的系统使用getifaddrs 。 然后提取正确的AF_LINK接口,获取相应的if_data结构,然后读出传输和接收的字节,如下所示:

ifinfo.rx = ifd->ifi_ibytes; ifinfo.tx = ifd->ifi_obytes; 

另外请记住,睡眠()可能睡眠时间超过1秒,所以你可能应该在你的方程中使用高分辨率(挂钟)计时器 – 或者你可以深入研究if函数和结构,看看你是否找到合适的为你的任务。

感谢“csl”指向vnstat的方向。 在这里使用vnstat示例是我如何计算网络利用率。

 #define FP32 4294967295ULL #define FP64 18446744073709551615ULL #define COUNTERCALC(a,b) ( b>a ? ba : ( a > FP32 ? FP64-ab : FP32-ab)) 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;