「Modprobed-db」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の5版が非表示)
16行目: 16行目:
   
 
'''任意:''' 記録したくないモジュールは ignore 配列に追加してください。例えば、ビルドされるモジュールや、他のパッケージによって提供されているモジュールなどです。
 
'''任意:''' 記録したくないモジュールは ignore 配列に追加してください。例えば、ビルドされるモジュールや、他のパッケージによって提供されているモジュールなどです。
無視されるべき一般的なモジュールは、いくつか追加されています:
+
無視されるべき一般的なモジュールは、いくつかデフォルトで追加されます:
   
 
{{hc|$ cat ~/.config/modprobed-db.conf|2=
 
{{hc|$ cat ~/.config/modprobed-db.conf|2=
118行目: 118行目:
 
[https://github.com/Frogging-Family/linux-tkg linux-tkg] は、ユーザフレンドリーなカーネルビルドスクリプトを提供しています。さらに、デスクトップ/ゲーミングパフォーマンスを向上させることを目的とした追加のパッチも含まれています。不必要なモジュールを取り除くための {{ic|modprobed-db}} データベースの使用は、この設定ファイルでオン/オフを切り替えることができます。
 
[https://github.com/Frogging-Family/linux-tkg linux-tkg] は、ユーザフレンドリーなカーネルビルドスクリプトを提供しています。さらに、デスクトップ/ゲーミングパフォーマンスを向上させることを目的とした追加のパッチも含まれています。不必要なモジュールを取り除くための {{ic|modprobed-db}} データベースの使用は、この設定ファイルでオン/オフを切り替えることができます。
   
  +
== カスタムカーネルで "make localmodconfig" と modprobed-db を使用するメリット ==
== 推奨事項 ==
 
'''make localmodconfig''' でカーネルをビルドする前に、パッケージをインストールしてから相当期間はシステムを"使用"して、システムの使用状況に応じてデータベースがシステムに必要なモジュールを全て収集するまで成長させることが推奨されています。適当なモジュールをロードしてカタログ化させるために以下のような操作をすることが推奨されます:
 
   
  +
# コンパイル時間の劇的な削減
*あらゆるリムーバブルメディア (USB, DVD, CD など) を挿入
 
  +
# 不必要なモジュールはビルドされません。しかし、その結果として節約されるディスク領域 (数百メガバイト) は比較的小さく、デスクトップコンピュータにおいては重要ではありません。
*マシンに接続された全てのデバイスを使用 (wifi, ネットワーク, カメラや ipod などの USB デバイスなど)
 
*あらゆるファイルシステムのマウント (ext2/3/4, fat, vfat, CIFS 共有, NFS 共有など)
 
*必要とするモジュールを確認するため出来る限り多数の (いつも使っている) アプリケーションを使用。例えば、{{AUR|pgl-cli}} などの IP ブロック/フィルタリングソフトウェア。
 
*iso イメージファイルをマウントすることがある場合はマウントしてください ('''loop''' と '''isofs''' モジュールが記録されます)。
 
*{{Pkg|truecrypt}} などの暗号化ソフトウェアを必要とする場合は、データベースに crypto モジュールが記録されるように、ソフトウェアをロードして暗号化コンテナをマウント。
 
*別の Linux カーネルを試用。デフォルトのカーネルでは有効になっていないモジュールが含まれている可能性があります。
 
   
  +
カーネルバージョン 5.13.1 を使用した比較です。[[カーネル/伝統的なコンパイル方法]] では、デフォルトの Arch コンフィグを使っています。
== 推奨モジュール ==
 
*cifs
 
*ext2
 
*ext3
 
*ext4
 
*fat
 
*isofs
 
*loop
 
*efivars
 
*vfat
 
*usb_storage
 
   
  +
{| class="wikitable"
== カスタムカーネルで '''make localmodconfig''' と modprobed-db を使用するメリット ==
 
  +
! マシンの CPU !! スレッド数 !! コンパイラ !! make localmodconfig !! モジュール数 !! 合計コンパイル時間 !! カーネルコンパイル時間 !! モジュールコンパイル時間
#ファイルシステム上のカーネル容量の縮小
 
#コンパイル時間の短縮
 
 
Arch カーネルのバージョン 3.8.8-1 による比較 (ABS を使用):
 
 
{{Note| The modprobed.db on the test machine contains 209 lines; YMMV based on specific usage and needs.}}
 
 
{| class="wikitable" style="text-align:center"
 
| '''マシン CPU''' || '''スレッド数''' || '''make localmodconfig'''||'''モジュール数''' || '''HDD 上のモジュール容量''' || '''コンパイル時間'''
 
 
|-
 
|-
| Intel i7-3770K @ 4.50 GHz || 8 || {{No}} || 3,025 || 129 MB || 7分37秒
+
| Ryzen 5950X @ 4.55 GHz || 32 || GCC 11.1.0 || いいえ || 5442 || 5m 12s || 58s || 4m 14s
 
|-
 
|-
| Intel i7-3770K @ 4.50 GHz || 8 || {{Yes}} || 230 || 18 MB || 1分13秒
+
| Ryzen 5950X @ 4.55 GHz || 32 || GCC 11.1.0 || はい || 227 || 1m 32s || 57s || 35s
 
|-
 
|-
| Intel Q9550 @ 3.40 GHz || 4 || {{No}} || 3,025 || 129 MB || 14分21秒
+
| 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'''
 
*'''コンパイル時間が 1/6'''
 
   
  +
このベンチマークから主に分かることは、"完全な" カーネルのビルド時間の 80% はモジュールに費やされているということです。特定のマシンで必要とされるモジュールがほんの一部であることから、ビルド時間は約 70% 減らすことができます。この結果はマシン毎に異なるでしょうが、ほぼ同じであるはずです。
モジュールの数を確認:
 
find /scratch/linux-3.8 -name '*.ko' | wc -l
 
   
  +
モジュールの数は、以下を実行すれば分かります:
HDD 上の容量を確認:
 
find /scratch/linux-3.8 -name '*.ko' -print0 | xargs -0 du -ch
 
   
  +
$ cd /lib/modules/15.13.1-your-custom-kernel
設定済みの linux-3.8.8 のコンパイル時間を確認 (標準の Arch 設定を使用):
 
  +
$ find * | grep ko.zst | wc -l
$ time make -jx modules
 
   
  +
カーネルのビルド時間は以下で分かります:
{{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.}}
 
  +
  +
$ time make -jx bzImage # Replace "x" with the wanted number of threads
  +
  +
そして、モジュールのビルド時間は以下で分かります:
  +
  +
$ time make -jx modules # Replace "x" with the wanted number of threads
   
 
== 参照 ==
 
== 参照 ==
185行目: 158行目:
 
* https://docs.kernel.org/admin-guide/README.html#configuring-the-kernel {{ic|make localmodconfig}} のドキュメント
 
* https://docs.kernel.org/admin-guide/README.html#configuring-the-kernel {{ic|make localmodconfig}} のドキュメント
 
* https://docs.kernel.org/kbuild/kconfig.html とその親ディレクトリ
 
* https://docs.kernel.org/kbuild/kconfig.html とその親ディレクトリ
  +
  +
{{TranslationStatus|Modprobed-db|2023-06-11|749831}}

2023年6月12日 (月) 19:55時点における最新版

関連記事

modprobed-db は、システムの実行中にロードされている全てのカーネルモジュールのリストを生成するユーティリティです。このリストを使うことで、自分でカーネルをビルドする際に未使用のモジュールを全て無効化し、コンパイル時間を劇的に削減することができます。

インストール

modprobed-dbAUR パッケージをインストールしてください。

  1. modprobed-db を実行してください。まだ存在しないならば $XDG_CONFIG_HOME/modprobed-db.conf が作成されます。
  2. 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 データベースに追加することが推奨されます:

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 を使用するメリット

  1. コンパイル時間の劇的な削減
  2. 不必要なモジュールはビルドされません。しかし、その結果として節約されるディスク領域 (数百メガバイト) は比較的小さく、デスクトップコンピュータにおいては重要ではありません。

カーネルバージョン 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
ノート: この結果は、GCC の方が Clang よりも速くカーネルをビルドすることを示しているわけではありません。このベンチマークで使用された GCC バージョンはセルフビルドされ、最適化されています。

このベンチマークから主に分かることは、"完全な" カーネルのビルド時間の 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

参照

翻訳ステータス: このページは en:Modprobed-db の翻訳バージョンです。最後の翻訳日は 2023-06-11 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。