login
BBR拥塞控制算法内核问题修复
2025/06/24·StepFun can make mistakes, check important info.
https://mp.weixin.qq.com/s/mrPk4Ll89AeyI5fytMt5bg 帮我总结全文,提取主要观点
Reason
附件解析
来源
微信
微信支付 公众号 小程序 视频号助手 小游戏 微信小店 表情开放平台 搜一搜开放平台 红包封面开放平台 对话开放平台 开放社区 服务市场 企业微信 微信学堂 官方设计资源 开放平台 硬件平台 微信广告 官方文档 64 位安装包 适合大部分手机设备 32 位安装包 适合较早面世的手机设备
https://s2.zimgs.cn/ims?kt=url&at=smstruct&key=aHR0cHM6Ly9ndy5hbGljZG4uY29tL0wxLzcyMy8xNTU5MDk2OTU3LzNjL2M0LzJhLzNjYzQyYTVlZjVlYzNkMzRiOWYwYmUwZjFjNDVhYzZiLmljbw==&sign=yx:4ux0Ov3IaZW0IBYarBCuQnARQ74=&tv=400_400
微信公众平台
https___mp.weixin.qq.com_s_ysbxNpG_Oh_4hl6GaBmsNg.mp4
 00:00 00:00 高清 高清   您没有安装FlashPlayer或版本太低
https://static-favicon.basemind.com/01JV257ATM2R3GYA1MDY1G8Q3Z
晋城市生态环境局
产品定位及功能介绍|微信开放文档
小程序 小游戏 公众号 智能对话 开放平台 企业微信 微信支付 视频号 微信小店 腾讯小微 小商店 社区 学堂 当前暂无结果,查看其它业务相关内容> 页面不存在,请点击
https://s2.zimgs.cn/ims?kt=url&at=smstruct&key=aHR0cHM6Ly9ndy5hbGljZG4uY29tL0wxLzcyMy8xNTg0MzI5NTg3LzBlL2M5LzU0LzBlYzk1NDMyZDgyYTUxYzg0YzViMDM5N2RkMWJjMGM4Lmljbw==&sign=yx:Pphqjxqs-dCKbGbsCWmmApHEnTI=&tv=400_400
微信公众平台

这篇文章主要讲述了作者在哔哩哔哩开发改进的BBR拥塞控制算法时遇到的一系列问题,并最终发现并修复了一个内核错误的过程。以下是文章的主要观点:

实验环境

  • Linux版本:5.10
  • 网络命名空间:使用ip netns创建名为ns的网络命名空间,并创建一对veth设备ve_ove_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版本