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 三条命令的协同调试流程

在实际调试中,三条命令应配合使用,形成完整的诊断链路:

  1. 第一步:执行 show port info X,确认 RX 队列数 > 1 且 RSS 状态为 enabled。
  2. 第二步:执行 show port rss-hash X,确认所需的哈希类型已启用,RSS key 正确。
  3. 第三步:执行 show port rss-reta X,确认 RETA 条目均匀分布到各队列。

以下 SVG 图展示了三条命令在 RSS 调试中的协同关系:

RSS 调试三条命令协同流程 show port info X 检查 RX 队列数 & RSS 开关 show port rss-hash X 检查哈希类型 & RSS Key show port rss-reta X 检查 RETA 队列映射 RX 队列 >1 ? YES NO 需增加 RX 队列数 或检查 RSS 启用配置 哈希类型 匹配 ? YES NO 需添加缺失的哈希类型 或修改 RSS 配置 RETA 均匀 ? YES RSS 配置正确 NO 需重新配置 RETA 或检查流规则映射

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 观察变化。