Linus 首个 LLM 辅助内核补丁系列:同文件并发读吞吐 3 倍、锁争抢降 99%
Linus Torvalds 在自己的内核仓库里开出一条新分支 noref-filemap-read-with-llm,系列共 10 个补丁,主题是提高页面引用计数的可扩展性。分支最新一次提交(4c0f3697)的时间是 2026 年 10 月 10 日,提交说明末尾写明:代码、测试程序、评审,以及这段说明的初稿,都是在他的指导下由一个 LLM 编程助手(Claude Code)完成的,测量在他的机器上跑。系列里多个补丁带 Assisted-by: LLM 标注。
要解决的是一个老问题:多个线程同时高频小块读同一个文件时,filemap_get_read_batch() 取一次 folio 引用、filemap_read() 再放掉一次,每一次读都要在同一行 struct page 上写两次,构成锁争抢。提交里给的出现场量级是——在他的笔记本(i7-8565U)上做 8 线程、16 字节 pread() 同一页时,那一行占去 99.92% 的 load HITM。做法是把释放推迟、而不是去检测竞态:page cache 里的 folio 离开 i_pages 时打上 PG_rcu_free,等一个 RCU grace period 才回到分配器,于是 rcu_read_lock() 区间内查到的页在整个读过程中不会被复用,读路径可以不带引用直接把数据拷进用户缓冲区。
官方数字:8 线程小块读同一文件,从基准的 9.9–10.4 M 次/秒升到 30–33 M 次/秒,每次读的内核周期从 2937–2975 降到 725–726,load HITM 从 30538 次降到 101 次;单线程场景只从 7.9–8.1 M 升到 8.8–8.9 M,官方自己注明笔记本会因温度降频,应比每次读的成本而不是每秒次数。补丁仍在实验分支,未进 7.4 主线;暂未覆盖 hugetlb、swap cache 与被驱逐 inode 的行内释放。
原文链接:Torvalds 内核仓库 / LWN