Significant Performance & Perf-Per-Watt Gains Coming For Intel CPUs On Linux Schedutil
Sadly not making it for the just-closed Linux 5.4 merge window but hopefully something we could see in Linux 5.5 is recent patches on "frequency invariance" in optimizing the Schedutil frequency scaling governor that will really benefit Intel CPUs and improve their performance by double digits.
In September there were revised patches from Giovanni Gherdovich based on work proposed earlier by Peter Zijlstra around frequency invariance with the x86 scheduler code to correct some behavior in the code that's surprisingly lasted this long. "For example; suppose a CPU has two frequencies: 500 and 1000 Mhz. When running a task that would consume 1/3rd of a CPU at 1000 MHz, it would appear to consume 2/3rd (or 66.6%) when running at 500 MHz, giving the false impression this CPU is almost at capacity, even though it can go faster. In a nutshell, without frequency scale-invariance tasks look larger just because the CPU is running slower."
Correcting this behavior improves the Schedutil governor in particular that makes use of the kernel's scheduler utilization data for deciding about the CPU performance/power state changes. The patches have been found to provide better performance and performance-per-Watt especially with lightly-loaded systems.
Shell intensive scripts saw performance improvements in the range of 10~40% while other workloads were commonly up to 10%. The power efficiency also improves as a result of this work.
Hopefully these patches will make it to mainline soon (Linux 5.5 at the earliest). Improvements are also still expected for addressing the MSRs of other select generations of Intel CPUs (Xeon Scalable not covered yet). Fortunately, no regressions have been uncovered yet.
This is great to see as well with Schedutil generally performing worse than P-State in our own tests. Meanwhile, kernel developers are hoping for a future where Schedutil could potentially replace the other existing frequency scaling governors.
And, yes, as time allows I'll be benchmarking these patches with more extensive numbers.
In September there were revised patches from Giovanni Gherdovich based on work proposed earlier by Peter Zijlstra around frequency invariance with the x86 scheduler code to correct some behavior in the code that's surprisingly lasted this long. "For example; suppose a CPU has two frequencies: 500 and 1000 Mhz. When running a task that would consume 1/3rd of a CPU at 1000 MHz, it would appear to consume 2/3rd (or 66.6%) when running at 500 MHz, giving the false impression this CPU is almost at capacity, even though it can go faster. In a nutshell, without frequency scale-invariance tasks look larger just because the CPU is running slower."
Correcting this behavior improves the Schedutil governor in particular that makes use of the kernel's scheduler utilization data for deciding about the CPU performance/power state changes. The patches have been found to provide better performance and performance-per-Watt especially with lightly-loaded systems.
Shell intensive scripts saw performance improvements in the range of 10~40% while other workloads were commonly up to 10%. The power efficiency also improves as a result of this work.
Hopefully these patches will make it to mainline soon (Linux 5.5 at the earliest). Improvements are also still expected for addressing the MSRs of other select generations of Intel CPUs (Xeon Scalable not covered yet). Fortunately, no regressions have been uncovered yet.
This is great to see as well with Schedutil generally performing worse than P-State in our own tests. Meanwhile, kernel developers are hoping for a future where Schedutil could potentially replace the other existing frequency scaling governors.
And, yes, as time allows I'll be benchmarking these patches with more extensive numbers.
13 Comments