4. testpmd 中查看 RSS 配置:使用 show port info、show port rss-hash、show port rss-reta
在 DPDK testpmd 中,RSS(Receive Side Scaling)配置的正确性直接决定了多队列流量能否均匀分发。本章将系统讲解三条核心查看命令:show port info、show port rss-hash 和 show port rss-reta,帮助开发者快速诊断 RSS 配置状态。
调试前提:在执行 RSS 查看命令前,请确保目标端口已启动(
port start X)且至少绑定了一个 RX 队列。若端口处于停止状态,部分 RSS 信息可能无法正确显示。
4.1 show port info:查看端口基础 RSS 能力
show port info X 命令用于显示指定端口的基础信息,其中包含 RSS 相关的关键字段:RX 队列数、RSS 硬件支持能力以及当前启用的 RSS 类型。
执行示例:
testpmd> show port info 0
********************* Infos for port 0 *********************
MAC address: 00:1B:21:76:34:56
Device name: 0000:03:00.0
Driver: net_ixgbe
Firmware version: 1.5.0
Connect to socket: 0
memory allocation on the socket: 0
Link status: up
Link speed: 10 Gbps
Link duplex: full-duplex
MTU: 1500
Promiscuous mode: enabled
Allmulticast mode: disabled
Maximum number of MAC addresses: 127
Maximum number of VLAN IDs: 4095
**Number of RX queues: 4**
**Number of TX queues: 4**
**RSS disabled**
**RSS hash types: ipv4-frag | ipv4-tcp | ipv4-udp | ipv4-sctp | ipv4-other | ipv6-frag | ipv6-tcp | ipv6-udp | ipv6-sctp | ipv6-other | l2-payload**
关键字段解读:
| 字段 | 含义 | 调试价值 |
|---|---|---|
| Number of RX queues | 当前端口配置的 RX 队列数量 | 确认多队列是否已启用;若为 1,则 RSS 无法生效 |
| RSS disabled / enabled | RSS 功能的全局开关状态 | 若显示 disabled,需检查启动参数或流规则配置 |
| RSS hash types | 硬件支持的 RSS 哈希类型列表 | 确认当前驱动是否支持所需的哈希类型(如 ipv4-tcp) |
常见误区:“RSS disabled”并不一定意味着 RSS 硬件不支持,更多是因为启动时未指定
--rss-ip 或 --rss-udp 等参数,或者流规则中未显式启用 RSS action。此时需要检查 testpmd 启动参数或流规则配置。
4.2 show port rss-hash:查看 RSS 哈希配置
show port rss-hash X 命令用于显示端口当前生效的 RSS 哈希配置,包括哈希函数、哈希键(RSS Key)以及启用的哈希类型。
执行示例:
testpmd> show port rss-hash 0
RSS functions:
- toeplitz
- xor
- default
RSS key:
6D 5A 56 DA 25 5B 0E C2 56 8A 41 67 D1 25 0B 0E
A2 3A 2B 7A E2 7A 4F 2C C8 CD 06 F0 4C 33 98 0F
5E 40 F2 04 4B 6B 9A 4D
Hash types:
- ipv4
- ipv4-tcp
- ipv4-udp
- ipv6
- ipv6-tcp
- ipv6-udp
参数解析:
- RSS functions:列出硬件支持的哈希算法。Toeplitz 是标准算法,XOR 为部分网卡提供的简化算法。
- RSS key:40 字节的哈希密钥,用于计算哈希值。默认 key 由 DPDK 或驱动提供,也可通过
port config X rss-hash-key自定义。 - Hash types:当前启用的哈希类型。只有被列出的类型才会参与 RSS 哈希计算。
调试技巧:若发现流量未按预期分发,首先检查
show port rss-hash 中的 hash types 是否包含所需的协议类型。例如,TCP 流量需要 ipv4-tcp 或 ipv6-tcp 被启用。
4.3 show port rss-reta:查看 RSS 重定向表
show port rss-reta X 命令用于显示 RSS 重定向表(Redirection Table),该表决定了哈希值到 RX 队列的映射关系。RETA 是 RSS 流量分发的最终执行者。
执行示例:
testpmd> show port rss-reta 0
RSS RETA configuration for port 0:
RSS RETA size = 128
RSS RETA entries:
RETA index: 0 queue: 0
RETA index: 1 queue: 1
RETA index: 2 queue: 2
RETA index: 3 queue: 3
RETA index: 4 queue: 0
RETA index: 5 queue: 1
RETA index: 6 queue: 2
RETA index: 7 queue: 3
...
RETA index: 124 queue: 0
RETA index: 125 queue: 1
RETA index: 126 queue: 2
RETA index: 127 queue: 3
RETA 核心概念:
| 参数 | 说明 | 典型值 |
|---|---|---|
| RETA size | 重定向表条目总数,通常为 128 或 512 | 128(ixgbe)、512(i40e) |
| RETA index | 哈希值取模后的索引,范围 0 ~ (size-1) | 0 ~ 127 |
| queue | 该索引映射到的目标 RX 队列 ID | 0 ~ (nb_rx_queue-1) |
观察要点:当所有 RETA 条目均匀分布在所有 RX 队列上时(如上例 0,1,2,3 循环),说明 RSS 配置正确。若所有条目都映射到同一个队列(如全部为 queue 0),则 RSS 未生效,流量将全部进入单一队列。
4.4 三条命令的协同调试流程
在实际调试中,三条命令应配合使用,形成完整的诊断链路:
- 第一步:执行
show port info X,确认 RX 队列数 > 1 且 RSS 状态为 enabled。 - 第二步:执行
show port rss-hash X,确认所需的哈希类型已启用,RSS key 正确。 - 第三步:执行
show port rss-reta X,确认 RETA 条目均匀分布到各队列。
以下 SVG 图展示了三条命令在 RSS 调试中的协同关系:
4.5 常见问题与排查建议
| 现象 | 可能原因 | 排查命令 | 解决方案 |
|---|---|---|---|
| 所有流量进入 queue 0 | RSS 未启用或 RETA 全映射到 queue 0 | show port info + show port rss-reta |
检查启动参数 --rss-ip;重新配置 RETA |
| 部分协议流量未分发 | 哈希类型未包含该协议 | show port rss-hash |
使用 port config X rss-hash-ip 添加缺失类型 |
| RSS 显示 disabled | 启动时未启用 RSS 或流规则覆盖 | show port info |
重启 testpmd 并添加 --rss-ip --rss-udp 参数 |
| RETA 大小与预期不符 | 不同网卡 RETA 大小不同 | show port rss-reta |
确认网卡规格;ixgbe 为 128,i40e 为 512 |
实战建议:在编写流规则时,建议先通过上述三条命令确认 RSS 基础配置正确,再添加流规则。若流规则中使用了
rss action,RETA 可能会被流规则动态修改,此时应结合 show port rss-reta 观察变化。