31.4. 接收端扩展
接收端扩展 (RSS),也称为多队列接收,分布网络接收,在多个基于硬件的接收队列之间接收处理,允许多个 CPU 处理入站网络流量。RSS 可以用来减轻因出现一个 CPU 过载而造成的中断处理瓶颈,并降低网络延迟。默认情况下启用 RSS。
在适当的网络设备驱动程序中,应该为 RSS 处理网络活动的队列或 CPU 数量:
-
对于
bnx2x
驱动程序,它在num_queues
参数中配置。 -
对于
sfc
驱动程序,它在rss_cpus
参数中配置。
无论如何,它通常都在 /sys/class/net/设备/queues/rx-queue/
目录中配置,其中 device 是网络设备的名称(如 enp1s0
),而 rx-queue 是适当的接收队列的名称。
irqbalance
守护进程可以与 RSS 结合使用,以减少跨节点内存传输和缓存行退回的可能性。这会降低处理网络数据包的延迟。
31.4.1. 查看中断请求队列
配置接收扩展 (RSS) 时,红帽建议将队列数量限制为每个物理 CPU 内核的一个队列。在分析工具中,Hyper-threads 通常表示为独立的内核,但为所有内核配置队列,包括超线程等逻辑内核对网络性能并不有用。
启用后,RSS 根据每个 CPU 的处理量在可用 CPU 间平均分配网络处理。但是,在使用 ethtool
的 --show-rxfh-indir
和 --set-rxfh-indir
参数会修改 RHEL 如何分发网络活动,以及指定某些类型的网络活动比其类型更重要。
这个步骤描述了如何查看中断请求队列。
流程
要确定您的网络接口卡是否支持 RSS,请检查多个中断请求队列是否与
/proc/interrupts
中的接口关联:# egrep 'CPU|p1p1' /proc/interrupts CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 89: 40187 0 0 0 0 0 IR-PCI-MSI-edge p1p1-0 90: 0 790 0 0 0 0 IR-PCI-MSI-edge p1p1-1 91: 0 0 959 0 0 0 IR-PCI-MSI-edge p1p1-2 92: 0 0 0 3310 0 0 IR-PCI-MSI-edge p1p1-3 93: 0 0 0 0 622 0 IR-PCI-MSI-edge p1p1-4 94: 0 0 0 0 0 2475 IR-PCI-MSI-edge p1p1-5
输出显示 NIC 驱动程序为
p1p1 接口
创建了 6 个接收队列(p1p1-0
到p1p1-5
)。它还显示各个队列处理多少个中断,以及哪个 CPU 服务中断。在这种情况下,有 6 个队列,因为默认情况下,这个特定 NIC 驱动程序为每个 CPU 创建一个队列,这个系统有 6 个 CPU。在 NIC 驱动程序中,这是一个相当常见的模式。使用地址
0000:01:00.0
列出 PCI 设备的中断请求队列:# ls -1 /sys/devices/*/*/0000:01:00.0/msi_irqs 101 102 103 104 105 106 107 108 109