Linux カーネルのビルドを 50 ~ 80% 高速化する一連のパッチが公開されました。

有名な Linux カーネル開発者であり、CFS (Completely Fair Scheduler) タスク スケジューラの作成者である Ingo Molnar 氏は、Linux カーネル開発者メーリング リストでのディスカッションのために、カーネル ソース内のすべてのファイルの半分以上に影響を与える一連のパッチを提案しました。設定に応じて、完全なカーネルの再構築速度が 50 ~ 80% 向上します。 実装された最適化は、カーネル開発の歴史の中で最大の一連の変更の追加に関連しているという点で注目に値します。一度に 2297 のパッチを含めることが提案され、25 以上のファイル (「インクルード」内の 10 のヘッダー ファイルが変更されました) /” と “arch/*/include/” ディレクトリ”、およびソース テキストを含む 15 個のファイル)。

ヘッダー ファイルの処理方法を変更することでパフォーマンスが向上します。 カーネル開発の XNUMX 年以上にわたって、ファイル間に多数の相互依存関係が存在するため、ヘッダー ファイルの状態は憂鬱な外観を呈していることに注意してください。 ヘッダー ファイルの再構築には XNUMX 年以上かかり、階層と依存関係の大幅な作り直しが必要でした。 再構築中に、さまざまなカーネル サブシステムの型定義と API を分離する作業が行われました。

変更内容としては、高レベルのヘッダー ファイルを相互に分離すること、ヘッダー ファイルをリンクするインライン関数を削除すること、タイプと API 用にヘッダー ファイルを分離すること、ヘッダー ファイルの個別のアセンブリを確保すること (約 80 個のファイルには、アセンブリを妨げる間接的な依存関係があり、他のヘッダー ファイル)、「.h」および「.c」ファイルへの依存関係の自動追加、ヘッダー ファイルの段階的な最適化、「CONFIG_KALLSYMS_FAST=y」モードの使用、C ファイルのアセンブリ ブロックへの選択的統合オブジェクトファイルの数を減らします。

その結果、実行された作業により、後前処理段階で処理されるヘッダー ファイルのサイズを 1 ~ 2 桁削減することが可能になりました。 たとえば、最適化前にヘッダー ファイル「linux/gfp.h」を使用すると、13543 行のコードが追加され、303 個の依存ヘッダー ファイルが含まれていましたが、最適化後はサイズが 181 行と 26 個の依存ファイルに減少しました。 または別の例: パッチなしでファイル「kernel/pid.c」を前処理すると、94 行のコードが含まれますが、そのほとんどは pid.c では使用されません。 ヘッダファイルを分離することで処理コード量を36分のXNUMXに削減でき、処理行数はXNUMX万XNUMX千行にまで削減できました。

テスト システム上で「make -j96 vmlinux」コマンドを使用してカーネルが完全に再構築された場合、パッチを適用すると、v5.16-rc7 ブランチのビルド時間が 231.34 秒から 129.97 秒に短縮されました (ビルド 15.5 から 27.7 へ)。 112 時間あたり)、組み立て中の CPU コアの使用効率も向上しました。 インクリメンタル ビルドでは、最適化の効果はさらに顕著になり、ヘッダー ファイルに変更を加えた後にカーネルを再ビルドする時間が大幅に短縮されました (変更されるヘッダー ファイルに応じて 173% から 64% に)。 現在、最適化は ARM86、MIPS、Sparc、および x32 (64 ビットおよび XNUMX ビット) アーキテクチャでのみ利用できます。

出所: オープンネット.ru

コメントを追加します