7

我想设置 Intel 10G NIC 使用的 RX/TX 队列数。让我解释一下原因:

我在 Dell R720 系统上使用 X520 类型的 Intel 10G NIC。我正在使用 ixgbe 版本 3.6.7-k。Ubuntu 3.2.0-59 中的内核。

我在机器上 24 个内核中的 4 个上运行我的网络应用程序。目前 NIC 使用 flow-director,所以我有 24 个 TX 和 RX 队列,而大多数 IRQ 最终在运行应用程序的 4 个内核上运行。

但是,我看到一些 IRQ 正在其他 20 个队列上运行(这可能是因为 flow-director 对大约 20% 的流量进行采样,因此一些流量通过常规 RSS)。现在我不希望在其他 20 个内核上运行任何 IRQ,因为它们正在执行不同的任务,该任务被运行的 IRQ 损坏。

我尝试仅将中断的关联性设置为我使用的 4 个内核,但这不适用于 flow-director。我想更好的方法是只使用 4 个 RX/TX 队列并将它们分配给专用内核。但是我找不到在 ixgbe 驱动程序中设置 RX/TX 队列数量的方法(尽管这对于我熟悉的其他 10G 驱动程序来说非常简单,例如 Broadcom 的 bnx2x)。

任何想法?

4

2 回答 2

4

这在最新的 Linux 内核源(截至 3.18.0-rc1)中的 ixgbe 版本(当前为 3.19.1-k)是不可能的。

您需要从支持 RSS 参数的e1000.sf.net获取最新的 ixgbe 驱动程序(当前为 3.22.3)。modinfo ixgbe

parm: RSS:Number of Receive-Side Scaling Descriptor Queues, default 0=number of cpus (array of int)

因此,如果您有一个 ixgbe NIC 并想要 4 个队列,则需要在 modprobe.conf(或发行版中的等效项)中添加这样的一行:

options ixgbe RSS=4

然后,您需要为 /proc/interrupts 中与您的 NIC 匹配的任何 irq 设置 /proc/irq/*/smp_affinity cpu 掩码。

于 2014-10-23T02:23:08.450 回答
4

某些版本的 ixgbe 驱动程序包含在 linux 内核中(自 2013 年以来,3.9 内核,ixgbe 的“3.11.33-k”版本)即使没有 RSS 模块选项也可以在运行时更改 RSS(队列)计数。有更改网卡参数的ethtool工具,有更改频道的选项:

   ethtool -l|--show-channels devname

   ethtool -L|--set-channels devname [rx N] [tx N] [other N]
          [combined N]


   -l --show-channels
          Queries the specified network device for the numbers of
          channels it has.  A channel is an IRQ and the set of queues
          that can trigger that IRQ.

   -L --set-channels
          Changes the numbers of channels of the specified network
          device.

       rx N   Changes the number of channels with only receive queues.

       tx N   Changes the number of channels with only transmit queues.

       other N
              Changes the number of channels used only for other
              purposes e.g. link interrupts or SR-IOV co-ordination.

       combined N
              Changes the number of multi-purpose channels.

用 或测试 ixgbe eth1 的当前频道(RSS、队列)计数ethtool -l eth1并用ethtool -L eth1 combined 4或改变ethtool -L eth1 rx 2 tx 2

实施于net/ethernet/intel/ixgbe/ixgbe_ethtool.chttp : //elixir.free-electrons.com/linux/v4.12/source/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c#L3442 static const struct ethtool_ops ixgbe_ethtool_ops = { ... .get_channels = ixgbe_get_channels,.set_channels = ixgbe_set_channels,... }

ixgbe_get_channelshttp ://elixir.free-electrons.com/linux/v4.12/source/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c#L3127

ixgbe_set_channels改变adapter->ring_feature[RING_F_RSS].limithttp ://elixir.free-electrons.com/linux/v4.12/source/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c#L3164

自 3.9 版 Linux 内核(2013 年左右)开始实施: * http://elixir.free-electrons.com/linux/v3.9/ident/ixgbe_get_channels * https://patchwork.ozlabs.org/patch/211119/ “ [RFC,v2,09/10] ixgbe: 添加对显示 Tx/Rx 通道数量的支持" * https://patchwork.ozlabs.org/patch/211120/ "[RFC,v2,10/10] ixgbe:添加对 set_channels ethtool 操作 diffmbox 的支持"

于 2017-09-04T07:58:48.837 回答