カーネルプリエンプション構成をどのように確認しますか?

カーネルプリエンプション構成をどのように確認しますか?

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

答え1

カーネルがプリエンプト可能かどうかは、プリエンプトするターゲットによって異なります。 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

答え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

答え3

許可された回答には、いくつかのディストリビューションが/bootUbuntu 20.04で始まり、少なくとも他のシステムでは/boot/config-$(uname -r)

$ grep PREEMPT_RT /boot/config-$(uname -r)
CONFIG_PREEMPT_RT=y

これはPypeBrosが提案するよりも多くの情報を提供しませんがuname -a、他の設定を確認したい場合は、ファイルを開いて参照するとより多くの情報が提供されます。

関連情報