#31670·redpanda

rpk redpanda tune net: `--output-script` 仍会改变 NIC 通道数量 (SetChannels 会绕过脚本执行器)

作者: peter-mueller-viacom创建于 2026年9月17日更新于 2026年9月17日

版本

出现在 v25.3.14 和 dev 中 @ 3cfce474a872 (src/go/rpk/pkg/tuners/net_tuners.go:218)。

发生的情况

rpk redpanda tune net --output-script <file> 通常会生成一个不执行任何操作的调整脚本。但是,RX/TX 队列数量调整器直接调用 ethtool.SetChannels(...),而不是通过 --output-script 所依赖的执行器抽象进行路由:

src/go/rpk/pkg/tuners/net_tuners.go:218
    _, err = f.ethtool.SetChannels(nic.Name(), targetChannels)

其他列出的网络调整器变化都通过 f.executor.Execute(...) 进行(例如:341、356、479、521、573),在 --output-script 模式下,它们会渲染到文件中而不是执行。由于 218 绕过了执行器,即使在脚本渲染模式下,也会将通道更改应用到正在运行的网卡上,生成的脚本中不包含对应的 ethtool -L 行。 (一个可渲染的命令 NewEthtoolSetChannelCmd 存在,但似乎是未引用/死代码。)

影响

使用 --output-script 作为安全的"查看它会做什么"的干运行在运行中的主机上,可能会在没有任何指示的情况下,默默地降低网卡的总队列数。在 AWS ENA 中,这会触发设备关闭/打开(环路撕毁)。生成的脚本中不包含对应的 ethtool -L 行。触发条件:网络调整已启用,驱动程序受支持(包括 ENA),当前通道数 > 目标(例如,使用减少的 cores_per_dedicated_interrupt_core 的专用模式)。

重现

⚠️ 此重现会修改网卡 - 仅在可用/测试主机上运行,而不是生产节点。

  1. 在支持的网卡上,当前通道数 > 目标时,启用降低通道的路径:设置 rpk.tune_network: true 启用专用模式(rpk.allow_dedicated_interrupt_mode: true,其中 cores_per_dedicated_interrupt_core 使得专用中断 CPU 数量小于当前通道数)。注意:仅使用 rpk redpanda mode prod 可能会保留 MQ 选项,这不会触发通道降低。
  2. ethtool -l <nic>(注意综合计数)。
  3. rpk redpanda tune net --output-script /tmp/plan.sh
  4. ethtool -l <nic> → 综合计数发生变化; grep -c 'ethtool -L' /tmp/plan.sh → 0。

建议的修复

两个级别:

  • 即时(安全性)--output-script(懒加载/脚本渲染模式)遇到所需的通道更改时,明确失败,而不是默默地应用该更改 - 这样"干运行"就不会修改网卡。
  • 完整: 将通道更改路由到生成的脚本中,但请注意,这不仅仅是渲染一个 ethtool -L 行:后续 IRQ/RPS/队列检测目前会检查活动网卡状态,因此它会根据旧(更改前)拓扑计算后续命令,而脚本会推迟更改。正确的实现必须在脚本执行之前推迟后通道检测,以便渲染的后续命令反映最终拓扑。

内容来源: redpanda-data/redpanda