use*_*533 5 nic interface traffic
我想以最简单的方式在用户空间中获取 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 位值显示这些统计信息,但我认为它们进行了一些操作,而不是以简单的方式填充struct rtnl_link_stats64。
直接从/sys/class/net/ethX/statistics/rx_bytes(使用 fopen、fscanf...)读取是可以的,但它的性能不如使用 API 读取。
在用户空间中是否有一种简单的方法可以让struct rtnl_link_stats64填充我想念的相关统计数据?
显然,我发现的最好的(性能方面)方法是使用 libnl 库中的 netlink API。
这是我发现的一个简单示例程序的链接,该程序实现了它: https ://gist.github.com/beejeebus/cc4fb07472cf5a0afd41