如何在Linux中获取NIC RX环的数量

时间:2017-03-16 11:18:12

标签: c linux network-programming

我尝试通过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环数的正确方法吗?

1 个答案:

答案 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都说:

  • “82574L支持两个发送描述符环”
  • “图26显示了两个接收描述符环的结构。”

希望-x选项或检查NIC的文档都有帮助。它似乎不能通过ethtool始终如一地直接访问。