10月25日、pbxscience.comが「Torvalds' AI-Assisted Page Cache Patches Show a 23x Gain in a Synthetic Test, but Review Found a Race Condition」と題した記事を公開した。この記事では、Linus TorvaldsがAIコーディングツールを活用して開発したLinuxページキャッシュの最適化パッチが合成テストで約23倍のスループット向上を達成した一方、レースコンディションが発見されマージ保留となっている件について詳しく紹介されている。以下に、その内容を紹介する。
ボトルネックは「ファイルデータ」ではなく「カウンター」だった
2026年10月13日、Linus Torvaldsは「Improve page refcount scalability」と題した10パッチのシリーズ(ブランチ名: rcu-free-v3)を公開した。開発にはAIコーディングツールClaude Codeを活用している。
ターゲットは、Linuxの通常のread()およびpread()呼び出し——キャッシュ済みデータをメモリから直接返すコードパスだ。
問題の核心は参照カウント(reference count)にある。Linuxはページキャッシュ上のメモリページをフリーリストに戻すタイミングを管理するため、各ページに参照カウントを持つ。スレッドがデータを読む際、カウントをインクリメントしてからデータをコピーし、完了後にデクリメントする——この2ステップがアトミック操作(CPU間で排他的に行う書き込み)となる。
64スレッドが同じキャッシュ済みページを読むとき、全スレッドが同一のカウンター(キャッシュライン)に書き込む。キャッシュコヒーレンシのルール上、書き込みにはそのキャッシュラインの排他所有が必要なため、ラインがコア間を行き来し続ける。スレッド数が増えるほど競合は悪化し、旧実装では32〜64スレッド時のスループットが8スレッド時を下回るという逆転現象が起きていた。
パッチの仕組み:RCUで参照カウントを回避する
パッチシリーズが採用したのがRCU(Read-Copy-Update)だ。カーネルがすでに広く使っているメカニズムで、「頻繁に読まれるが稀にしか変更されないデータ」に向いている。RCUでは、読み手はある保護領域の中で作業し、解放処理側は「グレースピリオド(猶予期間)」——先行する全読み手が完了するまでの待ち時間——を経てからオブジェクトを解放する。
今回のパッチでは、頻繁にアクセスされるキャッシュ済みfolio(ページの論理単位)を「hot」としてマークし、最低1回のRCUグレースピリオドが経過するまでページアロケータへの返却を遅延させる。対象のpread()はRCU保護下でデータをコピーでき、参照カウントのインクリメント/デクリメントが不要になる。ただしユーザー空間へのコピー中にページフォルトが発生した場合はこの高速パスを使えない。
ベンチマーク結果
測定は32コア・64スレッドのAMD Ryzen Threadripper 3970X上で実施。64スレッドがそれぞれ独自のファイルディスクリプタを使い、同一の1ページファイルの先頭16バイトをpread()で繰り返し読み続けるという、競合を極限まで高めた合成テストだ。
| 指標(64スレッド) | パッチ適用前 | パッチ適用後 |
|---|---|---|
| 毎秒リード数 | 1,330万 | 3億400万 |
| カーネルCPUサイクル/リード | 約19,900 | 約735 |
| スループット変化 | — | 約22.9倍 |
Torvalds自身の4コア・8スレッドのラップトップでも計測しており、8スレッド時にカーネルサイクル/リードが約2,950から約725へ低下、スループットは約3倍になった。ただしラップトップは熱でクロックが絞られるため、「毎秒リード数」より「リードあたりコスト」の方が比較として信頼できると本人が注記している。
Torvaldsは「実際のワークロードでの向上はずっと小さくなる」と明言している。合成テストは1ページへの競合を最大化する設計であり、実サーバーではシステムコールや他のメモリアクセス、アプリケーションロジックも加わるからだ。
レースコンディションが発見され、マージは保留
並行カーネルコードの難しさはAI支援があっても変わらない。 パッチ公開後のレビューで、レースコンディション(競合状態)が発見された。RCU保護、ページライフタイム、そしてtruncation・書き込み・キャッシュ退避といった並行操作の間には厳密な順序規則があり、このクラスのバグは通常の機能テストでは再現しにくい一方、特定のタイミング条件下で深刻な障害を引き起こしうる。
同じ問題に対してTorvaldsは約18ヶ月間、自身のフィックスに欠陥を抱えたまま作業を続けていたとされ、他の開発者のアプローチも壁にぶつかってきた経緯がある。今回の成果は有望な最適化の第一歩であり、パッチはレースコンディションの修正と追加レビューを経なければメインラインカーネルへのマージには至らない。
マルチコア設計への示唆
この事例が改めて示すのは、マルチコア環境でのスケーラビリティにおいて「全コアが触れる小さな状態変数」が律速になりうるという点だ。読み取りに際して何かを書き込む必要がないなら、全CPUに同一箇所への書き込みを強いる設計は避けるべきである。
詳細はTorvalds' AI-Assisted Page Cache Patches Show a 23x Gain in a Synthetic Test, but Review Found a Race Conditionを参照していただきたい。