启用 NetQ 接收方调整以将 vNIC 请求卸载到物理网卡。这可提高接收方数据的数据包性能。
当物理网卡向主机发送数据包时,此主机上的增强型网络堆栈 (ENS) 会在 NUMA 节点上的不同逻辑内核之间分发数据,此 ENS 配置为增强型数据路径模式,作为主机交换机运行。有多种方法可以配置 RSS 引擎。
作为网络管理员,您希望提高接收端数据的吞吐量数据包性能,您可能需要考虑使用以下方法之一来配置 RSS,以利用其优势。
这两种模式是:
- RSS 引擎专用于单个 vNIC 队列:专用 RSS 引擎会将来自 vNIC 的所有请求完全卸载到物理网卡。在此模式下,单个 RSS 引擎专用于单个 vNIC 队列。这可提高吞吐量性能,因为 pNIC 管理接收端数据,并在可用的硬件队列之间共享这些数据以处理请求。vNIC 队列与 pnic 队列位于同一逻辑内核或快速路径上。
- RSS 引擎由多个 vNIC 队列共享:在此模式下,多个硬件队列可用于 vNIC 队列。但是,处理流量的 vNIC 可能与处理数据的物理硬件队列不一致。这意味着,无法保证 vNIC 与物理网卡将保持一致。
注: 如果在网卡上启用了默认队列接收方调整 (DRSS),请将其停用。
前提条件
- 主机必须运行 ESXi 版本 7 Update 3 或更高版本。
- 确保网卡支持 RSS 功能。
- 支持的驱动程序:Intel40en(异步驱动程序)。请参阅驱动程序文档以确认其是否具有与 ENS 兼容的 RSS 实施。
过程
- 要启用 NetQ/RSS,esxcli system module parameters set -m -i40en_ens -p DRSS=0,0 RSS=1,0。
其中,DRSS=0,0 表示在两个网卡端口上停用了 DRSS。
RSS=1,0 表示在其中一个网卡端口上启用了 NetQ RSS。
- 要卸载驱动程序,请运行 vmkload_mod -u i40en_ens。
- 要重新加载驱动程序以使 RSS 设置生效,请运行 vmkload_mod i40en_ens。
- 停止设备管理器以触发 PCI fastconnect,以便它可以扫描设备并将驱动程序与网卡相关联。
运行 kill -HUP 'ps | grep mgr | awk '{print $1}'。
- 要配置多个 RSS 引擎以处理来自 vNIC 的 RSS 请求,请在虚拟机的 .vmx 文件中配置以下参数。
ethernet.pnicfeatures = '4',表示 vNIC 请求 RSS 功能。
ethernet.ctxPerDev = '3',表示启用多个上下文(多个逻辑内核)以便处理每个 vNIC。已为多个队列配置连接到 vSphere 交换机的虚拟机。这意味着 NUMA 节点的多个逻辑内核可以处理来自 vNIC 的 Tx 和 Rx 流量。
当多个 vNIC 请求 RSS 卸载时,增强型网络堆栈 (ENS) 不会将其 RSS 请求卸载到 pnic,而由共享的 RSS 引擎处理其请求。对于共享的 RSS,可以使用多个 RSS 队列,但不保证 vNIC 队列或一个 pNIC 队列处于同一位置。
- 要配置专用 RSS 引擎以处理来自 vNIC 的请求,请在虚拟机的 .vmx 文件中配置以下参数。
ethernet.rssoffload=True,
启用上述配置后,来自 vNIC 的 RSS 请求将卸载到物理网卡。只有一个 vNIC 可以将其请求卸载到 RSS 引擎。在此模式下,vNIC 队列与 pNIC 队列对齐。
- 验证数据包流量是否分布在 RSS 引擎提供的硬件队列上。
vsish
get /net/pNics/vmnicX/stats
示例输出:
rxq0: pkts=0 bytes=0 toFill=2047 toProc=0 noBuf=0 csumErr=0
rxq1: pkts=0 bytes=0 toFill=2047 toProc=0 noBuf=0 csumErr=0
rxq2: pkts=0 bytes=0 toFill=2047 toProc=0 noBuf=0 csumErr=0
rxq3: pkts=0 bytes=0 toFill=2047 toProc=0 noBuf=0 csumErr=0
rxq4: pkts=0 bytes=0 toFill=2047 toProc=0 noBuf=0 csumErr=0
rxq5: pkts=0 bytes=0 toFill=2047 toProc=0 noBuf=0 csumErr=0
rxq6: pkts=0 bytes=0 toFill=2047 toProc=0 noBuf=0 csumErr=0
rxq7: pkts=0 bytes=0 toFill=2047 toProc=0 noBuf=0 csumErr=0
txq0: pkts=0 bytes=0 toFill=0 toProc=0 dropped=0
txq1: pkts=0 bytes=0 toFill=0 toProc=0 dropped=0
txq2: pkts=0 bytes=0 toFill=0 toProc=0 dropped=0
txq3: pkts=0 bytes=0 toFill=0 toProc=0 dropped=0
txq4: pkts=0 bytes=0 toFill=0 toProc=0 dropped=0
txq5: pkts=0 bytes=0 toFill=0 toProc=0 dropped=0
txq6: pkts=0 bytes=0 toFill=0 toProc=0 dropped=0
txq7: pkts=0 bytes=0 toFill=0 toProc=0 dropped=0