本节介绍了 SE 组的功能,例如 TSO、GRO、RSS 以及多个调度程序和队列。
TCP 分段卸载 (TSO)
TCP 分段卸载用于减少快速网络上的 TCP/IP 的 CPU 开销。具有启用了 TSO 的硬件的主机将 TCP 数据发送到网卡 (Network Interface Card, NIC),而无需在软件中对数据进行分段。这种类型的卸载依赖于网卡对数据进行分段,并在每个分段中添加 TCP、IP 和数据链路层标头。
路由中的 TSO 支持
在 SE 中启用了路由支持的情况下,无法使用通用接收卸载 (Generic Receive Offload, GRO) 功能,因为路由是无状态的,如果不允许对数据包进行 IP 分段,SE 将无法对大型 GRO 合并数据包进行分段。由于支持该功能,可以将 GRO 用于路由的流量,从而允许 SE 将较大的数据包拆分成较小的 TCP 分段,这是通过 TSO(如果接口支持)或 SE 中的路由层完成的。
在三向握手期间,客户端和服务器都通告各自的 MSS,以便对等体不会发送超过 MSS 的 TCP 分段。默认情况下,将启用该功能。
通用接收卸载 (GRO)
GRO 是一种软件技术,它减少 CPU 开销以增加高带宽网络连接的入站吞吐量。它的工作方式是,在将来自单个流的多个入站数据包传送到网络堆栈的更高层之前,将这些数据包合并为更大的数据包链,从而减少必须处理的数据包数。
如果在短时间内收到同一流的多个数据包,则会使用 GRO。如果入站数据包属于不同的流,则可能看不出启用 GRO 的好处。
以下是 DPDK 库中的两种 GRO 运行模式。
- 静态模式:
-
在单个突发中收到的数据包在 GRO 层中进行处理。这是 22.1.1 之前的 NSX Advanced Load Balancer 版本中的运行模式。
- 定时器模式:
-
收到的数据包在配置的超时内在 GRO 层中进行处理。SYN、PSH、RST 等特殊数据包不受该超时的限制。
GRO 基于定时器模式。与静态模式 GRO 相比,定时器模式 GRO 可以提供更好的性能并降低 CPU 占用率。
可以在 ServiceEngineGroup 中的 dpdk_gro_timeout_interval
下面配置超时值。对于新服务引擎组,默认 GRO 超时值为 50us
。该控制项的范围可以在 0
到 900us
之间变化。如果 dpdk_gro_timeout_interval
配置为零,服务引擎组中的 SE 将恢复为 GRO 静态模式。要将 SE 升级到 22.1.1,dpdk_gro_timeout_interval
将为零,这意味着采用突发模式 GRO,这是传统的运行模式。
从 NSX Advanced Load Balancer 22.1.2 版本开始,如果 SE 组中的 SE 具有 8 个或更多 vCPU,则会启用 GRO。
多队列支持
NSX Advanced Load Balancer 上的调度程序负责从网卡中获取入站数据包,将它们发送到相应的内核以完成代理工作,然后将出站数据包发回到网卡。例如,对于小型 UDP 数据包,单核调度程序可能无法高效地处理以较高的每秒数据包数 (PPS) 速率接收流量的 40G 网卡甚至 10G 网卡。
可以将来自单个物理网卡的流量分配给多个队列以解决该问题,其中的每个队列由不同内核上的调度程序进行处理。接收方调整 (RSS) 支持在单个物理网卡上使用多个队列。
接收方调整 (RSS)
如果在 NSX Advanced Load Balancer 上启用了 RSS,则网卡在接收路径中使用多个队列。网卡将流固定到队列,并将属于同一流的数据包放入同一队列中使用。这有助于驱动程序将数据包处理分布到多个 CPU 上,从而提高效率。
在 NSX Advanced Load Balancer SE 上,在发送端也启用了多队列功能,即,将不同的流固定到不同的队列(属于同一流的数据包放在同一队列中),以便在 CPU 之间分配数据包处理负载。
不支持将多队列功能 (RSS) 与 IPv6 地址一起使用。如果启用了 RSS,则无法为 NSX Advanced Load Balancer 服务引擎接口配置 IPv6 地址。同样,如果已在 NSX Advanced Load Balancer 服务引擎接口上配置 IPv6 地址,则无法在这些接口上启用多队列功能 (RSS)。
每个网卡多个调度程序和队列
根据服务引擎处理的流量,可以配置具有一个或多个内核的调度程序数量。具有较高 PPS 负载的系统配置了大量调度程序,而较高的代理负载(例如 SSL 工作负载)可能不需要大量调度程序。
此外,还可以为每个调度程序内核设置每个网卡的队列数以获得更好的性能。服务引擎尝试自动检测每个环境的最佳设置。
服务引擎数据路径隔离模式
NSX Advanced Load Balancer 服务引擎可以将一个或多个服务引擎内核专用于非 se-dp
任务。如果服务引擎托管对延迟敏感的应用程序,该配置是特别有用的。此外,这还会对总体服务引擎性能造成影响,因为一个或多个内核专用于非 se-dp
任务。
混合 RSS 模式
SE 混合 RSS 模式仅适用于配置了 RSS 的 DPDK 模式,并允许每个 SE vCPU 作为单独单元运行,从而允许每个内核同时处理调度和代理作业,并且还禁止跨内核传送数据包,即,对于 2 核服务引擎,vCPU0
和 vCPU1
的每个内核分别标记为 (dispatcher-0, proxy-0)、(dispatcher-1, proxy-1),dispatcher-0 上的任何输入流通过 proxy-0 输出,而不会传送到 proxy-1,反之亦然。
混合模式是作为一个可配置的属性引入的,目的是在低核 SE 上实现更高的性能,特别是 vCenter/NSX-T Cloud 上的 1 核和 2 核 SE。
适用于公有云的自动 RSS
为公有云上的虚拟机置备的网络带宽(容量)取决于实例类型,而不取决于连接的网络接口的总网络带宽。SE 将确定为其实例类型发布的网络容量,并在自动模式下相应地配置 RSS,即 max_queues_per_vnics
和 num_dispatcher_cores
。管理员可以手动配置这些值。更新这些控制项需要重新引导。
根据流量配置文件,还可以启用专用调度程序模式。这是一个运行时属性,可以通过 dedicated_dispatcher_core
(布尔值)控制项进行切换。
升级注意事项
对于将来的版本,您可以将新 SE 组的自动 RSS 功能配置为自动 (0)。
在升级后,将保留以前的配置。