「Modprobed-db」の版間の差分
Kusakata.bot2 (トーク | 投稿記録) (Pkg/AUR テンプレートの更新) |
細 (→インストール: 修正) |
||
(同じ利用者による、間の9版が非表示) | |||
6行目: | 6行目: | ||
{{Related articles end}} |
{{Related articles end}} |
||
− | + | [https://github.com/graysky2/modprobed-db modprobed-db] は、システムの実行中にロードされている全ての[[カーネルモジュール]]のリストを生成するユーティリティです。このリストを使うことで、[[カーネル#コンパイル|自分でカーネルをビルドする]]際に未使用のモジュールを全て無効化し、コンパイル時間を劇的に削減することができます。 |
|
− | == インストール |
+ | == インストール == |
− | [[AUR]] から {{AUR|modprobed-db}} パッケージをインストールできます。 |
||
− | + | {{AUR|modprobed-db}} パッケージをインストールしてください。 |
|
− | #{{ic|modprobed-db store}} を実行すると現在ロードされているモジュールが保存されます。 |
||
+ | # {{ic|modprobed-db}} を実行してください。まだ存在しないならば {{ic|$XDG_CONFIG_HOME/modprobed-db.conf}} が作成されます。 |
||
− | '''任意:''' 無視したいモジュールは ignore 行列に追加してください。例えば他のパッケージにモジュールが入っている場合などです。デフォルトでは以下のモジュールが含まれています: |
||
+ | # {{ic|modprobed-db store}} を実行してください。{{ic|$XDG_CONFIG_HOME/modprobed.db}} データベースファイルが作成され、現在ロードされているモジュールが記録されます。 |
||
− | {{hc|$ cat ~/.config/modprobed-db.conf|<nowiki> |
||
+ | |||
+ | '''任意:''' 記録したくないモジュールは ignore 配列に追加してください。例えば、ビルドされるモジュールや、他のパッケージによって提供されているモジュールなどです。 |
||
+ | 無視されるべき一般的なモジュールは、いくつかデフォルトで追加されます: |
||
+ | |||
+ | {{hc|$ cat ~/.config/modprobed-db.conf|2= |
||
IGNORE=(nvidia vboxdrv vboxnetflt vboxnetadp vboxpci lirc_dev lirc_i2c |
IGNORE=(nvidia vboxdrv vboxnetflt vboxnetadp vboxpci lirc_dev lirc_i2c |
||
osscore oss_hdaudio oss_usb tp_smapi thinkpad_ec |
osscore oss_hdaudio oss_usb tp_smapi thinkpad_ec |
||
− | zavl znvpair zunicode zcommon zpios zfs spl splat) |
+ | zavl znvpair zunicode zcommon zpios zfs spl splat) |
+ | }} |
||
== 使用方法 == |
== 使用方法 == |
||
+ | |||
− | 最初にデータベースが作成されたら、通常通りにシステムを使って (USB スティックを接続したり、モジュールを必要とするハードウェアを使ったり、モジュールを必要とするファイルシステムをマウントするなど)、以下の方法のどちらかで定期的にデータベースを更新します: |
||
+ | === データベースを生成する === |
||
− | === Cron === |
||
+ | |||
− | modprobed-db を使用する最も便利な方法は {{ic|/usr/bin/modprobed-db store}} を定期的に実行する crontab エントリを追加することです。 |
||
+ | 初期データベースが作成されたら、現在データベースに登録されているモジュールを表示するには {{ic|modprobed-db list}} を、現在ロードされているカーネルモジュールでデータベースを更新するには {{ic|modprobed-db store}} を使ってください。 |
||
+ | |||
+ | ==== 推奨事項 ==== |
||
+ | |||
+ | [[#modprobed-db でカーネルをビルドする|不必要なモジュールを除いてカーネルをビルドする]]前に、モジュールの使用状況を基にデータベースを大きくして、システムが必要とするモジュールをすべて記録するのに十分な時間、{{ic|modprobed-db}} をインストールした状態で公式の Arch カーネルを "使用する" ことが推奨されます。以下では、適切なモジュールをロードしてカタログ化できるようにするためのアクションをいくつか提案しています: |
||
+ | |||
+ | * 必要にあるであろう全種類の[[ファイルシステム]]をマウントする。 |
||
+ | * 使用するであろう全種類のリムーバブルメディアを挿入する (USB、DVD、CD など)。 |
||
+ | ** これには、必要ならば、ISO イメージファイルのマウントも含まれます。ISO イメージファイルのマウントには '''loop''' モジュールと '''isofs''' モジュールが使用されます。 |
||
+ | * マシン上の全デバイスを使用する (ネットワークインターフェイス、入力デバイス、ウェブカメラ、モバイルデバイスなど)。 |
||
+ | * 必要なアプリケーションを全て使用する。一部のアプリケーションはカーネルモジュールに依存しているからです。例えば: |
||
+ | ** IP ブロック/フィルタリングソフトウェア ({{AUR|pgl-cli}} など) は、[[iptables]] カーネルモジュールを必要とします。 |
||
+ | ** 暗号化ソフトウェア ({{AUR|truecrypt}} など) は、暗号化用のカーネルモジュールを必要とします。モジュールを確実にロードさせるために、暗号化済みのコンテナをいくつかマウントしてください。 |
||
+ | ** 特定の [[QEMU]] 構成では、カーネルモジュールが必要です。 |
||
+ | ** [[lm-sensors]] は、ハードウェアのセンサーを読むためにカーネルモジュールを必要とします。 |
||
+ | * 別の Linux カーネルを実行して modprobed-db を再度実行してみる。他の Linux カーネルでは、他のカーネルでは有効化されていないモジュールが含まれている可能性があります。 |
||
+ | |||
+ | これらのアクションは、定期的に {{ic|modprobed-db store}} でデータベースを更新して新しくロードされたカーネルモジュールを捕捉することと並行に行われることになっています。 |
||
+ | |||
+ | ==== 自動的かつ定期的にデータベースを更新する ==== |
||
+ | |||
+ | {{ic|modprobed-db store}} の実行は以下の方法により自動化できます: |
||
+ | |||
+ | ===== Cron ===== |
||
+ | |||
+ | modprobed-db を使用する最も便利な方法は、{{ic|/usr/bin/modprobed-db store}} を定期的に実行する crontab エントリを追加することです。 |
||
1時間ごとにスクリプトを実行する例: |
1時間ごとにスクリプトを実行する例: |
||
+ | |||
$ crontab -e |
$ crontab -e |
||
0 */1 * * * /usr/bin/modprobed-db store &> /dev/null |
0 */1 * * * /usr/bin/modprobed-db store &> /dev/null |
||
− | === |
+ | ===== systemd ===== |
− | cron を使いたくない Systemd ユーザーは付属のサービスを使うことができます: {{ic|modprobed-db.service}}。起動時とシャットダウン時、それと1時間ごとに store モードで modprobed-db を実行します。 |
||
+ | cron ではなく、{{ic|modprobed-db.service}} [[ユーザーユニット]]を[[起動/有効化]]することもできます。このユニットは、1時間毎、そして起動時とシャットダウン時に、store モードで modprobed-db を実行します。 |
||
− | $ systemctl --user enable modprobed-db.service |
||
− | $ systemctl --user start modprobed-db.service |
||
+ | 他のサービスやタイマーのように、{{ic|modprobed-db.service}} [[ユーザーユニット]]の[[ユニットステータス|ステータス]]はクエリできます。 |
||
− | === データの使用 === |
||
− | 上述したとおり、このスクリプトはカーネルをコンパイルするときに '''make localmodconfig''' と組み合わせて使われることが想定されています。十分なデータベースが作成されたら、カーネルをコンパイルする前に {{ic|/usr/bin/modprobed-db recall}} を実行して全てのモジュールをロードしてから '''make localmodconfig''' を使います。 |
||
+ | ==== 手動でデータベースを編集する ==== |
||
− | {{Note|{{ic|/usr/bin/modprobe}} は root 権限を必要とするため、データベースを使用するには root か sudo で {{ic|/usr/bin/modprobed-db}} を実行する必要があります。}} |
||
+ | [[#自動的かつ定期的にデータベースを更新する]] 方法や、手動で {{ic|modprobed-db store}} を実行することは、絶対に確実というわけではありません: |
||
− | ==== Arch の公式カーネルの PKGBUILD を使う ==== |
||
− | Arch の公式カーネルの PKGBUILD はネイティブの対応はしていませんが、以下のように簡単に設定することができます: |
||
+ | * 一部のモジュールはデータベースの更新と更新の間でロードとアンロードが行われてしまい、捕捉されない可能性があります。 |
||
− | {{bc| ... |
||
+ | * 一部のモジュールはブートの途中で使用され、{{ic|modprobed-db}} によって捕捉されません (例: {{ic|efivarfs}})。それらは手動で {{ic|modprobed.db}} ファイルに追加する必要があります。 |
||
− | # get kernel version |
||
− | make prepare |
||
+ | ありがたいことに、{{ic|modprobed.db}} データベースファイルは、1行に1つのカーネルモジュール名が記述されているシンプルなテキストファイルです。手動で編集してモジュールを追加/削除できます。手動で編集した後は、{{ic|modprobed-db store}} を実行してモジュールを自動で並べ替えさせることをおすすめします。 |
||
− | sudo /usr/bin/modprobed-db recall <---- insert this line |
||
− | make localmodconfig <---- insert this line |
||
+ | ===== 推奨モジュール ===== |
||
− | # load configuration |
||
− | # Configure the kernel. Replace the line below with one of your choice. |
||
− | #make menuconfig # CLI menu for configuration |
||
− | #make nconfig # new CLI menu for configuration |
||
− | #make xconfig # X-based configuration |
||
− | #make oldconfig # using old config from previous kernel version |
||
− | # ... or manually edit .config |
||
− | ...}} |
||
+ | 以下のモジュールは、広く使用されているため、{{ic|$XDG_CONFIG_HOME/modprobed.db}} データベースに追加することが推奨されます: |
||
− | ==== AUR のカーネルを使う ==== |
||
− | AUR のカーネルパッケージの中には PKGBUILD ファイルで modprobed-db にネイティブで対応しているものがあります。例: |
||
− | *{{AUR|linux-bfs}}{{Broken package link|{{aur-mirror|linux-bfs}}}} |
||
− | *{{AUR|linux-bridge-pl}}{{Broken package link|{{aur-mirror|linux-bridge-pl}}}} |
||
− | *{{AUR|linux-ck-fbcondecor}} |
||
− | *{{AUR|linux-ck}} |
||
− | *{{AUR|linux-lqx}} |
||
− | *{{AUR|linux-lts310}}{{Broken package link|パッケージが存在しません}} |
||
− | *{{AUR|linux-lts312}}{{Broken package link|パッケージが存在しません}} |
||
− | *{{AUR|linux-lts-ck}} |
||
− | *{{AUR|linux-pf}} |
||
− | *{{AUR|linux-uksm-ck}}{{Broken package link|{{aur-mirror|linux-uksm-ck}}}} |
||
− | *{{AUR|linux-ice}}{{Broken package link|パッケージが存在しません}} |
||
− | *{{AUR|linux-uksm}} |
||
+ | * {{ic|ext4}}、{{ic|fat}}、{{ic|vfat}}: 一般的な[[ファイルシステム]]と [[EFI システムパーティション]]をサポートするため。 |
||
− | modprobed-db を使用する他のパッケージを調べるには: |
||
+ | * {{ic|loop}}: ファイルをファイルシステムとしてマウントするため。 |
||
− | cd /scratch |
||
+ | * {{ic|isofs}}: ISO ファイルをマウントするため。 |
||
− | git clone --depth 1 http://pkgbuild.com/git/aur-mirror.git |
||
+ | * {{ic|cifs}}: [[Samba]] などのネットワークファイルシステム用。 |
||
− | find /scratch/aur-mirror -iname "PKGBUILD" -print0 | xargs -0 grep -i 'modprobed-db recall\|modprobed_db recall' | sort |
||
+ | * {{ic|efivarfs}}: [[UEFI#UEFI 変数]] のファイルシステムをマウントするため。 |
||
+ | * {{ic|usb_storage}}: [[USB ストレージデバイス]]をサポートするため。 |
||
+ | * {{ic|usbhid}}: USB 入力デバイスをサポートするため。 |
||
+ | === modprobed-db でカーネルをビルドする === |
||
− | {{Note|The server pkgbuild.com is rather slow and the git clone can take a while.}} |
||
+ | データベースが十分に生成できたら、[https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/README?id=refs/tags/v4.3.3#n205 make localmodconfig] で直接読み込むことができます。 |
||
− | もしくは、[http://pkgbuild.com/git/aur-mirror.git/ こちらのリンク] から .tar.xz スナップショット (約 90 MB) をダウンロードして、最新のコミットメッセージをクリックしてください。 |
||
+ | ==== 伝統的なコンパイル方法 ==== |
||
− | == 推奨事項 == |
||
− | '''make localmodconfig''' でカーネルをビルドする前に、パッケージをインストールしてから相当期間はシステムを"使用"して、システムの使用状況に応じてデータベースがシステムに必要なモジュールを全て収集するまで成長させることが推奨されています。適当なモジュールをロードしてカタログ化させるために以下のような操作をすることが推奨されます: |
||
+ | {{ic|modprobed-db}} は、[[カーネル/伝統的なコンパイル方法|伝統的なコンパイルワークフロー]]において [[カーネル/伝統的なコンパイル方法#Arch のデフォルト設定|Arch のデフォルトの .config ファイル]]を用いた設定ステップに自然に介入します。 |
||
− | *あらゆるリムーバブルメディア (USB, DVD, CD など) を挿入 |
||
− | *マシンに接続された全てのデバイスを使用 (wifi, ネットワーク, カメラや ipod などの USB デバイスなど) |
||
− | *あらゆるファイルシステムのマウント (ext2/3/4, fat, vfat, CIFS 共有, NFS 共有など) |
||
− | *必要とするモジュールを確認するため出来る限り多数の (いつも使っている) アプリケーションを使用。例えば、{{AUR|pgl-cli}} などの IP ブロック/フィルタリングソフトウェア。 |
||
− | *iso イメージファイルをマウントすることがある場合はマウントしてください ('''loop''' と '''isofs''' モジュールが記録されます)。 |
||
− | *{{Pkg|truecrypt}} などの暗号化ソフトウェアを必要とする場合は、データベースに crypto モジュールが記録されるように、ソフトウェアをロードして暗号化コンテナをマウント。 |
||
− | *別の Linux カーネルを試用。デフォルトのカーネルでは有効になっていないモジュールが含まれている可能性があります。 |
||
− | == |
+ | ==== 公式 Arch カーネルの PKGBUILD を使う ==== |
− | *cifs |
||
− | *ext2 |
||
− | *ext3 |
||
− | *ext4 |
||
− | *fat |
||
− | *isofs |
||
− | *loop |
||
− | *efivars |
||
− | *vfat |
||
− | *usb_storage |
||
+ | 公式の Arch カーネルの {{ic|PKGBUILD}} は、これを自動的に行うように変更できます: |
||
− | == カスタムカーネルで '''make localmodconfig''' と modprobed-db を使用するメリット == |
||
− | #ファイルシステム上のカーネル容量の縮小 |
||
− | #コンパイル時間の短縮 |
||
+ | {{bc|1=... |
||
− | Arch カーネルのバージョン 3.8.8-1 による比較 (ABS を使用): |
||
+ | msg2 "Applying patch $src..." |
||
+ | patch -Np1 < "../$src" |
||
+ | done |
||
+ | msg2 "Setting config..." |
||
− | {{Note| The modprobed.db on the test machine contains 209 lines; YMMV based on specific usage and needs.}} |
||
+ | cp ../config .config |
||
+ | make olddefconfig |
||
+ | '''make LSMOD=$HOME/.config/modprobed.db localmodconfig''' |
||
− | {| class="wikitable" style="text-align:center" |
||
+ | |||
− | | '''マシン CPU''' || '''スレッド数''' || '''make localmodconfig'''||'''モジュール数''' || '''HDD 上のモジュール容量''' || '''コンパイル時間''' |
||
+ | make -s kernelrelease > ../version |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | ==== linux-tkg を使う ==== |
||
+ | |||
+ | [https://github.com/Frogging-Family/linux-tkg linux-tkg] は、ユーザフレンドリーなカーネルビルドスクリプトを提供しています。さらに、デスクトップ/ゲーミングパフォーマンスを向上させることを目的とした追加のパッチも含まれています。不必要なモジュールを取り除くための {{ic|modprobed-db}} データベースの使用は、この設定ファイルでオン/オフを切り替えることができます。 |
||
+ | |||
+ | == カスタムカーネルで "make localmodconfig" と modprobed-db を使用するメリット == |
||
+ | |||
+ | # コンパイル時間の劇的な削減 |
||
+ | # 不必要なモジュールはビルドされません。しかし、その結果として節約されるディスク領域 (数百メガバイト) は比較的小さく、デスクトップコンピュータにおいては重要ではありません。 |
||
+ | |||
+ | カーネルバージョン 5.13.1 を使用した比較です。[[カーネル/伝統的なコンパイル方法]] では、デフォルトの Arch コンフィグを使っています。 |
||
+ | |||
+ | {| class="wikitable" |
||
+ | ! マシンの CPU !! スレッド数 !! コンパイラ !! make localmodconfig !! モジュール数 !! 合計コンパイル時間 !! カーネルコンパイル時間 !! モジュールコンパイル時間 |
||
|- |
|- |
||
− | | |
+ | | Ryzen 5950X @ 4.55 GHz || 32 || GCC 11.1.0 || いいえ || 5442 || 5m 12s || 58s || 4m 14s |
|- |
|- |
||
− | | |
+ | | Ryzen 5950X @ 4.55 GHz || 32 || GCC 11.1.0 || はい || 227 || 1m 32s || 57s || 35s |
|- |
|- |
||
− | | |
+ | | Ryzen 5950X @ 4.55 GHz || 32 || Clang 12.0.1 || いいえ || 5442 || 9m 5s || 1m 13s || 7m 52s |
− | |- |
||
− | | 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秒 |
||
|- |
|- |
||
+ | | Ryzen 5950X @ 4.55 GHz || 32 || Clang 12.0.1 || はい || 227 || 2m 13s || 1m 13s || 1m |
||
|} |
|} |
||
+ | {{Note|この結果は、GCC の方が Clang よりも速くカーネルをビルドすることを示しているわけではありません。このベンチマークで使用された GCC バージョンはセルフビルドされ、最適化されています。}} |
||
− | *'''ビルドされるモジュールの数が 1/13''' |
||
+ | |||
− | *'''容量が 1/7''' |
||
+ | このベンチマークから主に分かることは、"完全な" カーネルのビルド時間の 80% はモジュールに費やされているということです。特定のマシンで必要とされるモジュールがほんの一部であることから、ビルド時間は約 70% 減らすことができます。この結果はマシン毎に異なるでしょうが、ほぼ同じであるはずです。 |
||
− | *'''コンパイル時間が 1/6''' |
||
+ | |||
+ | モジュールの数は、以下を実行すれば分かります: |
||
+ | |||
+ | $ cd /lib/modules/15.13.1-your-custom-kernel |
||
+ | $ find * | grep ko.zst | wc -l |
||
+ | |||
+ | カーネルのビルド時間は以下で分かります: |
||
+ | |||
+ | $ time make -jx bzImage # Replace "x" with the wanted number of threads |
||
+ | |||
+ | そして、モジュールのビルド時間は以下で分かります: |
||
+ | $ time make -jx modules # Replace "x" with the wanted number of threads |
||
− | モジュールの数を確認: |
||
− | find /scratch/linux-3.8 -name '*.ko' | wc -l |
||
+ | == 参照 == |
||
− | HDD 上の容量を確認: |
||
− | find /scratch/linux-3.8 -name '*.ko' -print0 | xargs -0 du -ch |
||
+ | * https://docs.kernel.org/admin-guide/README.html#configuring-the-kernel {{ic|make localmodconfig}} のドキュメント |
||
− | 設定済みの linux-3.8.8 のコンパイル時間を確認 (標準の Arch 設定を使用): |
||
+ | * https://docs.kernel.org/kbuild/kconfig.html とその親ディレクトリ |
||
− | $ time make -jx modules |
||
+ | {{TranslationStatus|Modprobed-db|2023-06-11|749831}} |
||
− | {{Note|The Arch standard is to gzip each module; the numbers shown in the table above are not gzip'ed but the savings ratio will be unaffected by this.}} |
2023年6月12日 (月) 19:55時点における最新版
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 を使用するメリット
- コンパイル時間の劇的な削減
- 不必要なモジュールはビルドされません。しかし、その結果として節約されるディスク領域 (数百メガバイト) は比較的小さく、デスクトップコンピュータにおいては重要ではありません。
カーネルバージョン 5.13.1 を使用した比較です。カーネル/伝統的なコンパイル方法 では、デフォルトの Arch コンフィグを使っています。
マシンの CPU | スレッド数 | コンパイラ | make localmodconfig | モジュール数 | 合計コンパイル時間 | カーネルコンパイル時間 | モジュールコンパイル時間 |
---|---|---|---|---|---|---|---|
Ryzen 5950X @ 4.55 GHz | 32 | GCC 11.1.0 | いいえ | 5442 | 5m 12s | 58s | 4m 14s |
Ryzen 5950X @ 4.55 GHz | 32 | GCC 11.1.0 | はい | 227 | 1m 32s | 57s | 35s |
Ryzen 5950X @ 4.55 GHz | 32 | Clang 12.0.1 | いいえ | 5442 | 9m 5s | 1m 13s | 7m 52s |
Ryzen 5950X @ 4.55 GHz | 32 | Clang 12.0.1 | はい | 227 | 2m 13s | 1m 13s | 1m |
このベンチマークから主に分かることは、"完全な" カーネルのビルド時間の 80% はモジュールに費やされているということです。特定のマシンで必要とされるモジュールがほんの一部であることから、ビルド時間は約 70% 減らすことができます。この結果はマシン毎に異なるでしょうが、ほぼ同じであるはずです。
モジュールの数は、以下を実行すれば分かります:
$ cd /lib/modules/15.13.1-your-custom-kernel $ find * | grep ko.zst | wc -l
カーネルのビルド時間は以下で分かります:
$ time make -jx bzImage # Replace "x" with the wanted number of threads
そして、モジュールのビルド時間は以下で分かります:
$ time make -jx modules # Replace "x" with the wanted number of threads
参照
- https://docs.kernel.org/admin-guide/README.html#configuring-the-kernel
make localmodconfig
のドキュメント - https://docs.kernel.org/kbuild/kconfig.html とその親ディレクトリ