本节介绍了 TSO、GRO 和 RSS 配置过程。
在 NSX Advanced Load Balancer SE 上启用 TSO 和 GRO
在 NSX Advanced Load Balancer SE 上默认启用 TSO 功能,而默认停用 GRO 功能。
从以前版本升级将保留 SE 组的 GRO 配置。不过,如果 SE 组是在 NSX Advanced Load Balancer 22.1.2 版本中新创建的,则 GRO 配置为自动模式。如果 SE 组中的 SE 具有 8 个或更多 vCPU,则会启用 GRO。
启用 TSO-GRO 不会造成中断,并且不需要重新启动 SE。
从 NSX Advanced Load Balancer 22.1.1 版本开始,如果进行 PUT API 调用以更新现有的 ServiceEngineGroup 属性,而没有为 GRO 配置控制项 (
"disable_gro": true
) 明确设置值,将默认重置/启用 GRO。在通过 CLI 更新 SE 组属性时,不会注意到该行为。
以下是在 SE 上启用 TSO 和 GRO 的步骤:
登录到 CLI 并使用 configure serviceenginegroup 命令启用 TSO 和 GRO 功能。
[admin:cntrl]: > configure serviceenginegroup Default-Group Updating an existing object. Currently, the object is: | disable_gro | True | | disable_tso | True | [admin:cntrl]: serviceenginegroup> no disable_gro Overwriting the previously entered value for disable_gro [admin:cntrl]: serviceenginegroup> no disable_tso Overwriting the previously entered value for disable_tso [admin:cntrl]: serviceenginegroup> save | disable_gro | False | | disable_tso | False |
要验证在 SE 中是否正确启用这些功能,您可以在控制器 CLI 上检查以下统计信息:
GRO 统计信息是接口统计信息的一部分。对于 GRO,检查以下参数的统计信息:
gro_mbufs_coalesced
TSO 统计信息是
mbuf
统计信息的一部分。对于 TSO,检查以下参数的统计信息:num_tso_bytes
num_tso_chain
执行 show serviceengine <interface IP address> interface 命令,并使用
grep
命令筛选输出,如下所示:[admin:cntrl]: > show serviceengine 10.1.1.1 interface | grep gro | gro_mbufs_coalesced | 1157967 | | gro_mbufs_coalesced | 1157967 |
注:上述示例输出适用于 1 队列(无 RSS)。
请参见以下启用了 RSS 的 4 队列 RSS 的输出:
注:对于端口通道接口,请提供相关的物理接口名称以作为 intfname 选项中的筛选器。作为参考,请参见下面提到的以太网 4 接口输出。
show serviceengine 10.1.1.1 interface filter intfname eth4 | grep gro | gro_mbufs_coalesced | 320370 | | gro_mbufs_coalesced | 283307 | | gro_mbufs_coalesced | 343143 | | gro_mbufs_coalesced | 217442 | | gro_mbufs_coalesced | 1164262 |
注:网卡统计信息是特定接口的每个队列的统计信息之和。
[admin:cntrl]: > show serviceengine 10.1.1.1 mbufstats | grep tso | num_tso_bytes | 4262518516 | | num_tso_chains | 959426 |
如果启用了这些功能,上述输出中的统计信息将反映 TSO 参数的非零值。
在 NSX Advanced Load Balancer SE 上启用 RSS
SE 组属性中的 distribute_queues
控制项启用和禁用 RSS。登录到 CLI 并使用 distribute_queues
命令启用 RSS 功能。
对 distribute_queues
参数进行任何更改需要重新启动 SE。
| distribute_queues | False | [admin:cntrl]: serviceenginegroup> distribute_queues Overwriting the previously entered value for distribute_queues [admin:cntrl]: serviceenginegroup> save | distribute_queues | True |
如果启用了 RSS,则 SE 中的所有网卡配置并使用 SE 计算的最佳数量的队列对。在有关可配置的调度程序的小节中介绍了如何计算该最佳数量。
例如,支持 RSS 的 4 队列接口的输出如下所示:
[admin:cntrl]: > show serviceengine 10.1.1.1 interface filter intfname bond1 | grep ifq | ifq_stats[1] | | ifq_stats[2] | | ifq_stats[3] | | ifq_stats[4] |
每个接口队列的 ipackets
(输入数据包)和 opackets
(输出数据包)的计数器值为非零值,如下所示:
[admin:cntrl]: > show serviceengine 10.1.1.1 interface filter intfname bond1 | grep pack | ipackets | 40424864 | | opackets | 42002516 | | ipackets | 10108559 | | opackets | 11017612 | | ipackets | 10191660 | | opackets | 10503881 | | ipackets | 9873611 | | opackets | 10272103 | | ipackets | 10251034 | | opackets | 10208920 |
输出包括每个队列的统计信息以及网卡的总体合并统计信息。
配置示例
下面提到的示例说明了一个裸机计算机上的配置,该计算机具有 24 个 vCPU、两个 10G 网卡、一个由两个 10G 网卡绑定的网卡并启用了 distribute_queues
。
将 configure
num_dispatcher_cores
参数的值设置为 8。[admin:cntrl]: serviceenginegroup> num_dispatcher_cores 8 Overwriting the previously entered value for num_dispatcher_cores [admin-ctrlr]: serviceenginegroup> save
[admin:cntrl]:> show serviceengine 10.1.1.1 seagent | grep -E "dispatcher|queues" |num_dispatcher_cpu | 8 |num_queues | 8
将 configure num_dispatcher_cores 参数值设置为零(默认值)。在重新启动 SE 后,虽然为调度程序配置的值设置为零,但队列数和调度程序数更改为 4,如以下输出所示:
[admin:cntrl]:> show serviceengine 10.1.1.1 seagent | grep -E "dispatcher|queues" |num_dispatcher_cpu | 4 |num_queues | 4
配置每个 vNIC 的最大队列数
max_queues_per_vnic
参数支持以下值:
- 零(保留):
-
自动(根据网卡和运行环境推断每个调度程序的最佳队列数)
- 1(保留):
-
每个网卡一个队列(默认)
- 整数值:
-
2 的幂。最大限制为 16。
max_queues_per_vnic
参数弃用 distribute_queues
参数,后者用于启用 RSS 运行模式,其中队列数等于调度程序数。
迁移例程确保在启用了 distribute_queues
时 max_queues_per_vnic
参数设置为 num_dispatcher_cores
,否则,max_queues_per_vnic
设置为 1。
您可以使用以下命令配置 max_queues_per_vnic
:
[admin:admin-controller-1]: serviceenginegroup> max_queues_per_vnic INTEGER 0,1,2,4,8,16 Maximum number of queues per vnic Setting to '0' utilises all queues that are distributed across dispatcher cores. [admin:admin-controller-1]: > configure serviceenginegroup Default-Group Updating an existing object. Currently, the object is: +-----------------------------------------+----------------------------+ | Field | Value | +-----------------------------------------+----------------------------+ [output truncated] | se_rum_sampling_nav_percent | 1 | | se_rum_sampling_res_percent | 100 | | se_rum_sampling_nav_interval | 1 sec | | se_rum_sampling_res_interval | 2 sec | | se_kni_burst_factor | 2 | | max_queues_per_vnic | 1 | | core_shm_app_learning | False | | core_shm_app_cache | False | | pcap_tx_mode | PCAP_TX_AUTO | +-----------------------------------------+----------------------------+ [admin:admin-controller-1]: serviceenginegroup> max_queues_per_vnic 2 Overwriting the previously entered value for max_queues_per_vnic [admin:admin-controller-1]: serviceenginegroup> save
show serviceegine [se] seagent 显示每个调度程序的队列数以及每个接口的总队列数。
show serviceengine [se] seagent | num_dp_heartbeat_miss | 0 | | se_registration_count | 2 | | se_registration_fail_count | 0 | | num_dispatcher_cpu | 1 | | ------------------------- truncated output----------------------------| | num_flow_cpu | 1 | | num_queues | 1 | | num_queues_per_dispatcher | 1 |
配置混合 RSS
hybrid_rss_mode
是 SE 组的可配置属性。它在配置了 RSS 的 DPDK 模式下切换 SE 仅混合运行模式;其中,每个 SE 数据路径实例作为单独的混合实例运行以执行调度程序和代理功能。这需要重新引导。
以下是配置命令:
configure serviceenginegroup <se-group> > hybrid_rss_mode [admin:10-102-66-36]: serviceenginegroup> max_queues_per_vnic 0 Overwriting the previously entered value for max_queues_per_vnic [admin:10-102-66-36]: serviceenginegroup>> hybrid_rss_mode Overwriting the previously entered value for hybrid_rss_mode [admin:10-102-66-36]: serviceenginegroup> save
必须进行检查以保护 hybrid_rss_mode,这要求将该属性切换到 True
之前启用 RSS。
该属性还根据 SE 进行显示。以下是配置命令:
----------------------------------------+ | num_dispatcher_cpu | 4 | | num_flow_cpu | 4 | | num_queues | 4 | | num_queues_per_dispatcher | 1 | | hybrid_rss_mode | True | +---------------------------------------+
为公有云配置自动 RSS
通过使用该功能,您可以为公有云(例如 AWS、Azure 和 GCP)上部署的 NSX Advanced Load Balancer SE 配置 RSS。
您可以将 SE 组属性 max_queues_per_vnic
和 num_dispatcher_cores
设置为零。SE 需要在配置后重新引导。
[admin:controller]: > configure serviceenginegroup Default-Group [admin:controller]: serviceenginegroup> max_queues_per_vnic 0 [admin:controller]: serviceenginegroup> num_dispatcher_cores 0 [admin:controller]: serviceenginegroup> save
RSS 控制项的默认值如下所示:
max_queues_per_vnic = 1
num_dispacther_core = 0
为公有云配置专用的调度程序
专用调度程序 (Dedicated Dispatcher, DD) 是一个运行时 SE 组可配置属性,可以切换 dedicated_dispatcher_core
控制项以设置或取消设置该属性。
[admin:controller]: > configure serviceenginegroup Default-Group [admin:controller]: serviceenginegroup> dedicated_dispatcher_core [admin:controller]: serviceenginegroup> save [admin:controller]: > configure serviceenginegroup Default-Group [admin:controller]: serviceenginegroup> no dedicated_dispatcher_core [admin:controller]: serviceenginegroup> save