カーネルモジュール(カーネルモジュール)
Linuxカーネルへ動的にロード/アンロードできる拡張コード(.koファイル)。NVIDIA GPUドライバ・ZFS・ネットワークドライバなどが代表例で、modprobe/insmodで管理する。
概要
Linuxカーネルは、ハードウェアとソフトウェアの橋渡しを担う中心的なコンポーネントです。
その拡張性を高めるために、動的にロード・アンロードできるコードをカーネルモジュールと呼びます。
モジュールは、実行中のカーネルに対して追加機能を提供し、必要に応じて削除できるため、
システムリソースを有効に活用できます。
主な特徴・仕組み
- 動的ロード/アンロード:
insmod、modprobe、rmmodで管理 - 依存関係解決:
modprobeはモジュール間の依存を自動的に処理 - ロード時のオプション指定:モジュールにパラメータを渡し、挙動をカスタマイズ
- メモリ領域の確保:
vmalloc、kmallocでカーネル空間にメモリを割り当て - デバイスドライバ:GPU、ネットワークカード、ストレージデバイスの制御を担う
- ファイルシステム:ZFS、Btrfs、XFS などのファイルシステムをカーネルに組み込む
- 仮想デバイス:USB/IP、V4L2、iSCSI などの仮想デバイスを提供
- セキュリティ拡張:SELinux、AppArmor、Seccomp などのポリシーをモジュール化
- パフォーマンス監視:perf、ftrace、bpf などのプロファイルツール
- アップデートと互換性:カーネルバージョンに合わせて再コンパイルが必要
スペック/製品比較表
| モジュール名 | 主な機能 | 主要ハードウェア | 推奨カーネルバージョン | 典型的なロードオプション |
|---|---|---|---|---|
nvidia | GPUドライバ | RTX 4090、RTX 3090 | 5.15+ | NVreg_RegistryDwords=EnableNVreg_RegistryDwords |
amdgpu | GPUドライバ | Radeon RX 7900 XTX、RX 6800 XT | 5.10+ | amdgpu.ppfeaturemask=0xffffffff |
i915 | Intel HD/Gen12 GPU | Intel Core Ultra 9 285K | 5.4+ | i915.enable_psr=1 |
zfs | ファイルシステム | NVMe SSD(Samsung 990 Pro) | 5.10+ | zfs.zfs_arc_max=1073741824 |
iscsi_target | iSCSI ターゲット | 10GbE NIC | 5.8+ | iscsi_target.udp_port=3260 |
具体例・対応製品
- NVIDIA GPU
- RTX 4090(24GB GDDR6X、450W TDP、PCIe 4.0 x16)
- RTX 3090(24GB GDDR6X、350W TDP、PCIe 4.0 x16)
- NVIDIA A100(40GB HBM2e、450W TDP、PCIe 4.0 x16)
- AMD GPU
- Radeon RX 7900 XTX(24GB GDDR6、300W TDP、PCIe 4.0 x16)
- Radeon RX 6800 XT(16GB GDDR6、300W TDP、PCIe 4.0 x16)
- Intel GPU
- Intel Core Ultra 9 285K(4.5GHz Boost、72MB L3、PCIe 5.0 x16)
- ストレージ
- Samsung 990 Pro(3,440x1,440 4K、PCIe 5.0 x4、1.6TB/3.2TB)
- Intel Optane 900P(1.5TB、PCIe 4.0 x4、1.5TB)
- ネットワーク
- Mellanox ConnectX‑6(200GbE、PCIe 4.0 x16)
- Intel X710(10GbE、PCIe 3.0 x8)
自作PCでの選び方・注意点
- カーネルバージョンの確認
- 主要ハードウェアは最新のカーネルで最適に動作することが多い。
- 2025年にリリース予定のカーネル 6.0 では、PCIe 5.0 のサポートが強化される。
- モジュールの互換性
- ドライバはハードウェアとカーネルの組み合わせに依存。
- 例:
amdgpuは 5.10 以降で最適化されている。
- ロードオプションの設定
sysfsで/sys/module/<module>/parameters/を確認。- 例:
i915.enable_psr=1でパフォーマンスと省電力を両立。
- アップデートのタイミング
- カーネル更新時はモジュールも再コンパイルが必要。
- 2026年のリリースで新しいセキュリティ機能が追加される予定。
- デバッグとロギング
dmesgでモジュールの起動ログを確認。modinfo <module>で依存関係とバージョン情報を取得。
- パフォーマンス測定
perf stat -e cycles,cache-missesでモジュールの影響を測定。
- セキュリティ
- モジュールはカーネル空間に直接アクセスするため、信頼できるソースから取得。
- バックアップ
- 重要なモジュールは
/lib/modules/$(uname -r)/kernel/でバックアップ。
- 重要なモジュールは
関連用語との違い
- カーネルイメージ
vmlinuzはカーネル本体。モジュールは追加機能として動的に読み込む。
- デバイスドライバ
- デバイスドライバはモジュールの一種で、ハードウェア制御を担当。
- ユーザー空間ライブラリ
- ユーザー空間で動作し、カーネルに対してシステムコールを行う。
- ファイルシステムモジュール
ext4、btrfs、zfsなどはファイルシステムを提供するモジュール。
- 仮想ファイルシステム
proc、sysfsはカーネル情報をユーザー空間に提供する仮想ファイルシステム。
よくある質問(FAQ)
Q1. モジュールを手動でロードしたい場合、どのコマンドを使うべきですか?
A1. insmod は単純にモジュールファイルをロードしますが、依存関係は解決しません。
modprobe は依存関係を自動で処理し、推奨される方法です。
Q2. カーネルを更新した後、モジュールがロードできなくなることがありますか?
A2. はい。カーネルバージョンが変わると、モジュールのバイナリが互換性を失うことがあります。
再コンパイルまたは最新のモジュールを入手してください。
Q3. モジュールのパフォーマンスを最適化するにはどうすればよいですか?
A3. sysfs でパラメータを調整し、perf で測定。
例:nvidia の NVreg_RegistryDwords=EnableNVreg_RegistryDwords を有効にすると、GPU のスレッド数を増やせます。
まとめ
カーネルモジュールは、Linux システムの柔軟性と拡張性を支える不可欠な要素です。
ハードウェアの進化に合わせて、GPU、ストレージ、ネットワーク、ファイルシステムなど多岐にわたる機能を動的に追加・削除できるため、最新の 2025年・2026年に登場する次世代デバイスを最大限に活用できます。
自作PC構築時には、カーネルバージョンとモジュールの互換性、ロードオプション、パフォーマンス測定を丁寧に行うことで、安定かつ高速なシステムを実現できます。