8月22日、linuxstans.comが「Linus Torvalds Uses AI to Crack a Nasty GPU Bug」と題した記事を公開した。この記事では、Linus TorvaldsがAIアシスタントを活用しながら、2年間Linuxカーネルに潜伏していたIntel Arc GPU起因のブラックスクリーンバグを特定・修正した過程について詳しく紹介されている。なお、同記事はカーネルメーリングリストおよびTorvalds本人のコミット・コメントを一次ソースとして構成されており、本稿もその内容に基づいて紹介する。
修正は1行、発見に要したのは18回のカーネル起動
結論から言う。修正内容は round_up() を round_down() に変えた1関数呼び出しの差し替えだ。しかしそこに辿り着くまでに、24回分のデバッグパッチの作成・投入と、その検証のための18回の別々のカーネル起動が必要だった。24回はパッチの試行回数、18回はそのうち起動状態まで持ち込んで結果を記録したセッション数であり、両者は別軸の数字だ。
バグの症状はIntel Arc GPU(Battlemageアーキテクチャ、16GB VRAM搭載モデル)でのコールドブート時に現れるブラックスクリーン。カーネルパニックもエラーメッセージもなく、GNOMEのログインマネージャ(gdm)がセッションを再起動し続けるだけだった。長らく再現性が低すぎて追跡不能だったが、Torvalds自身のマシンでほぼ毎回のコールドブートで発生するようになり、ようやく本格的な調査が始まった。
バグの正体:2KBのズレが引き起こすサイレントな破壊
根本原因は get_flat_ccs_offset() という関数にあった。この関数はGPUの圧縮ハードウェア(CCS: Compression Control Surface)が使用するメモリ領域の先頭アドレスを計算する。それより下のアドレスが通常のVRAMとしてドライバのアロケータに渡される。
問題はそのアドレスの丸め方にあった。本来の境界アドレスは 0x3fafff800 だが、128KBアライメントへの切り上げにより、ドライバは 0x3fb000000 から始まると誤認していた。その差は約2KB。この2KBは「空きメモリ」として扱われていたが、実際には圧縮ハードウェアの管轄領域だった。
Torvaldsのシステムでは、オープンソースのグラフィックスライブラリであるMesaが設定したGPUページテーブルがこの誤ったギャップ内に配置され続けた。そのたびに圧縮ハードウェアがページテーブルの一部を静かに上書きし、コンポジタのバッチバッファへのポインタを消去した。コンポジタは次のGPUコマンドの送り先を失ってフォルトし、gdmはクラッシュを検知してセッションを再起動——そして同じ場所にページテーブルを置いてまた即座にフォルトする、という無限ループだ。
問題のページの内容を後から読み出すと、0xcccc000000000000 や 0xcc77000000000000 といった値がパターンを形成していた。ユーザープログラムが書くデータではなく、圧縮メタデータの特徴的なパターンだ。ハードウェアがドライバの知らないところでメモリを使い続けていた証拠がそこに残っていた。
AIが「解決不可能」と繰り返す中での粘り強いデバッグ
Torvaldsはデバッグの「単純作業」の大部分をAIアシスタントに委ねたと述べている。デバッグ用の計装コードの追加と、その出力の分析だ。
ただし、そのプロセスは順調ではなかった。AIは繰り返し「このバグは解決不可能だ」と主張し、バグレポートを提出して先に進むよう提案し続けたという。Torvaldsがその都度押し返すたびに、AIはさらにデバッグコードを追加して結果を分析した。Torvaldsは後に「AIを訓練した人間は、おそらく自分ほど頑固ではないだろう」と冗談を言っている。
最終的なコミットメッセージはAIに書かせた。修正はコミットハッシュ 818bebeb63dd6bf5f4e07e145f6cdbace520a34c としてTorvaldsのツリーに入った(執筆時点でカーネルツリー上で確認済み)。1ファイルに18行の追加と5行の削除だ。
なお、同じ関数内には本来この問題を検出すべきアサーションが存在していた。しかしそのチェックは丸め処理後の値と別の境界値を厳密な等値比較で検証するものだったため、丸め処理自体が誤っていれば常にパスしてしまう構造だった。しかも特定のデバッグビルド構成フラグが有効な場合にしか動作しないため、ほとんどの開発者にとって無効な状態だった。修正後のチェックは不等号による比較に変更され、同種のミスが再発した場合に確実に検出できるようになっている。
エンジニアの反応:「これが本物のAI活用だ」
この話はカーネルメーリングリスト外にも広がり、Redditでの反応は概ね一つの方向に収束した。「プロンプトを打って返ってきた内容をそのまま出荷するのではなく、見知らぬ人から受け取ったパッチと同様に——検証し、押し返し、使えない部分は捨てる——それが実際のエンジニアリングにおけるAI活用だ」という見方だ。
一方、冷静な見方もあった。TorvaldsはAIを使う人間の中でも極めて特殊な位置にいる。この十分に監視されたデバッグセッション1件では、他のプロジェクトでAI生成コードが精査なしに流入している問題は消えない、という指摘も複数あった。
影響を受けるArc GPUを使っているほとんどのユーザーは、この修正が入ったことに気づかないだろう。ただ、画面が普通に点くようになるだけだ。
詳細はLinus Torvalds Uses AI to Crack a Nasty GPU Bugを参照していただきたい。