インゴモルナー、 Linuxカーネルの有名な開発者と CFSタスクスケジューラの作成者 Linuxカーネル開発メーリングリストの議論のために提案されたいくつかのパッチは、カーネルソース内のすべてのファイルの半分以上に影響を与え、構成に応じて全体的なカーネル再構築速度を50〜80%向上させます。
実装された最適化 最大の変更セットの追加に関連付けられているため、注目に値します カーネル開発の歴史の中で:彼らは一度に2297のパッチを含めることを開始し、25を超えるファイルを変更しました。
パフォーマンスの向上 ヘッダーファイルの処理方法を変更することで実現。 カーネル開発のXNUMX年以上にわたって、ファイル間に多数の相互依存関係が存在するため、ヘッダーファイルの状態は憂鬱な形になっていることに注意してください。
ヘッダーファイルの再構築にはXNUMX年以上かかり、 階層と依存関係の大幅な再設計が必要。 再構築中に、さまざまなカーネルサブシステムのタイプ定義とAPIを分離する作業が行われました。
2020年後半から取り組んできた新しい「FastKernelHeaders」プロジェクトの最初の公開リリースを発表できることを嬉しく思います。これは、Linuxカーネルのヘッダー階層とヘッダー依存関係をXNUMX倍の目的で包括的に作り直したものです。 :
-カーネルビルドを高速化します(絶対ビルド時間と増分ビルド時間の両方)
-サブシステムと定義APIの相互のタイプデカップリング
ほとんどのカーネル開発者が知っているように、Linuxカーネルには約10,000のメイン.hヘッダーがあり、include /およびarch / * / include /階層にあります。 過去30年以上にわたって、それらは、私たちが愛情を込めて「依存関係地獄」と呼ぶ、複雑で痛みを伴う一連の相互依存関係に進化してきました。
行われた変更には次のものがあります。 高レベルのヘッダーファイルを相互に分離し、 ヘッダーファイルをリンクするインライン関数の除外、タイプと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行に減らすことができました。
テストシステムで「make-j96vmlinux」コマンドを使用してカーネルを完全に再構築した場合、パッチを適用すると、v5.16-rc7ブランチのビルド時間が231,34から129,97、15,5秒(27,7からXNUMX)に短縮されました。 XNUMX時間あたりのビルド数)、ビルド中のCPUコア使用の効率も向上しました。
インクリメンタルビルドを使用すると、最適化の効果がさらに顕著になります。ヘッダーファイルに変更を加えた後、カーネルを再構築する時間が大幅に短縮されます(変更されるヘッダーファイルに応じて、112%から173%に)。
最適化は現在、ARM64、MIPS、Sparc、およびx86(32ビットおよび64ビット)アーキテクチャでのみ使用できます。
細かく あなたがそれについてもっと知りたいなら、詳細はで確認できます 次のリンク。