3.14. RCU コールバックのオフロード
Read-Copy-Update (RCU) システムは、カーネル内で相互に除外されるロックレスメカニズムです。RCU 操作を実施することで、コールバックが CPU のキューに置かれ、今後メモリーを安全に削除できる状況になると実行されます。
RCU コールバックは、
rcu_nocbs および rcu_nocb_poll カーネルパラメーターを使用してオフロードできます。
- RCU コールバックを実行する候補から 1 つ以上の CPU を削除するには、
rcu_nocbsカーネルパラメーターで CPU のリストを指定します。次に例を示します。rcu_nocbs=1,4-6orrcu_nocbs=32 つ目の例では、CPU 3 が no-callback CPU であることをカーネルに指示します。これは、RCU コールバックが CPU 3 に固定されたrcuc/$CPUスレッドではなく、ハウスキーピング CPU に移動できるrcuo/$CPUスレッドで実行されることを意味し、CPU 3 は RCU コールバックジョブの実行から解放されます。RCU コールバックスレッドをハウスキーピング CPU に移動するには、tuna -t rcu* -c X -m コマンドを使用します。ここで、X は ハウスキーピング CPU を示します。たとえば、CPU 0 がハウスキーピング CPU のシステムでは、以下のコマンドを使用してすべての RCU コールバックスレッドを CPU 0 に移動できます。~]# tuna -t rcu* -c 0 -mこれは、CPU 0 以外のすべての CPU が RCU の動作に依存します。 - RCU オフロードスレッドは別の CPU の RCU コールバックを実行できますが、各 CPU は対応する RCU オフロードスレッド起動を処理する必要があります。各 CPU の RCU オフロードスレッドを起動する責任を軽減するには、
rcu_nocb_pollカーネルパラメーターを設定します。rcu_nocb_pollrcu_nocb_pollが設定されている場合、実行するコールバックがあるかどうかを確認するために、RCU オフロードスレッドがタイマーによって定期的に起動されます。
以下の 2 つのオプションに対する一般的なユースケースは以下のとおりです。
rcu_nocbs=cpulistを使用して、ユーザーがすべての RCU オフロードスレッドをハウスキーピング CPU に移動できるようにします。rcu_nocb_pollを設定すると、各 CPU の RCU オフロードスレッドを起動する責任が軽減されます。
この組み合わせにより、ユーザーのワークロードに特化した CPU への干渉が軽減されます。
リアルタイムでの RCU チューニングの詳細は、Avoiding RCU Stalls in the real-time kernel を参照してください。