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 的专用模式)。
重现
⚠️ 此重现会修改网卡 - 仅在可用/测试主机上运行,而不是生产节点。
- 在支持的网卡上,当前通道数 > 目标时,启用降低通道的路径:设置
rpk.tune_network: true并 启用专用模式(rpk.allow_dedicated_interrupt_mode: true,其中cores_per_dedicated_interrupt_core使得专用中断 CPU 数量小于当前通道数)。注意:仅使用rpk redpanda mode prod可能会保留 MQ 选项,这不会触发通道降低。 ethtool -l <nic>(注意综合计数)。rpk redpanda tune net --output-script /tmp/plan.shethtool -l <nic>→ 综合计数发生变化;grep -c 'ethtool -L' /tmp/plan.sh→ 0。
建议的修复
两个级别:
- 即时(安全性) 在
--output-script(懒加载/脚本渲染模式)遇到所需的通道更改时,明确失败,而不是默默地应用该更改 - 这样"干运行"就不会修改网卡。 - 完整: 将通道更改路由到生成的脚本中,但请注意,这不仅仅是渲染一个
ethtool -L行:后续 IRQ/RPS/队列检测目前会检查活动网卡状态,因此它会根据旧(更改前)拓扑计算后续命令,而脚本会推迟更改。正确的实现必须在脚本执行之前推迟后通道检测,以便渲染的后续命令反映最终拓扑。
内容来源: redpanda-data/redpanda