カーネル内でコンパイルされたカーネルモジュールの利点


回答:


7

場合によります。メモリが少ない場合、モジュールを使用すると、毎回リロードされないため、再開が改善される可能性があります(2 GiBのRAMでは重要ですが、従来のハードドライブでは4 GiBではありません)。これは、バッテリーモジュールの一部のバグ(コンパイル済みまたはモジュールとして)に起因して、開始に非常に長い時間(数分)かかった場合に特に当てはまります。gentooにバグがなくてもsystemd-analysis、静的にコンパイルされたカーネルからモジュールに変更するだけで、時間を33秒から18秒に短縮することができました(「驚いたことに」カーネルの開始が9秒から1.5秒に変更されました)。

また、使用するハードウェアがわからない場合、モジュールは明らかに有益です。

PS。initrdに含める限り、重要なドライバーもモジュールとしてコンパイルできます。たとえば、ディストリビューションには、インストール時にinitrdに/のファイルシステム、ハードドライブのドライバーなどが含まれます。


この回答をもう一度注意深く読んでも構いませんか。私が持っているだろうが、私はあなたが例えば、所定の位置に言って何を意味するのか分からない伝統的なハードドライブ]に...
シェパン

私は磁気のものを意味しました(SSDの経験はありません)。
マチェイピエチョトカ

これをもっと読みやすくしようとしました。私がそれを台無しにしなかったかどうか確認できますか。
シェパン

ありがとう。試験セッションを終えたばかりなので、調べる時間はありませんでした。
マチェイピエチョトカ

7

私の知る限り、速度に違いはありません。

割り当ての粒度は1ページであるため、数kBのカーネルメモリが得られると思います。したがって、一般的なアーキテクチャでは、各モジュールはモジュールごとに平均約2kB(½ページ)を無駄にします。組み込みシステムでも、それはほとんど意味がありません。また、モジュールはカーネルと同じように圧縮できるため、ディスク領域が少し増えます。これは、ストレージが少ない組み込みシステムでより関連性があります。

モジュールを完全に省くことができる場合、カーネルメモリ(モジュールローダーは不要)、ディスク容量(モジュールユーティリティは不要)、およびシステムの複雑さ(ディストリビューションの機能としてモジュールロードを含める必要はありません)を節約できます)。これらの点は、ハードウェアが拡張可能でない一部の組み込み設計では非常に魅力的です。


モジュール内のシンボルにアクセスするには、少し時間がかかります(間接参照が含まれます)。しかし、追加された柔軟性(必要に応じてロード/アンロードでき、使用中の正確なハードウェアに合わせて手作業で調整されたカーネルを構築する必要はありません...)変更することはありません)。
フォンブランド

4

いくつかの潜在的な利点。パフォーマンスは議論の余地のあるものです。ダイナミックローダーに関連するランタイムオーバーヘッドを回避することはできますが、リアルタイムスケジューラに依存している場合を除き、それは大したことではないでしょう。

システム上の大きなページを利用している場合、おそらくより大きな静的カーネルイメージを作成することは、ページ記述子キャッシュをより効率的に使用することを意味します。一部のシステムはカーネルを「ケージ」し、1つのメモリローカリティに緊密にパックします。これにより、マイナーな(場合によってはメジャーな)ページフォルトによる遅延をある程度軽減できます。

アーキテクチャ上、One Big Imageを提供するのに適している場合があります。独立したモジュールの数が少ない方が保守しやすく、柔軟性を失うことは重要ではありません。この種の推論の多くは、スタイルと実践の問題に挑戦しています。


2

時にはそれが必要です。重要なドライバー(SCSIドライバーなど)をモジュールとしてコンパイルすると、システムは起動しません。

モジュールとしてコンパイルしないもう1つの優れた候補は、ルートパーティションのファイルシステムタイプです。カーネルは理解していない場合はext3読むために/lib/modules/どのようにそれはそれからモジュールをロードしますか?

このように考えてください。モジュールを使用するには、カーネルはカーネルモジュールを読み込んでロードするためにシステムについて十分に知る必要があります。それと試行錯誤を使用してください:-)


パフォーマンスの改善について考えてますか?何かありますか?
プネヘヘ

1
過去に人々は、必要なものだけで可能な限り最小のカーネルを作成するために多大な努力をしてきました。今日、これは大きく変わりました。実際、モジュールを最初にロードするたびに、パフォーマンスがわずかに低下します。それはあなたがカーネルのすべてをコンパイルする必要があります言っているのではない:-)この参照:articleinput.com/e/a/title/...
nc3b

不可欠ではないドライバーや機能には利点がありますか?たとえば、他の必要性や機能なしで端末とネットワークユーティリティの束だけを使用したい場合。ロード可能なモジュールなしでカーネル内で必要なすべてのモジュールとドライバーをコンパイルするだけでメリットはありますか?
uray

3
ブル。システムは、initrdのモジュールとしてSCSIドライバーで正常に起動します。それが彼らの目的です。
wzzrd

はい...そのためのモジュールは、カーネルが理解できるinitrdにあります
...-Dagelf

2

カーネル内の組み込みハードウェアのすべてのドライバーを静的にコンパイルします。例外は、永続的ではないハードウェア(たとえば、USB接続のハードウェア)です。

私のハードウェア構成はすぐに変更される可能性が低いため、モジュールに煩わされることはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.