CentOS 8 / Redhat 8とUbuntu 22.04を確認しましたが、どちらもデフォルトのカーネル設定CONFIG_PREEMPTが設定されていません。
CONFIG_PREEMPT is not set
私が理解したところによれば、カーネルは基本的にプリエンプトできるはずです。いいえ?
答え1
CONFIG_PREEMPT
構成項目の説明を読むことができます。ここ、内容は次のとおりです。
このオプションは、すべてのカーネルコード(重要セクションで実行されていない)をプリエンプト可能にし、カーネルの待ち時間を短縮します。これにより、プロセスがシステムコールを実行するカーネルモードにあり、自然なプリエンプションポイントに到達できない場合でも、優先順位の低いプロセスの非自発的なプリエンプションが可能になり、対話型イベントに応答できます。これにより、システムに負荷がある場合でもアプリケーションをよりスムーズに実行できますが、スループットがわずかに低くなり、カーネルコードのランタイムオーバーヘッドが最小限に抑えられます。
通常、ユーザー空間コードのみがプリエンプション可能です。有効にすると、CONFIG_PREEMPT
カーネル空間で実行されるコードは次のようになります。返品予め決められた。