Amazon Linux 2环境XPS配置后TX队列绑定CPU不生效问题咨询
检查内核CONFIG_XPS配置项方法
执行以下命令即可验证:
cat /boot/config-$(uname -r) | grep CONFIG_XPS
若输出CONFIG_XPS=y则说明内核已编译开启XPS特性,Amazon Linux 2的4.14版本内核默认已开启该配置。
XPS不生效的排查&额外配置项
- 首先确认XPS掩码的写入格式正确:xps_cpus的取值为十六进制CPU掩码,直接写入十进制数值会导致绑定规则不符合预期。你当前的配置写法未指定十六进制标识,会被shell识别为十进制写入,比如
echo 10实际写入的是十进制10(对应十六进制0xa,二进制1010),会绑定到CPU1和CPU3,而非你预期的CPU4。正确的配置写法需要加上0x前缀,示例如下:
echo 0x1 > /sys/class/net/eth1/queues/tx-0/xps_cpus echo 0x2 > /sys/class/net/eth1/queues/tx-1/xps_cpus echo 0x4 > /sys/class/net/eth1/queues/tx-2/xps_cpus echo 0x8 > /sys/class/net/eth1/queues/tx-3/xps_cpus echo 0x10 > /sys/class/net/eth1/queues/tx-4/xps_cpus echo 0x20 > /sys/class/net/eth1/queues/tx-5/xps_cpus echo 0x40 > /sys/class/net/eth1/queues/tx-6/xps_cpus echo 0x80 > /sys/class/net/eth1/queues/tx-7/xps_cpus echo 0x100 > /sys/class/net/eth1/queues/tx-8/xps_cpus echo 0x200 > /sys/class/net/eth1/queues/tx-9/xps_cpus echo 0x400 > /sys/class/net/eth1/queues/tx-10/xps_cpus echo 0x800 > /sys/class/net/eth1/queues/tx-11/xps_cpus
写入完成后执行cat /sys/class/net/eth1/queues/tx-*/xps_cpus核对每个队列的掩码输出是否符合预期。
- 检查是否存在冲突的网络特性:如果开启了RFS(接收侧流 steering)或网卡硬件TX分流卸载,会覆盖XPS的队列选择逻辑。可临时关闭RFS测试:
echo 0 > /proc/sys/net/core/rps_sock_flow_entries,同时执行ethtool -k eth1 | grep tx-检查TX相关硬件卸载项,临时关闭后验证XPS是否生效。 - 确认网卡TX队列数量与配置匹配:执行
ls /sys/class/net/eth1/queues/ | grep tx | wc -l确认网卡实际TX队列数为12,避免实际队列数量与配置数量不符。 - 验证CPU编号对应关系:执行
lscpu确认CPU编号是否为物理核编号,若开启了超线程,需避免绑定到同一物理核的不同逻辑线程。测试时拉长iperf运行时间到60秒以上,执行ethtool -S eth1 | grep tx_packets观察各TX队列的包数增长,同时执行mpstat -P ALL 1观察对应CPU的软中断占用,验证绑定规则是否匹配。
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

