回答:
場合によります。メモリが少ない場合、モジュールを使用すると、毎回リロードされないため、再開が改善される可能性があります(2 GiBのRAMでは重要ですが、従来のハードドライブでは4 GiBではありません)。これは、バッテリーモジュールの一部のバグ(コンパイル済みまたはモジュールとして)に起因して、開始に非常に長い時間(数分)かかった場合に特に当てはまります。gentooにバグがなくてもsystemd-analysis
、静的にコンパイルされたカーネルからモジュールに変更するだけで、時間を33秒から18秒に短縮することができました(「驚いたことに」カーネルの開始が9秒から1.5秒に変更されました)。
また、使用するハードウェアがわからない場合、モジュールは明らかに有益です。
PS。initrdに含める限り、重要なドライバーもモジュールとしてコンパイルできます。たとえば、ディストリビューションには、インストール時にinitrdに/のファイルシステム、ハードドライブのドライバーなどが含まれます。
私の知る限り、速度に違いはありません。
割り当ての粒度は1ページであるため、数kBのカーネルメモリが得られると思います。したがって、一般的なアーキテクチャでは、各モジュールはモジュールごとに平均約2kB(½ページ)を無駄にします。組み込みシステムでも、それはほとんど意味がありません。また、モジュールはカーネルと同じように圧縮できるため、ディスク領域が少し増えます。これは、ストレージが少ない組み込みシステムでより関連性があります。
モジュールを完全に省くことができる場合、カーネルメモリ(モジュールローダーは不要)、ディスク容量(モジュールユーティリティは不要)、およびシステムの複雑さ(ディストリビューションの機能としてモジュールロードを含める必要はありません)を節約できます)。これらの点は、ハードウェアが拡張可能でない一部の組み込み設計では非常に魅力的です。
いくつかの潜在的な利点。パフォーマンスは議論の余地のあるものです。ダイナミックローダーに関連するランタイムオーバーヘッドを回避することはできますが、リアルタイムスケジューラに依存している場合を除き、それは大したことではないでしょう。
システム上の大きなページを利用している場合、おそらくより大きな静的カーネルイメージを作成することは、ページ記述子キャッシュをより効率的に使用することを意味します。一部のシステムはカーネルを「ケージ」し、1つのメモリローカリティに緊密にパックします。これにより、マイナーな(場合によってはメジャーな)ページフォルトによる遅延をある程度軽減できます。
アーキテクチャ上、One Big Imageを提供するのに適している場合があります。独立したモジュールの数が少ない方が保守しやすく、柔軟性を失うことは重要ではありません。この種の推論の多くは、スタイルと実践の問題に挑戦しています。
時にはそれが必要です。重要なドライバー(SCSIドライバーなど)をモジュールとしてコンパイルすると、システムは起動しません。
モジュールとしてコンパイルしないもう1つの優れた候補は、ルートパーティションのファイルシステムタイプです。カーネルは理解していない場合はext3
読むために/lib/modules/
どのようにそれはそれからモジュールをロードしますか?
このように考えてください。モジュールを使用するには、カーネルはカーネルモジュールを読み込んでロードするためにシステムについて十分に知る必要があります。それと試行錯誤を使用してください:-)