OpenBSD:PF 队列突破 4 Gbps 瓶颈
发布: (2026年3月19日 GMT+8 21:43)
3 分钟阅读
原文: Hacker News
Source: Hacker News
介绍
OpenBSD 的 PF 包过滤器长期以来在 pf.conf(5) 的 queue 规则中支持 HFSC 流量整形。然而,HFSC 服务曲线结构(struct hfsc_sc)内部的 32 位限制将带宽值上限限制在约 4.29 Gbps——即 u_int 能表示的最大值。
随着 10 G、25 G、100 G 网络接口已变得司空见惯,且内核在 SMP 与高速驱动方面的工作持续进行,这一限制已成为实际障碍。在队列上配置 bandwidth 10G 时会悄悄回绕,导致调度行为错误且不可预测。
补丁
一个新的 patch 将内核 HFSC 调度器中的带宽字段从 32 位扩展为 64 位整数,彻底消除了这一瓶颈。同样的改动还修复了 pftop(1) 中的显示错误——之前在 4 Gbps 以上的带宽值会显示不正确。
关键更改
- HFSC 调度器中的带宽字段现为 64 位。
pftop正确显示高速带宽值。- 对使用低于 4 Gbps 值的现有配置没有影响。
实际影响
PF 队列的带宽配置现在能够正确支持现代高速接口。熟悉的语法保持不变:
queue rootq on em0 bandwidth 10G
queue defq parent rootq bandwidth 8G default
支持的数值最高可达 999 G,足以满足当今及未来的接口需求。使用低于 4 G 的现有配置仍可正常工作,无需修改。
使用示例
# 在接口 em0 上定义一个带宽为 10 Gbps 的根队列
queue rootq on em0 bandwidth 10G
# 定义一个带宽为 8 Gbps 的默认子队列
queue defq parent rootq bandwidth 8G default
参考资料
- OpenBSD 项目: https://www.openbsd.org/
- PF 手册页: https://man.openbsd.org/pf
- PF 队列文档: https://man.openbsd.org/pf.conf#QUEUEING
pftop源码: https://cvsweb.openbsd.org/ports/sysutils/pftop- 补丁讨论: https://marc.info/?l=openbsd-tech&m=177375870004342&w=2
- 补丁结论(准备提交): https://marc.info/?l=openbsd-tech&m=177379810031898&w=2
- OpenBSD 基金会捐赠: https://www.openbsdfoundation.org/donations.html