XanMod 内核支持的 CAKE 算法,是目前 Linux 上最先进的队列管理机制。它把 “此前的tbf限速(如85M” + “FQ 多流公平调度” + “CoDel 动态延时控制” 融为一体:
把队列延迟严格控制在 5ms 左右(超过就主动通过 AQM 算法处理),彻底杀死 Bufferbloat。
完美兼容 BBR 的 Pacing(发包节奏)。
实测效果也好于之前老旧的tbf令牌桶方案。
-
BBR 负责 TCP 拥塞控制算法(作用于传输层 / Layer 4)。
-
CAKE 是 队列规则 / 流量整形器(作用于网络层与数据链路层 / Layer 2-3 的 Qdisc)。
-
单独只用 BBR:上行发包很平滑,但下行下载大文件时依然容易被运营商队列挤爆,引发下载高 Jitter。
-
单独只用 CAKE:限制了网卡带宽并消除了 Bufferbloat,但远端发送 TCP 包时如果用的是传统 CUBIC 算法,发包节奏可能不够完美。
-
BBR + CAKE 组合:BBR 负责在端到端之间高效率发包,CAKE 负责在网卡出入口守住底线(限制总带宽与消除抖动)
对比
| 维度 | fq (Fair Queueing) |
CAKE |
|---|---|---|
| 设计场景 | 数据中心 / 高性能服务器 / 万兆网卡 | 路由器边缘 / WAN 广域网出口 / 跨境线路 |
| 内置限速 (Shaping) | 无(需叠加 tbf 或 htb,易引发冲突) |
内置高精度 Shaper(如 bandwidth 98mbit) |
| 主动抗膨胀 (AQM) | 无(依赖尾丢包 Tail Drop) | 内置 Cobalt 算法(CoDel + PIE 混合体) |
| 隔离粒度 (Isolation) | 单个 TCP/UDP 连接(Socket Hash) | Triple Isolation(主机 IP + 连接 + NAT 感知) |
| QoS 优先级 | 扁平队列,无优先级区分 | 支持 DiffServ / DSCP(语音/游戏自动优先) |
| 特殊优化 | TCP Pacing(为 BBR 量身定制) | ACK 抑制/过滤(优化非对称/高延迟线路) |
| CPU 资源消耗 | 极低 | 较低(现代 CPU 可忽略不计) |
之前设置的 tbf rate 85Mbit lat 400ms 虽然成功把速度限制在了 85M,但也带来了副作用:
lat 400ms 的隐患:tbf 在达到 85M 限速时,会把超出的数据包硬塞进队列里,允许数据包排队等待长达 400ms。
这正是导致测速时jitter飙升的元凶。
破坏了 fq 调度:tbf 覆盖掉了 BBR 最喜欢的 fq 队列,导致发包不再平滑。
从旧的 TBF(令牌桶) 方案平滑过度到验证成功的 CAKE + IFB0 (98mbit) 终极双向控速方案。
整体分为 查看状态
清理残留
部署新方案
验证结果 四个阶段:
第零步 -可忽略技术细节直接运行-完成清理和新建临时的测试环境-后面可以用服务固化效果
遇到错误再回头诊断
一键清理与重部署命令行(方便快捷粘贴)
如果你想一次性快速重置并应用,可以直接运行以下整合命令:
# --- 清理旧规则 ---
tc qdisc del dev eth0 root 2>/dev/null
tc qdisc del dev eth0 ingress 2>/dev/null
ip link set dev ifb0 down 2>/dev/null
ip link del dev ifb0 2>/dev/null
# --- 部署新 CAKE 98M 方案 ---
modprobe ifb 2>/dev/null || true
ip link add name ifb0 type ifb 2>/dev/null || true
ip link set dev ifb0 up
tc qdisc add dev eth0 root cake bandwidth 98mbit
tc qdisc add dev eth0 handle ffff: ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
tc qdisc add dev ifb0 root cake bandwidth 98mbit ingress
第一步:查看当前网络队列状态
在清理前,先确认当前网卡的 Qdisc(队列)和虚拟网卡状态:
# 1. 查看主网卡 eth0 的发送/接收队列配置
tc -s qdisc show dev eth0
# 2. 查看虚拟网卡 ifb0 状态(如果已建立)
tc -s qdisc show dev ifb0 2>/dev/null
ip link show ifb0 2>/dev/null
重点排查:观察
eth0根队列是否有qdisc tbf或lat 400ms字样,这是需要清理的目标。
第二步:彻底清理 TBF 残留与旧规则
将旧的 tbf 规则、ingress 重定向过滤规则以及临时的 ifb0 设备彻底卸载,还原干净的网络栈:
# 1. 删除 eth0 的出口根队列(清除 tbf 或旧的 cake)
tc qdisc del dev eth0 root 2>/dev/null
# 2. 删除 eth0 的入口重定向队列(清除 ingress 钩子)
tc qdisc del dev eth0 ingress 2>/dev/null
# 3. 停用并删除 ifb0 虚拟网卡
ip link set dev ifb0 down 2>/dev/null
ip link del dev ifb0 2>/dev/null
第三步:部署新的 IFB0 + CAKE (98mbit) 方案
重新构建下行重定向与双向 CAKE 98mbit 控速:
# 1. 加载内核模块 & 动态创建 ifb0 网卡
modprobe ifb 2>/dev/null || true
ip link add name ifb0 type ifb 2>/dev/null || true
ip link set dev ifb0 up
# 2. 部署上行(Upload / Egress)CAKE 98mbit 控速
tc qdisc add dev eth0 root cake bandwidth 98mbit
# 3. 将 eth0 的下行(Download / Ingress)流量重定向到 ifb0
tc qdisc add dev eth0 handle ffff: ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
# 4. 部署下行(Download)CAKE 98mbit 控速(作用于 ifb0)
tc qdisc add dev ifb0 root cake bandwidth 98mbit ingress
第四步:最终效果验证
执行完后,运行以下命令确认部署状态:
tc qdisc show dev eth0
tc qdisc show dev ifb0
正确的标准输出形式如下:
qdisc cake 8001: dev eth0 root refcnt 2 bandwidth 98Mbit diffserv4 triple-isolate nonat wash no-ack-filter split-gso rtt 100ms raw overhead 0
qdisc ingress ffff: dev eth0 parent ffff:ingress
qdisc cake 8002: dev ifb0 root refcnt 2 bandwidth 98Mbit ingress diffserv4 triple-isolate nonat wash no-ack-filter split-gso rtt 100ms raw overhead 0
完成上述操作后,系统已完全脱离旧的 tbf 令牌限制,全面拥抱高吞吐、零抖动(Jitter ≈ 0ms)的 CAKE 方案。
新测的NQ net结果
speedtest cli的结果 可以看到jitter降低 效果比以前稳定
# ./speedtest-go --city=sanfrancisco -t 4
speedtest-go v1.7.10 (git-1395781) @showwin
✓ ISP: 107.195.147.153 (AT&T Internet) [34.8504, -92.4089]
✓ Found 20 Public Servers
✓ Test Server: [64241] 2677.25km Palo Alto, CA (United States) by Etheric Networks
✓ Latency: 9.476345ms Jitter: 28.967µs Min: 9.437765ms Max: 9.523457ms
✓ Packet Loss Analyzer: Running in background (<= 30 Secs)
✓ Download: 92.63 Mbps (Used: 117.14MB) (Latency: 18ms Jitter: 4ms Min: 13ms Max: 25ms)
✓ Upload: 90.32 Mbps (Used: 113.02MB) (Latency: 10ms Jitter: 0ms Min: 10ms Max: 10ms)
✓ Packet Loss: N/A
最后 固化服务 防止之前的tc命令重启后失效
将 tc cake (98mbit) 双向限速写入开机自启
因为 tc 命令在重启后会失效,为了保持 98mbit 的甜蜜点配置,建议将其做成 Systemd 服务。
1. 创建脚本 /usr/local/bin/tc-cake.sh
cat << 'EOF' > /usr/local/bin/tc-cake.sh
#!/bin/bash
DEV="eth0"
SPEED="98mbit"
# 1. 配置上行 CAKE
tc qdisc del dev $DEV root 2>/dev/null
tc qdisc add dev $DEV root cake bandwidth $SPEED
# 2. 加载 IFB 并配置下行 CAKE
modprobe ifb
ip link add name ifb0 type ifb 2>/dev/null
ip link set dev ifb0 up
tc qdisc del dev $DEV ingress 2>/dev/null
tc qdisc add dev $DEV handle ffff: ingress
tc filter add dev $DEV parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
tc qdisc del dev ifb0 root 2>/dev/null
tc qdisc add dev ifb0 root cake bandwidth $SPEED ingress
EOF
chmod +x /usr/local/bin/tc-cake.sh
2. 创建 Systemd 服务守护脚本
cat << 'EOF' > /etc/systemd/system/tc-cake.service
[Unit]
Description=TC CAKE Dual-Direction Traffic Shaping
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/tc-cake.sh
[Install]
WantedBy=multi-user.target
EOF
3. 启用服务
systemctl daemon-reload
systemctl enable --now tc-cake.service
配置完成后,即便服务器重启,系统也会自动应用 sysctl 参数和双向 98mbit 的 CAKE 限速,保持最优网络状态。
整理后的 /etc/sysctl.d/99-bbr-tc-cake.conf
也适合debian系列的bbr v1和6.1内核
以下是去重、重新按逻辑分组整理后的配置文件。包含了对 XanMod 内核、BBR、容器/网关转发 以及 防 Bufferbloat 的优化,可以直接全选覆盖你的原文件:
# ====================================================================
# 高性能 VPS 系统与网络优化 (XanMod + BBR + CAKE 精调版)
# 适用环境: 2C / 3G RAM / 100M CN2 优化线路
# ====================================================================
# --- 1. 系统内存与 Swap ---
vm.swappiness = 1
vm.vfs_cache_pressure = 80
vm.max_map_count = 1048576
vm.overcommit_memory = 1
fs.file-max = 524288
fs.nr_open = 524288
fs.inotify.max_user_instances = 1024
# --- 2. 核心网络栈与队列缓冲区 ---
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.core.somaxconn = 8192
net.core.netdev_max_backlog = 16384
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.core.optmem_max = 65536
# --- 3. TCP 内存池与 BDP 动态窗口 ---
# TCP 内存 (单位: pages, 1page=4KB),上限约控制在 614MB RAM
net.ipv4.tcp_mem = 78643 117964 157286
# TCP 读写缓冲区 (4K / 512K / 32M)
net.ipv4.tcp_rmem = 4096 524288 33554432
net.ipv4.tcp_wmem = 4096 524288 33554432
# --- 4. BBR 与 TCP 协议栈防抖/延迟优化 ---
# 在 TCP 层限制未发送缓冲区数据包,配合 CAKE 进一步防 Bufferbloat
net.ipv4.tcp_notsent_lowat = 16384
# 禁用空闲后的慢启动,维持长连接高吞吐
net.ipv4.tcp_slow_start_after_idle = 0
# 开启 ECN 显式拥塞通知 (与 CAKE 完美联动)
net.ipv4.tcp_ecn = 1
# 开启 SACK / DSACK / FastOpen
net.ipv4.tcp_sack = 1
net.ipv4.tcp_dsack = 1
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_rfc1337 = 1
# --- 5. 路由转发与 NAT 连接跟踪 (网关/Docker 核心) ---
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.ip_nonlocal_bind = 1
# 放宽反向路径过滤,兼容 Anycast 与多路非对称路由
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
# 连接跟踪表 (Conntrack) 扩容与超时优化
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 3600
net.ipv4.tcp_max_tw_buckets = 65536
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_syncookies = 1
应用配置:
sysctl --system
