Modprobed-db
modprobed-db は、システムの実行中にロードされている全てのカーネルモジュールのリストを生成するユーティリティです。このリストを使うことで、自分でカーネルをビルドする際に未使用のモジュールを全て無効化し、コンパイル時間を劇的に削減することができます。
目次
インストール
modprobed-dbAUR パッケージをインストールしてください。
modprobed-db
を実行してください。まだ存在しないならば$XDG_CONFIG_HOME/modprobed-db.conf
が作成されます。modprobed-db store
を実行してください。$XDG_CONFIG_HOME/modprobed.db
データベースファイルが作成され、現在ロードされているモジュールが記録されます。
任意: 記録したくないモジュールは ignore 配列に追加してください。例えば、ビルドされるモジュールや、他のパッケージによって提供されているモジュールなどです。 無視されるべき一般的なモジュールは、いくつかすでに追加されています:
$ cat ~/.config/modprobed-db.conf
IGNORE=(nvidia vboxdrv vboxnetflt vboxnetadp vboxpci lirc_dev lirc_i2c osscore oss_hdaudio oss_usb tp_smapi thinkpad_ec zavl znvpair zunicode zcommon zpios zfs spl splat)
使用方法
データベースを生成する
初期データベースが作成されたら、現在データベースに登録されているモジュールを表示するには modprobed-db list
を、現在ロードされているカーネルモジュールでデータベースを更新するには modprobed-db store
を使ってください。
推奨事項
不必要なモジュールを除いてカーネルをビルドする前に、モジュールの使用状況を基にデータベースを大きくして、システムが必要とするモジュールをすべて記録するのに十分な時間、modprobed-db
をインストールした状態で公式の Arch カーネルを "使用する" ことが推奨されます。以下では、適切なモジュールをロードしてカタログ化できるようにするためのアクションをいくつか提案しています:
- 必要にあるであろう全種類のファイルシステムをマウントする。
- 使用するであろう全種類のリムーバブルメディアを挿入する (USB、DVD、CD など)。
- これには、必要ならば、ISO イメージファイルのマウントも含まれます。ISO イメージファイルのマウントには loop モジュールと isofs モジュールが使用されます。
- マシン上の全デバイスを使用する (ネットワークインターフェイス、入力デバイス、ウェブカメラ、モバイルデバイスなど)。
- 必要なアプリケーションを全て使用する。一部のアプリケーションはカーネルモジュールに依存しているからです。例えば:
- IP ブロック/フィルタリングソフトウェア (pgl-cliAUR など) は、iptables カーネルモジュールを必要とします。
- 暗号化ソフトウェア (truecryptAUR など) は、暗号化用のカーネルモジュールを必要とします。モジュールを確実にロードさせるために、暗号化済みのコンテナをいくつかマウントしてください。
- 特定の QEMU 構成では、カーネルモジュールが必要です。
- lm-sensors は、ハードウェアのセンサーを読むためにカーネルモジュールを必要とします。
- 別の Linux カーネルを実行して modprobed-db を再度実行してみる。他の Linux カーネルでは、他のカーネルでは有効化されていないモジュールが含まれている可能性があります。
これらのアクションは、定期的に modprobed-db store
でデータベースを更新して新しくロードされたカーネルモジュールを捕捉することと並行に行われることになっています。
自動的かつ定期的にデータベースを更新する
modprobed-db store
の実行は以下の方法により自動化できます:
Cron
modprobed-db を使用する最も便利な方法は、/usr/bin/modprobed-db store
を定期的に実行する crontab エントリを追加することです。
1時間ごとにスクリプトを実行する例:
$ crontab -e 0 */1 * * * /usr/bin/modprobed-db store &> /dev/null
systemd
cron ではなく、modprobed-db.service
ユーザーユニットを起動/有効化することもできます。このユニットは、1時間毎、そして起動時とシャットダウン時に、store モードで modprobed-db を実行します。
他のサービスやタイマーのように、modprobed-db.service
ユーザーユニットのステータスはクエリできます。
手動でデータベースを編集する
#自動的かつ定期的にデータベースを更新する 方法や、手動で modprobed-db store
を実行することは、絶対に確実というわけではありません:
- 一部のモジュールはデータベースの更新と更新の間でロードとアンロードが行われてしまい、捕捉されない可能性があります。
- 一部のモジュールはブートの途中で使用され、
modprobed-db
によって捕捉されません (例:efivarfs
)。それらは手動でmodprobed.db
ファイルに追加する必要があります。
ありがたいことに、modprobed.db
データベースファイルは、1行に1つのカーネルモジュール名が記述されているシンプルなテキストファイルです。手動で編集してモジュールを追加/削除できます。手動で編集した後は、modprobed-db store
を実行してモジュールを自動で並べ替えさせることをおすすめします。
推奨モジュール
以下のモジュールは、広く使用されているため、$XDG_CONFIG_HOME/modprobed.db
データベースに追加することが推奨されます:
ext4
、fat
、vfat
: 一般的なファイルシステムと EFI システムパーティションをサポートするため。loop
: ファイルをファイルシステムとしてマウントするため。isofs
: ISO ファイルをマウントするため。cifs
: Samba などのネットワークファイルシステム用。efivarfs
: UEFI#UEFI 変数 のファイルシステムをマウントするため。usb_storage
: USB ストレージデバイスをサポートするため。usbhid
: USB 入力デバイスをサポートするため。
modprobed-db でカーネルをビルドする
データベースが十分に生成できたら、make localmodconfig で直接読み込むことができます。
伝統的なコンパイル方法
modprobed-db
は、伝統的なコンパイルワークフローにおいて Arch のデフォルトの .config ファイルを用いた設定ステップに自然に介入します。
公式 Arch カーネルの PKGBUILD を使う
公式の Arch カーネルの PKGBUILD
は、これを自動的に行うように変更できます:
... msg2 "Applying patch $src..." patch -Np1 < "../$src" done msg2 "Setting config..." cp ../config .config make olddefconfig make LSMOD=$HOME/.config/modprobed.db localmodconfig make -s kernelrelease > ../version ...
linux-tkg を使う
linux-tkg は、ユーザフレンドリーなカーネルビルドスクリプトを提供しています。さらに、デスクトップ/ゲーミングパフォーマンスを向上させることを目的とした追加のパッチも含まれています。不必要なモジュールを取り除くための modprobed-db
データベースの使用は、この設定ファイルでオン/オフを切り替えることができます。
カスタムカーネルで make localmodconfig と modprobed-db を使用するメリット
- ファイルシステム上のカーネル容量の縮小
- コンパイル時間の短縮
Arch カーネルのバージョン 3.8.8-1 による比較 (ABS を使用):
マシン CPU | スレッド数 | make localmodconfig | モジュール数 | HDD 上のモジュール容量 | コンパイル時間 |
Intel i7-3770K @ 4.50 GHz | 8 | No | 3,025 | 129 MB | 7分37秒 |
Intel i7-3770K @ 4.50 GHz | 8 | Yes | 230 | 18 MB | 1分13秒 |
Intel Q9550 @ 3.40 GHz | 4 | No | 3,025 | 129 MB | 14分21秒 |
Intel Q9550 @ 3.40 GHz | 4 | Yes | 230 | 18 MB | 2分20秒 |
Intel E5200 @ 3.33 GHz | 2 | No | 3,025 | 129 MB | 34分35秒 |
Intel E5200 @ 3.33 GHz | 2 | Yes | 230 | 18 MB | 5分46秒 |
- ビルドされるモジュールの数が 1/13
- 容量が 1/7
- コンパイル時間が 1/6
モジュールの数を確認:
find /scratch/linux-3.8 -name '*.ko' | wc -l
HDD 上の容量を確認:
find /scratch/linux-3.8 -name '*.ko' -print0 | xargs -0 du -ch
設定済みの linux-3.8.8 のコンパイル時間を確認 (標準の Arch 設定を使用):
$ time make -jx modules
参照
- https://docs.kernel.org/admin-guide/README.html#configuring-the-kernel
make localmodconfig
のドキュメント - https://docs.kernel.org/kbuild/kconfig.html とその親ディレクトリ