v0.5.5
主要修复
多队列网卡(10G / 多核大机器)的整形与恢复
10G 机器开机后的默认结构是 mq + 每个硬件队列一个 fq。这类网卡上:
- 之前
tc qdisc del dev eth0 root会直接失败(Cannot delete qdisc with handle of zero.),扫描和整形都装不上 - 取消整形(
shape --off)会把mq压成单个 fq,8 个硬件队列退化成一把锁 - 恢复时不再把多队列网卡压成单 root fq,而是保留
mq只替换它自己的叶子
已在真实 8 队列 10G 网卡上验证:扫描、整形、取消整形、保存/恢复四条路径全部正常,clsact(eBPF)不受影响。
小带宽机器:很浅的限速点不再被当成线路底噪吞掉
真实限速器的第一层损失可以只有 0.18%。旧逻辑会把这种浅损失当成"链路本身的噪声",于是错过真正的拐点,最后给出偏高的整形值。
300M 机器实测(4 轮换序,每档 15 秒冷却):
316M 0.0003% 319M 0.1911% ← 真正的拐点在这里
317M 0.0003% 320M 0.4352%
318M 0.0006% 322M 1.0125%
现在遇到首档就丢包时,会向下测控制点来区分「真拐点」和「路径底噪」,最多三次;宁可不给整形值,也不把仍在丢包区的值推荐给你。
低带宽机器升级后会清掉旧版本的 initcwnd
100M 以下的机器保留内核默认的初始拥塞窗口。之前版本设置的 initcwnd 32 会被主动清除(包括开机自动写回的 hook)。
三台 10-20M 实机的对照:initcwnd 32 会导致首秒暴冲后被限速器打穿,之后每秒吞吐都掉一档,重传是默认值的 3-5 倍。
只清除 tcpfit 自己设过的;用户手工设的不动。
其他
- 扫描第一档前增加 15 秒冷却。不限速探测会把限速器的令牌桶抽干,之前 3 秒不够回,导致第一档带着假丢包,进而污染整个扫描的判断基线
- HTB 令牌桶按速率推算。2G/7G 机器接收吞吐提升 0.5~2.3%,1G 以下无差别
- 缓冲区上限增加 2MiB 余量
- 大带宽扫描保护:单流结果可疑时补测 8 流,避免误扫超出上限的区间
更新
tcpfit update
或在菜单中选择更新。更新后需要重新运行一次 tcpfit 才会用上新版本。
首次安装:
bash <(curl -fsSL https://raw.githubusercontent.com/Kylin010/tcpfit/main/tcpfit.sh)