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-0p1p1-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