編集部からのお知らせ
「半導体動向」記事まとめ
「リスキリング」に関する記事まとめ

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

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

2022-01-12 08:30

 つまり現時点で同氏が整理した「高速ヘッダーツリーは、サポート対象アーキテクチャーの完全なカーネルビルド時のパフォーマンスを、設定にもよるが50〜80%向上させる」ものとなっている。これはLinuxカーネルのビルド効率とパフォーマンスを向上させる上での大きな1歩と言える。

 50〜80%の向上が見込めるのであれば、時間と労力を割く価値が十分ある。これらの速度向上は、デフォルトヘッダー(高速ヘッダーのツリーでは大半が型定義のインクルードとなる)のサイズを1〜2桁削減したことによるものだ。

 しかし、ちょっと待ってほしい。2200のコミットというのは、この話のほんの一面しか表していない。問題は、これらの変更がLinuxカーネルのほとんどすべてのプログラムに影響を与えるところにある。Molnar氏の見積もりによると、全体で見た場合、「高速ヘッダーツリーは25の部分ツリーと、上述した2200のコミットに加えて、現存する全カーネルソースファイルの半分以上を修正する必要がある」という。これは17万8024件の挿入と7万4720件の削除を伴う、2万5288個のファイルを変更するという作業の実施を意味している。つまり、「そう、これはLKML(Linuxカーネルメーリングリスト)の歴史において、単一の機能発表としてはおそらく最大のものだ。これは仕方のないことだ! :-/」という話だ。

 さらに、こういった課題を実行可能にする上で、高水準ヘッダーの積極的な分離や、型ヘッダーとAPIヘッダーの分離、.hファイルと.cファイルに対する依存関係の自動追加、ヘッダーの最適化が必要となる。これは簡単な作業ではない。このためMolnar氏は、実際に腰を上げて変更作業を開始する前に仲間のメンテナーからフィードバックを集めている。同氏は特に、「Linus(Torvalds氏)とAndrew(Morton氏)のほか、これらの変更によって影響を受ける大規模サブシステム群のメンテナーたち」からの意見を聞きたいと考えている。

 Linuxの安定版ブランチを担当するカーネルメンテナーのGreg Kroah-Hartman氏は、「これは『興味深い』話だが、kernel/sched/per_task_area_struct_defs.hとtask_struct_per_task構造体の定義をどのようにして同期していくのだろうか?」と考えている。つまり、誰がこれらすべての変更を維持管理していくという大変な作業を実行するのかということだ。

 Molnar氏はこれに対して、作業に取り組んでいく意志が自らにあるという点と、こういったことはさほど問題にならないと考えている点を明確に答えている。その後、Kroah-Hartman氏はMolnar氏の取り組みを認めた上で、「この件についてはスケジューラーの開発者らに任せたい。ただ私は依然として違和感を感じている。われわれは、Cの問題を回避しようとすると混乱を生み出してしまうのだ :)」とコメントしている。

 Kroah-Hartman氏の考えは間違っていない。RustをLinuxの第2言語にしようという動きの背後にある動機の1つは、まさにここにあるのだ。

 このプロジェクトが採用されたとしても、ユーザーは何の変化も感じないだろう。しかしLinuxのカーネルやディストリビューションの開発者は、今までよりもLinuxを高速にコンパイルできるようになるはずだ。その結果、Linuxの改善やパッチの作成、機能追加がかつてないほど容易かつ迅速になるだろう。

この記事は海外Red Ventures発の記事を朝日インタラクティブが日本向けに編集したものです。

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

特集

CIO

モバイル

セキュリティ

スペシャル

NEWSLETTERS

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

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

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