我尝试通过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有多个绑定到不同CPU核心的RX环。 任何人都可以告诉我从C代码获取RX环数的正确方法吗?
答案 0 :(得分:0)
我还希望得到我的NIC的环数。在与一个比我更了解情况的人(他也没有搞清楚)之后,我们达成协议,你可能需要检查你的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都说:
希望-x
选项或检查NIC的文档都有帮助。它似乎不能通过ethtool
始终如一地直接访问。