接收端缩放简介
接收端缩放 (RSS) 是一种网络驱动程序技术,可实现在多处理器系统中多个 CPU 之间高效分布网络接收处理。
注意
由于同一核心处理器上的超线程 CPU 共享相同的执行引擎,因此效果与具有多个核心处理器不同。 因此,RSS 不使用超线程处理器。
为了有效地处理收到的数据,微型端口驱动程序的接收中断服务函数 (DPC) 计划延迟过程调用。 如果没有 RSS,典型的 DPC 指示 DPC 调用中的所有已接收数据。 因此,与中断关联的所有接收处理在发生接收中断的 CPU 上运行。 有关非 RSS 接收处理的概述,请参阅 非 RSS 接收处理。
RSS 允许 NIC 和微型端口驱动程序在其他处理器上计划接收 DPC。 RSS 设计可确保与给定连接关联的处理保留在分配的 CPU 上。 NIC 实现哈希函数,生成的哈希值有助于选择 CPU。
下图演示了用于确定 CPU 的 RSS 机制。
NIC 使用哈希函数计算所接收网络数据中定义区域 (哈希类型) 的哈希值。 定义的区域可以是不连续的。
哈希值的 LSB) (多个最小有效位用于为间接表编制索引。 间接表中的值用于将接收的数据分配给 CPU。
有关指定间接表、哈希类型和哈希函数的更多详细信息,请参阅 RSS 配置。
如果消息信号中断 (MSI) 支持,NIC 还可以中断关联的 CPU。 有关 NDIS 对 MSI 的支持的详细信息,请参阅 NDIS MSI-X。
RSS 的硬件支持
下图说明了 RSS 的硬件支持级别。
RSS 有三种可能的硬件支持级别:
使用单个队列进行哈希计算:NIC 计算哈希值,微型端口驱动程序将接收的数据包分配给与 CPU 关联的队列。
包含多个接收队列的哈希计算:NIC 将接收的数据缓冲区分配给与 CPU 关联的队列。
消息信号中断 (MSI) :NIC 中断应处理接收的数据包的 CPU。
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) 。 这可减少旋转锁开销和重新加载缓存。