接收端缩放简介

接收端缩放(RSS)是一种网络驱动程序技术,可有效地在多处理器系统中的多个 CPU 之间分配网络接收处理。 RSS 通过减少处理延迟和优化系统中的 CPU 利用率来提高网络性能。

注释

由于同一核心处理器上的超线程 CPU 共享相同的执行引擎,因此效果与具有多个核心处理器不同。 因此,RSS 不使用超线程处理器。

为了有效地处理接收的数据,微型端口驱动程序接收中断服务函数安排一个延迟过程调用(DPC)。 如果没有 RSS,典型的 DPC 会反映 DPC 调用中的所有接收数据。 因此,与中断关联的所有接收处理在发生接收中断的 CPU 上运行。 有关非 RSS 接收处理的概述,请参阅 非 RSS 接收处理

RSS 允许 NIC 和微型端口驱动程序在其他处理器上调度接收 DPC。 RSS 设计可确保与给定连接关联的处理保留在分配的 CPU 上。 NIC 实现哈希函数,生成的哈希值有助于选择 CPU。

下图演示了用于确定 CPU 的 RSS 机制。

RSS 哈希函数流图的屏幕截图,其中显示了通过哈希计算、间接表查找和 CPU 分配进行网络数据处理。

NIC 使用哈希函数在收到的网络数据中基于定义的区域(哈希类型)计算哈希值。 定义的区域可以是不连续的。

哈希值的一些最小有效位(LSB)用于为间接表编制索引。 间接表中的值用于将接收的数据分配给 CPU。

有关指定间接表、哈希类型和哈希函数的更多详细信息,请参阅 RSS 配置

借助于消息信号中断(MSI)支持,NIC 还可以中断与其关联的 CPU。 有关 NDIS 对 MSIS 的支持的详细信息,请参阅 NDIS MSI-X

RSS 的硬件支持

下图说明了 RSS 的硬件支持级别。

RSS 硬件支持级别的屏幕截图,其中显示了包含单个队列、多个队列和消息信号中断的哈希计算。

RSS 的硬件支持有三个级别:

NIC 始终传递 32 位哈希值。

RSS 如何提高系统性能

RSS 可以通过减少以下方法来提高网络系统性能:

  • 通过将来自 NIC 的接收处理分发到多个 CPU 上来减少延迟。

    分布式接收处理有助于确保不会出现一个 CPU 负载过重而另一个 CPU 空闲的情况。

  • 增加数据共享算法在同一 CPU 上执行的概率,从而减少旋转锁的开销。

    当一个在 CPU0 上执行的函数持有一个旋转锁,而 CPU1 上运行的另一个函数需要访问相同的数据时,就会产生旋转锁开销。 CPU1 会旋转(等待),直到 CPU0 释放锁。

  • 通过增加共享同一 CPU 上执行数据的软件算法的概率,重新加载缓存和其他资源。

    例如,在 CPU0 上执行和访问共享数据的函数在后续中断中在 CPU1 上执行此类重新加载。

为了在安全环境中实现这些性能改进,RSS 提供以下机制:

  • 分布式处理

    RSS 将来自 DPC 中给定 NIC 的接收指示的处理分发到多个 CPU。

  • 按顺序处理

    RSS 保留接收数据包的传递顺序。 对于每个网络连接,RSS 进程都会在关联的 CPU 上接收指示。 有关 RSS 接收处理的详细信息,请参阅 指示 RSS 接收数据

  • 动态负载均衡

    RSS 提供了一种在主机系统负载变化时重新平衡 CPU 之间的网络处理负载的方法。 若要重新平衡负载,上层驱动程序可以更改间接表。 有关指定间接表、哈希类型和哈希函数的详细信息,请参阅 RSS 配置

  • 发送端缩放

    RSS 使驱动程序堆栈能够处理同一 CPU 上给定连接的发送和接收端数据。 通常,上层驱动程序(例如 TCP)发送数据块的一部分,并在发送剩余的数据之前等待确认。 然后确认会触发后续发送请求。 RSS 间接表标识接收数据处理的特定 CPU。 默认情况下,如果发送处理是由接收确认触发的,则发送处理将在同一 CPU 上运行。 驱动程序还可以指定 CPU(例如,如果使用计时器)。

  • 安全哈希

    RSS 包含一个提供附加安全性的签名。 此签名可保护系统免受恶意远程主机的侵害,这些主机可能会尝试将系统强制进入不平衡状态。

  • MSI-X 支持

    RSS 支持 MSI-X,在以后执行 DPC 的同一 CPU 上运行中断服务例程(ISR)。 此功能可减少旋转锁开销和缓存重载。