Chapter 27. Limiting SCHED_OTHER task migration
You can limit the tasks that SCHED_OTHER migrates to other CPUs using the sched_nr_migrate variable.
Prerequisites
- You have administrator privileges.
27.1. Task migration Copy linkLink copied to clipboard!
If a SCHED_OTHER task spawns a large number of other tasks, they will all run on the same CPU. The migration task or softirq will try to balance these tasks so they can run on idle CPUs.
The sched_nr_migrate option can be adjusted 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 softirq moves the tasks, it locks the run queue spinlock, thus disabling interrupts.
If there are a large number of tasks that need to be moved, it occurs while interrupts are disabled, so no timer events or wakeups will be allowed to happen simultaneously. This can cause severe latencies for real-time tasks when sched_nr_migrate is set to a large value.
27.2. Limiting SCHED_OTHER task migration using the sched_nr_migrate variable Copy linkLink copied to clipboard!
Increasing the sched_nr_migrate variable provides high performance from SCHED_OTHER threads that spawn many tasks at the expense of real-time latency.
For low real-time task latency at the expense of SCHED_OTHER task performance, the value must be lowered. The default value is 8.
Procedure
To adjust the value of the
sched_nr_migratevariable, echo the value directly to/proc/sys/kernel/sched_nr_migrate:echo 2 > /proc/sys/kernel/sched_nr_migrate
# echo 2 > /proc/sys/kernel/sched_nr_migrateCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
View the contents of
/proc/sys/kernel/sched_nr_migrate:cat > /proc/sys/kernel/sched_nr_migrate 2
# cat > /proc/sys/kernel/sched_nr_migrate 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow