我试图通过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/

10-11 01:50