本节介绍了 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 的步骤:

  1. 登录到 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    | 
  2. 要验证在 SE 中是否正确启用这些功能,您可以在控制器 CLI 上检查以下统计信息:

    1. GRO 统计信息是接口统计信息的一部分。对于 GRO,检查以下参数的统计信息:

      1. gro_mbufs_coalesced

    2. TSO 统计信息是 mbuf 统计信息的一部分。对于 TSO,检查以下参数的统计信息:

      1. num_tso_bytes

      2. num_tso_chain

  3. 执行 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_queuesmax_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_vnicnum_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