Tweak Kernel’s task Scheduler to improve performance on Android [Part 2]

welcome back to one more kernel task Scheduler tweaking guide for Android. In the previous article, we covered some fundamental task Scheduler configuration options, which can be manually tuned to boost performance on any type of Android device. In situation you haven’t checked out that article already, we strongly suggest doing so before proceeding, as it includes some beneficial info for much better comprehending exactly how the task Scheduler really works as well as exactly how to modify Kernel’s task Scheduler.

Tweak Kernel’s task Scheduler

Apart from the fundamental parameters discussed in the previous article, Linux task Scheduler implements some special features that try to enhance its fair distribution of processing power. These features do not create the exact same results on all systems as well as use-cases, so they can be enabled or disabled at runtime. They are offered with the kernel debugfs. Not all kernels pack support for tweaking scheduler debugfs features though. You can discover if your kernel supports altering these features by entering the complying with command inside a terminal app (as superuser):

cat /sys/kernel/debug/sched_features
If you get an output like the following, then your kernel supports altering debug features at runtime:

If you get a “No such data or directory” error output, you can try to install the kernel debugfs, in situation it is offered however not mounted at boot:

mount -t debugfs none /sys/kernel/debug
If this command does not create an error, you can try passing the very first command again.

Toggling A Scheduler Debug Feature

To allow a scheduler debug feature, you just requirement to compose its name inside the sched_features file. For example:

echo GENTLE_FAIR_SLEEPERS > /sys/kernel/debug/sched_features
To disable a feature, you must likewise compose its name inside the exact same file, however with a “NO_” in front. For example:

echo NO_GENTLE_FAIR_SLEEPERS > /sys/kernel/debug/sched_features

Don’t Miss
Android RAM administration ideas as well as Tricks

Most typical Scheduler Debug Features

It is not guaranteed that a certain kernel will support all task scheduler features discussed below. support for features varies between kernel versions as well as between gadget implementations. All features supported are those contained in the output of command ‘cat /sys/kernel/debug/sched_features’. features that begin with a “NO_” are those supported however currently disabled.


This function tries to minimize run time of sleepers (processes that tend to sleep for a long time). As a result, more runtime is distributed to active tasks. Some individuals report that disabling this function may enhance responsiveness on low-end devices.


Put a task that wakes up on the exact same CPU as the task that woke it. This assumes that the new task will work on the exact same data in memory as the previous one. arranging it on the exact same CPU will enhance cache locality(read below for more info about cache locality).


We requirement some deeper task arranging understanding to comprehend this feature: On Linux, there are different task arranging priorities. A task’s arranging concern defines exactly how important that task is as well as exactly how much resources will get from the scheduler. a lot of tasks run utilizing SCHED_OTHER (SCHED_NORMAL on newer kernels) priority. other priorities are SCHED_BATCH, SCHED_RR, SCHED_FIFO as well as SCHED_DEADLINE. Last three of these priorities are real-time priorities, created for tasks that requirement to run as quick as possible as well as as soon as they are created.

Task Scheduler assigns each CPU two special parameters: rt_runtime as well as rt_period. Rt_period is the arranging period that is equivalent to 100% CPU bandwidth. Rt_runtime is the time in which each CPU runs only real-time tasks. All other tasks run for [rt_period – rt_runtime] time. Typically, the kernel task Scheduler provides 95% of a CPU’s time to real-time tasks as well as 5% to all others.

RT_RUNTIME_SHARE enables a CPU to run a real-time task as much as 100% of time, by borrowing rt_runtime from other CPUs. CPUs that lend rt_runtime can then run non-realtime tasks for more time. Some custom kernel designers disable this function by default, as it can render a CPU not able to service non-realtime tasks strictly arranged on it as well as decrease performance.


Generally on Linux, when a task wakes up, it preempts (=takes the location of) the task that was running before on the CPU (wakeup preemption). NEXT_BUDDY handles the situation when the task that wakes up does not cause preemption. When NEXT_BUDDY is enabled, the task that just woke up will run on the next arranging event. This function likewise enhances cache locality.

Must Read
Hackbench – discover finest Performing Kernel for Android



Leave a Reply

Your email address will not be published.