3.11. Using sched_nr_migrate to Limit SCHED_OTHER Task Migration.
SCHED_OTHERtask spawns a large number of other tasks, they will all run on the same CPU. The migration task or
softirqwill try to balance these tasks so they can run on idle CPUs. The
sched_nr_migrateoption can be set to specify the number of tasks that will move at a time. Because real-time tasks have a different way to migrate, they are not directly affected by this, however when
softirqmoves the tasks it locks the run queue spinlock that is needed to disable interrupts. If there are a large number of tasks that need to be moved, it will occur while interrupts are disabled, so no timer events or wakeups will happen simultaneously. This can cause severe latencies for real-time tasks when the
sched_nr_migrateis set to a large value.
Procedure 3.4. Adjusting the Value of the
- Increasing the
sched_nr_migratevariable gives high performance from
SCHED_OTHERthreads that spawn lots of tasks, at the expense of real-time latencies. For low real-time task latency at the expense of
SCHED_OTHERtask performance, the value must be lowered. The default value is 8.
- To adjust the value of the
sched_nr_migratevariable, you can
echothe value directly to
echo 2 > /proc/sys/kernel/sched_nr_migrate