Skip to content

v0.5.5

Choose a tag to compare

@Kylin010 Kylin010 released this 13 Aug 21:24
· 1 commit to main since this release

主要修复

多队列网卡(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)