Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

软件接收端扩展

概述

现代 NIC 支持多个接收和传输描述符队列(多队列)。在接收时,NIC 可以将不同的数据包发送到不同的队列,以便在 CPU 之间分配处理。NIC 通过对每个数据包应用过滤器来分发数据包,该过滤器将其分配给少量逻辑流之一。每个流的数据包被引导到单独的接收队列,而该队列又可由单独的 CPU 处理。此机制通常称为接收端缩放 (RSS)。RSS 技术的目标是均匀地提高性能。当延迟是一个问题时,或者每当接收中断处理形成瓶颈时,都会启用 RSS。在 CPU 之间分散负载可减少队列长度。对于低延迟网络,最佳设置是分配与系统中 CPU 数量(或 NIC 最大值,如果较低)一样多的队列。最有效的高速率配置可能是接收队列数量最少的配置,其中没有接收队列由于 CPU 饱和而溢出。可以通过接收端缩放提高桥接吞吐量。

根据流线程关联体系结构,每个流线程 (FLT) 从 NIC 的专用接收队列中轮询数据包,并处理数据包,直到运行完成。因此,流线程绑定到 NIC 接收 (RX) 和传输 (TX) 队列进行数据包处理,以避免任何分歧。因此,网卡的 RX 和 TX 队列数量必须与 vSRX 虚拟防火墙数据平面 CPU 数量相同,才能支持多核 vSRX 虚拟防火墙风格。软件 RSS (SWRSS) 通过跨各种 FLT 线程实施基于软件的数据包喷射,消除了运行 vSRX 虚拟防火墙多核风格的 NIC 硬件队列的这种限制。

软件 RSS 将单个流的处理卸载到多个内核之一,因此从 NIC 获取数据包的流线程可以处理更多数据包。与 RSS 类似,使用 SWRSS 时网络吞吐量的提升与 CPU 使用率呈线性相关。

在 SWRSS 中,每个网卡端口初始化的硬件 RX/TX 队列数量与 I/O 线程数相等或更少。I/O 线程数是根据 vSRX 虚拟防火墙中所有网卡接口中所有网卡接口中数据路径 CPU 和最小网卡队列数确定的。例如,如果 I/O 线程计算为 4,则每个 NIC 端口的硬件队列数可以小于或等于 4 个队列。

如果在支持的 vSRX 虚拟防火墙实例中,网卡没有足够数量的队列作为 FLT 线程,则会通过流数据路径启用软件 RSS (SWRSS)。SWRSS实现了从网卡接收队列获取报文后,跨FLT进行数据包分发的软件模型。通过消除网卡硬件队列限制,SWRSS 通过支持各种 vSRX 虚拟防火墙实例类型来帮助扩展 vCPU。

在 I/O 操作期间,从 NIC 端口的接收队列中获取数据包并执行数据包分类。然后将数据包分发到 FLT 线程虚拟队列。这些虚拟队列通过 DPDK 环形队列实现。在传输路径中,SWRSS 从 FLT 线程的虚拟传输队列中获取数据包,并将这些数据包推送到网卡传输队列进行传输。

SWRSS I/O 线程数是根据 vSRX 虚拟防火墙实例中的 CPU 总数和网卡队列数来选择的。不支持将 HWRSS 和 SWRSS 混合操作模式。

了解软件接收端缩放配置

本主题提供有关软件接收端扩展 (SWRSS) 类型及其配置的详细信息。

SWRSS支持两种操作模式,并根据所需的数据路径CPU数量启用。这些模式是共享 IO 模式和专用 IO 模式。这些模式根据所需的数据路径 CPU 数量启用。vSRX 虚拟防火墙和 vSRX3.0 仅支持专用 I/O 模式。

在专用 I/O 模式下,流进程为 I/O 操作创建专用 I/O 线程。根据 vSRX 虚拟防火墙所需的 I/O 线程数,I/O 线程与专用网卡端口相关联。然后以轮询方法将接收和发送队列的NIC端口绑定到每个I/O线程,以实现均匀分布并避免I/O线程锁定。每个专用 I/O 线程以突发模式从 NIC 接收队列中提取数据包并分发到 FLT 线程,反之亦然,用于数据包传输的 TX 路径。

SWRSS 根据 vCPU 的数量启用。如果在具有不同 vCPU 的 vSRX 虚拟防火墙中,网卡作为流线程 (FLT) 的队列数量不足,则流进程将启用软件 RSS (SWRSS)。

在以下场景中未启用 SWRSS:

  • 当 NIC 具有足够数量的硬件 RX 或 TX 队列以供所需的 PFE 数据路径 CPU 使用时。

  • 当 vSRX 虚拟防火墙(基于 vCPU 数量)和网卡产生的 FLT CPU 数量少于在最近的硬件 RSS (HWRSS) 模式下获得的 FLT CPU 数量时。在这种情况下,vSRX 虚拟防火墙将启用 HWRSS 模式,这会产生比 SWRSS 模式更多的 FLT CPU,从而提供更好的数据包处理吞吐量。

  • 对于具有某些类型的网卡的 vSRX 虚拟防火墙,如果不建议使用 SWRSS,因为该网卡支持的网卡队列数量少于运行专用 IO 线程所需的网卡数量。在这种情况下,SWRSS 处于启用状态,但额外的 CPU 会连接到 FLT CPU,直到 I/O CPU 被完全利用。

如果未启用 SWRSS,请使用命令启用 set security forwarding-options receive-side-scaling software-rss mode enable SWRSS。运行此命令时,无论网卡 RSS 或 vCPU 数量如何,都将强制启用 SWRSS。如果不使用 CLI 启用 SWRSS,则会自动根据 FLT:IO ( 4:1) 的默认比率来决定是否启用 SWRSS。

要配置所需的 IO 线程数,请使用 set security forwarding-options receive-side-scaling software-rss io-thread-number <1-8> 命令。要查看分配给 IO 流线程的实际 vCPU 数,请使用 show security forwarding-options resource-manager 命令。

您可以根据 IO 线程和工作线程的架构和概念来决定自动或强制启用 SWRSS。启用 SWRSS 会影响性能,因此建议仅在需要时更改 IO 线程数,直到达到性能影响瓶颈点。