net.core.default_qdisc=fq 是什么?BBR 为什么常和 fq 一起配置
更新日期:2026-07-07
很多 BBR 教程都会写两行:
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
第二行很容易理解:把 TCP 拥塞控制算法切换到 BBR。第一行的 fq 是什么,为什么常和 BBR 一起出现?
qdisc 是什么
qdisc 是 queueing discipline,简单说就是 Linux 网络接口发包前的排队规则。它决定数据包如何排队、调度和发送。
常见 qdisc:
- `fq`:Fair Queue,支持按流公平排队和 pacing。
- `fq_codel`:结合公平排队和 CoDel,常用于降低 bufferbloat。
- `mq`:multi-queue,多队列网卡常见。
- `pfifo_fast`:更传统的队列方式。
fq 对 BBR 的意义
BBR 会估算瓶颈带宽和 RTT,然后按节奏发送数据。fq 能更好地支持 pacing,让数据包不要过于突发地挤出去。
所以很多服务器场景会把 BBR 和 fq 一起配置:
sudo tee /etc/sysctl.d/99-bbr.conf >/dev/null <<'EOF'
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
sudo sysctl --system
为什么 tc qdisc show 不是总能看到 fq
执行:
tc qdisc show
你可能看到 `mq`。这不一定是错,因为多队列网卡会在 root 显示 mq。此时先看:
sysctl net.core.default_qdisc
如果是 fq,通常已经达到教程配置目标。
fq 和 fq_codel 怎么选
如果你明确是为了 BBR,通常选 fq。
如果你是在家庭路由器、网关、OpenWrt 上处理 bufferbloat,fq_codel 或 cake 可能更常见。
服务器侧不要盲目混用太多网络调优参数。先保持简单:
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr