3.11. sched_nr_migrate を使用した SCHED_OTHER タスク移行の制限。

SCHED_OTHER タスクが他の多数のタスクを起動すると、すべて同じ CPU 上で実行されます。移行タスクまたは softirq は、これらのタスクのバランスを調整し、アイドル状態の CPU 上で実行できるようにします。sched_nr_migrate オプションは、一度に移動するタスク数を指定するように設定できます。リアルタイムタスクの移行方法は異なります。ただし、softirq がタスクを移動すると、割り込みを無効にするために必要な実行キューのスピンロックがロックされます。移動が必要なタスクが多数ある場合は、割り込みが無効になっているときに発生するため、タイマーイベントやウェイクアップは同時に行われません。これにより、sched_nr_migrate が大きい値に設定されると、リアルタイムタスクに深刻なレイテンシーが生じることがあります。

手順3.4 変数の値の sched_nr_migrate 調整

  1. この sched_nr_migrate 変数を増やすと、リアルタイムのレイテンシーを犠牲にして、タスクが多数発生する SCHED_OTHER スレッドのパフォーマンスが向上します。SCHED_OTHER タスクパフォーマンスを犠牲にしてリアルタイムのタスクレイテンシーを低くするには、値を低くする必要があります。デフォルト値は 8 です。
  2. sched_nr_migrate 変数の値を調整するには、/proc/sys/kernel/sched_nr_migrate に直接値を echo してください。
    ~]# echo 2 > /proc/sys/kernel/sched_nr_migrate