第26章 RCU コールバックを使用した CPU パフォーマンスの改善

Read-Copy-Update (RCU) は、カーネル内でスレッドを相互に排他的にするロックレスのメカニズムです。RCU 操作を実施することで、コールバックが CPU のキューに置かれ、今後メモリーを安全に削除できる状況になると実行されます。

RCU コールバックを使用して CPU のパフォーマンスを改善するには、以下の操作を行います。

  • CPU を、CPU コールバックの実行の候補から除外する。
  • すべての RCU コールバックを処理する CPU を割り当てる。この CPU は、ハウスキーピング CPU と呼ばれます。
  • CPU を、RCU オフロードスレッド起動の処理から除外する。

この組み合わせにより、ユーザーのワークロードに特化した CPU への干渉が軽減されます。

前提条件

  • 管理者権限がある。
  • tuna がインストールされている。

26.1. RCU コールバックのオフロード

rcu_nocbs および rcu_nocb_poll カーネルパラメーターを使用して、RCU コールバックをオフロードできます。

手順

  • RCU コールバックを実行する候補から 1 つ以上の CPU を除外するには、rcu_nocbs カーネルパラメーターで CPU のリストを指定します。以下に例を示します。

    rcu_nocbs=1,4-6

    または、以下を実行します。

    rcu_nocbs=3

    2 つ目の例では、CPU 3 が no-callback CPU であることをカーネルに指示します。つまり、RCU コールバックは、CPU 3 に固定された rcuc/$CPU スレッドではなく、rcuo/$CPU スレッドで実行されます。このスレッドをハウスキーピング CPU に移動すると、CPU 3 に RCU コールバックジョブが割り当てられなくなります。