BBR拥塞控制算法内核问题修复
2025/06/24·StepFun can make mistakes, check important info.
https://mp.weixin.qq.com/s/mrPk4Ll89AeyI5fytMt5bg
帮我总结全文,提取主要观点
来源
微信
微信支付 公众号 小程序 视频号助手 小游戏 微信小店 表情开放平台 搜一搜开放平台 红包封面开放平台 对话开放平台 开放社区 服务市场 企业微信 微信学堂 官方设计资源 开放平台 硬件平台 微信广告 官方文档 64 位安装包 适合大部分手机设备 32 位安装包 适合较早面世的手机设备
https___mp.weixin.qq.com_s_ysbxNpG_Oh_4hl6GaBmsNg.mp4
00:00 00:00 高清 高清 您没有安装FlashPlayer或版本太低
产品定位及功能介绍|微信开放文档
小程序 小游戏 公众号 智能对话 开放平台 企业微信 微信支付 视频号 微信小店 腾讯小微 小商店 社区 学堂 当前暂无结果,查看其它业务相关内容> 页面不存在,请点击
这篇文章主要讲述了作者在哔哩哔哩开发改进的BBR拥塞控制算法时遇到的一系列问题,并最终发现并修复了一个内核错误的过程。以下是文章的主要观点:
实验环境
- Linux版本:5.10
- 网络命名空间:使用
ip netns
创建名为ns
的网络命名空间,并创建一对veth
设备ve_o
和ve_i
来运行TCP连接。
问题与解决方案
1. 内核模块加载和卸载
- 问题:无法加载更新后的同名内核模块,因为旧模块正在使用中。
- 解决方案:
- 方法一:将拥塞控制算法更改为其他算法,等待使用
bbr_bili
的套接字关闭,然后卸载模块。
- 方法二:重新编译模块并使用不同名称,但会产生大量垃圾。
- 方法三(推荐):使用
setsockopt
直接更改套接字的拥塞控制算法,并结合pidfd_getfd
系统调用从其他进程“窃取”套接字。
2. 算法热交换和套接字窃取
- 技术:使用
pidfd_getfd
系统调用从另一个进程复制套接字,并使用setsockopt
更改其拥塞控制算法。
- 工具:作者开发了一个名为
changeling
的工具,用于更改目标套接字的拥塞控制算法。
3. 孤立套接字
- 定义:由系统持有但未附加到任何用户文件句柄的套接字。
- 问题:孤立套接字可能导致模块使用计数提高,阻止模块卸载。
- 原因:TCP窗口过小或为零,导致FIN包无法发送,使套接字停滞在FIN-WAIT-1状态。
- 解决方案:使用
ss -K
选项终止孤立套接字。
4. “套接字已死,套接字万岁!”
- 问题:使用
ss -K
无法终止某些孤立套接字。
- 原因:内核错误导致设置了
SOCK_DEAD
标志的套接字无法正确关闭。
- 解决方案:作者提交了一个内核补丁,移除了
tcp_abort
中的SOCK_DEAD
检查,修复了该错误。
工具与技巧
changeling
:用于更改套接字选项的便捷工具。
ss
:强大的网络工具,可用于查看和终止套接字。
bpftrace
:用于内核调试的跟踪工具。
virtme-ng
:用于快速进行内核测试的虚拟化工具。
总结
- 作者通过开发
changeling
工具,实现了拥塞控制算法的热交换。
- 在解决孤立套接字问题时,发现了一个内核错误,并成功修复。
- 文章介绍了多种有用的内核调试和测试工具。
后续
- 三星在测试中也遇到了该内核错误,并将补丁向下移植到了5.15和6.1版本。