カーネルプリエンプション構成を確認するにはどうすればよいですか?


11

Linuxカーネルがプリエンプティブか非プリエンプティブかを確認したい。次のようなコマンドを使用してこれを確認するにはどうすればよいuname -aですか?

回答:


10

カーネルがプリエンプティブであるかどうかは、Linuxカーネルのようにプリエンプトしたいものに依存します。プリエンプションを個別に有効/無効にできるさまざまなものがあります。

あなたのカーネルが持っている場合CONFIG_IKCONFIGCONFIG_IKCONFIG_PROC有効に、あなたはを通して、あなたのプリエンプションの設定を見つけることができます/proc/config.gz(あなたはこれを持っていない場合は、いくつかのディストリビューションは、カーネルの設定を出荷する/boot代わりに):

$ gzip -cd /proc/config.gz | grep PREEMPT
CONFIG_TREE_PREEMPT_RCU=y
CONFIG_PREEMPT_RCU=y
CONFIG_PREEMPT_NOTIFIERS=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
# CONFIG_DEBUG_PREEMPT is not set
# CONFIG_PREEMPT_TRACER is not set

持っていても持ってCONFIG_IKCONFIGいなくCONFIG_IKCONFIG_PROCても、でカーネルイメージから取り出すことができますextract-ikconfig


ラズベリーでカーネルモジュールを作成し、外部センサーと対話して温度を要求しました。センサーと通信するには、指定した時間(ミリ秒単位)のgpioピンの入出力を設定する必要があります。そして、モジュールは正常に動作します。スケジューラが他のプロセスによってプリエンプトされないカーネルモジュールも同様です。プリエンプトされた場合、タイミングが正しくなくなり、センサーからの結果の取得が正しくなくなります。
mikmik 2014年

2

プリエンプティブルカーネル(低遅延デスクトップ)はPREEMPT、バージョン名(uname -a)でタグ付けされています。これ/proc/versionは、指定されたカーネルにモジュールをロードできるかどうかを決定するために使用される「バージョンマジック」文字列にも表示されます。たとえば、

mymodule: version magic '3.4.35 mod_unload ARMv7 p2v8 ' 
              should be '3.4.35 preempt mod_unload ARMv7 p2v8 '

のようなタグ付けは存在しませんCONFIG_PREEMPT_VOLUNTARY、afaik。

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