接收端缩放简介

接收端缩放 (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 对 MSI 的支持的详细信息,请参阅 NDIS MSI-X

RSS 的硬件支持

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

显示 RSS 不同级别的硬件支持的关系图。

RSS 有三种可能的硬件支持级别:

NIC 始终传递 32 位哈希值。

RSS 如何提高系统性能

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

  • 通过跨多个 CPU 分配来自 NIC 的接收处理来处理延迟。

    分布式接收处理有助于确保在另一个 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) 。 这可减少旋转锁开销和重新加载缓存。