sysctl -- net.core.default_qdisc
net.core.default_qdisc 是 Linux 内核网络子系统中的一个 全局默认队列调度器(Queue Discipline, qdisc) 参数,用来决定:
当网络接口没有显式配置 qdisc 时,内核默认使用哪一种队列调度算法来发送数据包。
net.core.default_qdisc决定了网卡发送队列的默认调度策略,直接影响网络延迟、吞吐量和公平性。
-
qdisc 位于 内核 -> 网络栈 -> 网卡驱动之前
-
作用:
- 数据包排队
- 拥塞控制
- 公平调度
- 限速 / 整形
简化路径:
应用
↓
TCP/IP 协议栈
↓
qdisc(队列调度)
↓
网卡驱动
↓
物理网卡
net.core.default_qdisc = pfifo_fast
特点
- 先进先出(FIFO)
- 3 个优先级队列
- 不感知延迟
- 不做拥塞管理
优点
- 简单
- CPU 开销低
缺点
- 容易 Bufferbloat(延迟暴涨)
- 高并发下体验差
适合
- 老内核
- 低并发、简单服务器
net.core.default_qdisc = fq
特点
- 按流公平调度
- 每个 TCP 流独立队列
- 自动 pacing(发送节奏控制)
优点
- 明显降低延迟
- 防止单一连接“霸占带宽”
- 对 TCP 非常友好
缺点
- CPU 消耗略高于 pfifo_fast
适合
- 数据库
- RPC
- 微服务
- 大多数服务器场景
📌 RHEL 8+ / AlmaLinux 8+ 推荐
net.core.default_qdisc = fq_codel
特点
- fq + CoDel(主动丢包控制)
- 专门解决 Bufferbloat
- 延迟非常稳定
优点
- 极低延迟
- 网络体验最好
缺点
- CPU 消耗更高
- 在超高吞吐场景可能影响极限性能
适合
- 网关
- LVS / NAT
- 云主机出口
- 对延迟极度敏感的场景
net.core.default_qdisc = fq
✔ 平衡延迟与吞吐 ✔ 几乎没有副作用 ✔ 强烈推荐
net.core.default_qdisc = fq_codel
✔ 防止队列堆积 ✔ 延迟稳定 ✔ 抗突发流量能力强
net.core.default_qdisc = pfifo_fast
default_qdisc 不等于 TCP 拥塞控制,但二者强相关:
| 组件 | 作用 |
|---|---|
| qdisc | 决定 怎么排队发包 |
| TCP 拥塞控制(如 bbr/cubic) | 决定 发多少包 |
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
📌 这是当前最主流、最稳妥的组合
sysctl net.core.default_qdisc
或:
cat /proc/sys/net/core/default_qdisc
-
只对 新创建的网卡队列 生效
-
已存在的接口可能需要:
- 重启网络
- 重启系统
- 或手动
tc qdisc replace
# 网络队列调度:降低延迟,提升公平性
net.core.default_qdisc = fq
net.core.default_qdisc决定的是“内核如何在最后一公里把数据包有序、平滑地送进网卡”,而fq是现代 Linux 下性价比最高的默认答案。