我想以最简单的方式在用户空间中获得NIC驱动程序 64位统计信息。
API函数getifaddrs()的手册页建议了一个简单的示例程序,该程序使用32位的“ struct rtnl_link_stats ”(例如,可以在此处查看它:http://man7.org/linux/man-pages/man3/getifaddrs.3.html)进行操作。
这种结构的问题很明显:32位变量会快速回绕(超过2 ^ 32)(例如“ rx_bytes ”)。
在包含 struct rtnl_link_stats 的同一头文件(linux/if_link.h)中,有一个具有64位变量的相似结构: struct rtnl_link_stats64 。
我确信我对64位变量的统计数据非常接近,但不幸的是,我没有这样做。
有像 dev_get_stats()之类的函数,但是它们都是为内核空间编写的。
像“ ethtool -S ”之类的程序以64位值显示这些统计信息,但是我认为它们进行了一些操作,而不是以简单的方式填充结构rtnl_link_stats64 。
可以直接从 / sys / class / net / ethX / statistics / rx_bytes读取(使用fopen,fscanf ...),但效果不如使用API读取。
用户空间中是否有一种简单的方法来让结构rtnl_link_stats64 充满我想念的相关统计信息?
最佳答案
显然,我发现的最佳(性能明智)方法是使用库libnl中的netlink API。
这是我找到的实现该程序的简单示例程序的链接:
https://gist.github.com/beejeebus/cc4fb07472cf5a0afd41
关于interface - 在用户空间中获取Linux接口(interface)流量64位统计信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48987493/