Linux 创始人兼内核开发主管 Linus Torvalds 使用 Anthropic 的 Claude Code 工具,协助处理文件读取路径中一个存在两年多的瓶颈。一系列包含 10 个补丁的改动,在一台配备 64 核 Threadripper 的设备上进行人工合成测试时,将读取速率提高了 23 倍;但 Linux 内核审查人员随后发现了一处竞态条件,并对内存回收设计的安全性提出疑问,这意味着这些补丁尚未合并。
页面内存引用计数器问题
这项工作涉及 page cache 中被称为 folio 的对象引用计数器竞争。page cache 是用于保存从文件读取的数据、以加快后续访问的层。该瓶颈于 2024 年被报告,此前它出现在一名客户的工作负载中;对 Torvalds 笔记本电脑进行的测试显示,在使用 8 个线程的测试中,这种竞争占各内核之间 HITM 操作的 99.92%。
Torvalds 表示,他花了 18 个月运行其此前针对该问题的修复版本,而其他开发者在各自的尝试中也遇到了问题。新补丁旨在从最常用的缓存读取路径中移除 folio 引用的增加和减少操作;Torvalds 同时警告说,与人工合成测试相比,实际工作负载中的收益会小得多。
Claude Code 的作用与结果的局限
Torvalds 的代码树中出现了一个名为 noref-filemap-read-with-llm 的实验分支,随后补丁系列中说明了 Claude Code 所发挥的作用。根据 Torvalds 的说法,该工具编写了实现、测试和初步文档,并在他的指导下审查了代码;而他本人负责亲自运行性能测试。
第一版补丁将其笔记本电脑上的读取速率从约每秒 1,000 万次提高到每秒 3,300 万次,并将每次读取所需的内核周期数从约 2,950 降至 725。修订版补丁则在高负载下将 Threadripper 设备上的性能从每秒 1,330 万次读取提高到每秒 3.04 亿次,同时将每次读取的周期数从约 20,000 降至 735。
为什么性能数据还不够?
性能提升伴随着潜在成本。第一版实现会在 CPU 超过 1,024 个延迟回收页面时强制进行一次等待。此外,读取未关联的用户页面会在返回现有路径之前产生额外错误,使单线程读取 16 字节的成本从约 4,150 个周期升至 6,550 个周期。目前尚不清楚这一退步是否会保留在 rcu-free-v3 版本中。
审查揭示了更重要的风险
Matthew Wilcox 反对使用新的 PG_rcu_free 标志,并提出了一种基于页面类型、采用不同机制回收非活跃 folio 的替代方案。Kiryl Shutsemau 还建议将该标志限定在 64 位系统上,David Hildenbrand 表示支持这一方向。
Shutsemau 还在 filemap_read_rcu_batch() 函数中发现了一处竞态条件:替换 folio 后如果文件大小扩展,可能会暴露实际上尚未写入的数据。Torvalds 建议更早读取文件大小并合并检查操作,这一建议已被纳入修订版补丁。
certi.news 的编辑解读:这一案例表明,人工智能编程工具能够迅速在内核测试中取得显著改进,但无法取代理解并发和内存生命周期的专业审查。这里的纪录性数据证明的是特定环境中的收益,并不意味着可以自动合并,也不保证实现的安全性。
新闻来源
The New Stack - Software Development
查看原始来源 ↗