networking - ixgbe : setting the number of RX/TX queues

标签 networking linux-device-driver affinity nic irq

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

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

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

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

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

任何的想法?

最佳答案

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

您需要从 e1000.sf.net 获取最新的 ixgbe 驱动程序(当前为 3.22.3) ,支持RSS参数。来自 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 掩码。

关于networking - ixgbe : setting the number of RX/TX queues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23730268/

相关文章:

linux - 在 gdb 中设置应用亲和性

c# - Process.ProcessorAffinity 和 Thread.ProcessorAffinity 之间的区别

php - 使用 NTLM 身份验证在代理服务器后面的 Windows 上安装 Symfony

api - 通过电力网络发送和接收数据

windows-xp - 如何从Windows XP的批处理文件设置处理器关联性?

在外部事件发生之前阻止读取操作的正确方法?

linux - IP地址如何通知linux内核?

networking - R 中的巨型组件

azure - Azure VM 的多个公共(public) IP

c - Linux 内核空间中的结构?