我试图通过ethtool api从我的程序中获取nic rx环的计数,并且
命令ethtool_gchannels,但程序返回错误:“不支持操作。”
示例代码:
echannels.cmd = ETHTOOL_GCHANNELS;
req.ifr_data = (void*)&echannels;
if (ioctl(sock, SIOCETHTOOL, &req) != 0)
ERR("Can't get %s channels info! %s", nic, strerror(errno));
else
rx_no = echannels.rx_count;
另外,我还尝试从ethtool“ethtool-l eth0”获取它,结果相同:
#ethtool -l eth0
Channel parameters for eth0:
Cannot get device channel parameters
: Operation not supported
,但在/proc/interrupts中,我看到nic有多个rx环绑定到不同的cpu核心。
有谁能告诉我从C代码中获得RX环计数的正确方法吗?
最佳答案
我也在寻找我的nic的戒指数量。在与比我更有知识的人(他也没有搞清楚)交谈之后,我们达成协议,你可能需要检查网卡的规格;它似乎不是通过ethtool
直接可用的。
然而,this post还显示,通过检查间接寻址表,它可以显示rx环(但不是tx环)计数:
$ sudo ethtool -x eth0
RX flow hash indirection table for eth3 with 2 RX ring(s):
0: 0 1 0 1 0 1 0 1
8: 0 1 0 1 0 1 0 1
16: 0 1 0 1 0 1 0 1
24: 0 1 0 1 0 1 0 1
然而,在我的一台机器上,我看到:
$ sudo ethtool -x enp9s0
Cannot get RX ring count: Operation not supported
尽管documentation for the NIC同时表示:
“82574L支持两个传输描述符环”
“图26显示了两个接收描述符环的结构。”
希望
-x
选项或检查NIC的文档将有所帮助。似乎无法通过ethtool
一致地直接访问它。关于c - 如何在Linux中获取NIC RX环的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42832593/