Linuxカーネルの"依存関係地獄"解消目指す「Fast Kernel Headers」

Steven J. Vaughan-Nichols (Special to ZDNET.com) 翻訳校正: 村上雅章 野崎裕子

2022-01-12 08:30

 数十年にわたって修正が加えられ、乱雑さという垢が蓄積されたコードをきれいにするというのは気の弱い人がやる作業ではない。しかし、Linuxのカーネル開発における第一人者であるIngo Molnar氏は自らの持てる力を最大限に傾け、オープンソースのLinuxカーネルに秩序を取り戻そうとしている。

 Linuxのソースコードは2020年に2780万行に達した。それ以降もその規模は増大する一方だ。Linuxは、30年が経過している他のソフトウェアプロジェクトと同様に、その長い歴史の中でソースコード中にかなりの量の垢をため込んでいる。Linuxカーネルの上級開発者であるMolnar氏はこの問題を根本的なレベルで解決するための初撃となる数カ月におよぶ作業の成果として、「Fast Kernel Headers」(カーネルヘッダー高速化)プロジェクトをリリースした。

 その狙いは何だろうか。答えは、Linuxカーネルのヘッダー階層と、ヘッダーの依存関係を全体的に整理し、作り直すということに他ならない。Linuxには多くのヘッダー、すなわち.hファイルが存在している。厳密に述べるとLinuxカーネルのinclude/とarch/*/include/というファイル階層内におよそ1万の主要な.hヘッダーが存在している。Molnar氏は「過去30年強でこれらヘッダーは膨れ上がり、われわれが愛情を込めて『依存関係地獄』と呼んでいる、複雑で痛みを伴う相互依存性のかたまりになった」と説明した。

 こういった状況の中、Molnar氏は2200におよぶコード修正のコミットを提案している。これは大量のコミットだ!なぜこれほどまでに多いのだろうか。同氏によると、この整理整頓プロジェクトを立ち上げた2020年末には、これほど多くの混乱がコードに潜んでいるとは気付いていなかったのだという。同氏は次のように記している。

  • このプロジェクトを開始した2020年末の時点では、おそらく50〜100程度のパッチになるだろうと考えていた。そして大まかな測定を実施してみたところ、ヘッダーの依存性を低減させることで、カーネルのランタイムに大きな影響を与えずに、ビルドの速度をおよそ20%高速化できるという見込みが出てきた。この値は、50〜100のコミットを正当化するだけの十分な説得力があると感じられた。
  • しかし、パッチの数が増えても、パフォーマンスはあまり向上しなかった。また、2021年の半ばまでに、このツリーは500を超えるコミットにまで膨れ上がり、2度目の取り組みも捨てざるを得なかった(!)。最初の2度のアプローチはスケーラビリティーがなく、メンテナンス性も悪く、ビルドの速度向上もわずか4%程度だったため、500のパッチに対する作業を続ける価値はなく、公に発表する意味すらなかった。
  • 3度目の取り組みで私は、per_task()という仕掛けを導入した。これによって依存性を劇的に引き下げる上で必要となる柔軟性を確保できた。またこれはメンテナンス性を向上させるタイプ(型)クリーンなアプローチだった。しかし、コミット数が1000を超えてもビルド速度の向上はせいぜい10%だった。このため、私はこれもアップストリームにプッシュしてもよいとは感じず、発表する気にもならなかった。 :-/
  • しかしこの値から、20%のパフォーマンス向上は十分可能だという手応えを感じた。このため私は、このツリーでの作業を続けた。すると、コミット数が1500を超えた2021年秋あたりから目に見えて速度が向上し始めた。そして速度向上が20%を超え、現在の参照設定では78%に達するという、まさに驚くべき成果が達成された。依存関係の数を最小限にまで減らすことで、カーネルビルド時のオーバーヘッドは明らかに線形を超えて改善されるのだ。

ZDNET Japan 記事を毎朝メールでまとめ読み(登録無料)

ZDNET Japan クイックポール

所属する組織のデータ活用状況はどの段階にありますか?

NEWSLETTERS

エンタープライズコンピューティングの最前線を配信

ZDNET Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]