15.9. 使用 Node Tuning Operator 减少 NIC 队列
Node Tuning Operator 有助于减少 NIC 队列以提高性能。使用性能配置集进行调整,允许为不同的网络设备自定义队列。
15.9.1. 使用性能配置集调整 NIC 队列 复制链接链接已复制到粘贴板!
通过性能配置集,您可以调整每个网络设备的队列计数。
支持的网络设备:
- 非虚拟网络设备
- 支持多个队列的网络设备(通道)
不支持的网络设备:
- 纯软件网络接口
- 块设备
- Intel DPDK 虚拟功能
先决条件
-
使用具有
cluster-admin角色的用户访问集群。 -
安装 OpenShift CLI(
oc)。
流程
-
以具有
cluster-admin权限的用户身份登录运行 Node Tuning Operator 的 OpenShift Container Platform 集群。 - 创建并应用适合您的硬件和拓扑的性能配置集。有关创建配置集的指南,请参阅"创建性能配置集"部分。
编辑这个创建的性能配置集:
oc edit -f <your_profile_name>.yaml
$ oc edit -f <your_profile_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
net对象填充spec字段。对象列表可以包含两个字段:-
userLevelNetworking是一个必需字段,指定为布尔值标记。如果userLevelNetworking为true,则队列数将设置为所有支持设备的保留 CPU 计数。默认值为false。 devices是一个可选字段,指定队列设置为保留 CPU 数的设备列表。如果设备列表为空,则配置适用于所有网络设备。配置如下:interfaceName:此字段指定接口名称,并支持 shell 样式的通配符,可以是正数或负数。-
通配符语法示例如下:
<string> .* -
负规则的前缀为感叹号。要将网络队列更改应用到排除列表以外的所有设备,请使用
!<device>。例如!eno1。
-
通配符语法示例如下:
-
vendorID:网络设备供应商 ID,以带有0x前缀的 16 位十六进制数字代表。 deviceID:网络设备 ID(model),以带有0x前缀的 16 位十六进制数字代表。注意当指定
deviceID时,还必须定义vendorID。与设备条目interfaceName、vendorID或vendorID加deviceID中指定的所有设备标识符相匹配的设备会被视为一个网络设备。然后,此网络设备的 net 队列数设置为保留的 CPU 计数。当指定了两个或多个设备时,网络队列数将设置为与其中一个设备匹配的任何网络设备。
-
使用此示例性能配置集将所有设备的队列数设置为保留的 CPU 计数:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用这个示例性能配置集,将所有与任何定义的设备标识符匹配的保留 CPU 数设置为保留的 CPU 计数:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用这个示例性能配置集,将所有以接口名称
eth开头的设备的队列数设置为保留的 CPU 计数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用这个示例性能配置集。将所有设备的队列数设置为保留的 CPU 计数,该接口具有
eno1以外的任何接口:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用这个示例性能配置集,将所有具有接口名称
eth0,vendorID为0x1af4、deviceID为0x1000的设备的队列数设置为保留 CPU 数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用更新的性能配置集:
oc apply -f <your_profile_name>.yaml
$ oc apply -f <your_profile_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15.9.2. 验证队列状态 复制链接链接已复制到粘贴板!
在这一部分中,一些示例演示了不同的性能配置集以及如何验证是否应用了更改。
示例 1
在本例中,网络队列数为所有支持的设备设置为保留 CPU 数(2)。
性能配置集中的相关部分是:
使用以下命令显示与设备关联的队列状态:
注意在应用了性能配置集的节点中运行这个命令。
ethtool -l <device>
$ ethtool -l <device>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在应用配置集前验证队列状态:
ethtool -l ens4
$ ethtool -l ens4Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置集后验证队列状态:
ethtool -l ens4
$ ethtool -l ens4Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 1
- 该组合通道显示为所有支持的设备保留 CPU 的总数为 2。这与性能配置集中配置的内容匹配。
示例 2
在本例中,针对具有特定 vendorID 的所有受支持的网络设备,网络队列数设置为保留 CPU 数(2)。
性能配置集中的相关部分是:
使用以下命令显示与设备关联的队列状态:
注意在应用了性能配置集的节点中运行这个命令。
ethtool -l <device>
$ ethtool -l <device>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置集后验证队列状态:
ethtool -l ens4
$ ethtool -l ens4Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 1
- 带有
vendorID=0x1af4的所有支持设备的预留 CPU 总数为 2。例如,如果存在另一个网络设备ens2,其vendorID=0x1af4也具有总计的网络队列为 2。这与性能配置集中配置的内容匹配。
示例 3
在本例中,针对与任何定义的设备标识符匹配的所有受支持网络设备,网络队列数设置为保留 CPU 数(2)。
命令 udevadm info 提供了有关设备的详细报告。在这个示例中,设备是:
对于
interfaceName等于eth0的设备,以及具有vendorID=0x1af4的设备,并使用以下性能配置集,将网络队列设置为 2:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置集后验证队列状态:
ethtool -l ens4
$ ethtool -l ens4Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 带有
vendorID=0x1af4的所有支持设备的预留 CPU 总数设置为 2。例如,如果存在另一个带有vendorID=0x1af4的网络设备ens2,则其总子网队列也将设置为 2。类似地,interfaceName等于eth0的设备会将总网络队列设置为 2。
15.9.3. 与调整 NIC 队列关联的日志记录 复制链接链接已复制到粘贴板!
详细说明所分配设备的日志消息记录在相应的 Tuned 守护进程日志中。以下信息可能会记录到 /var/log/tuned/tuned.log 文件中:
记录了一个
INFO信息,详细描述了成功分配的设备:INFO tuned.plugins.base: instance net_test (net): assigning devices ens1, ens2, ens3
INFO tuned.plugins.base: instance net_test (net): assigning devices ens1, ens2, ens3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果无法分配任何设备,则会记录
WARNING信息:WARNING tuned.plugins.base: instance net_test: no matching devices available
WARNING tuned.plugins.base: instance net_test: no matching devices availableCopy to Clipboard Copied! Toggle word wrap Toggle overflow