mirror of
https://github.com/sched-ext/scx.git
synced 2024-12-01 23:07:11 +00:00
472ab945b8
scx_lavd: core compaction for low power consumption When system-wide CPU utilization is low, it is very likely all the CPUs are running with very low utilization. That means all CPUs run with low clock frequency thanks to dynamic frequency scaling and very frequently go in and out from/to C-state. That results in low performance (i.e., low clock frequency) and high power consumption (i.e., frequent P-/C-state transition). The idea of *core compaction* is using less number of CPUs when system-wide CPU utilization is low. The chosen cores (called "active cores") will run in higher utilization and higher clock frequency, and the rest of the cores (called "idle cores") will be in a C-state for a much longer duration. Thus, the core compaction can achieve higher performance with lower power consumption. One potential problem of core compaction is latency spikes when all the active cores are overloaded. A few techniques are incorporated to solve this problem. 1) Limit the active CPU core's utilization below a certain limit (say 50%). 2) Do not use the core compaction when the system-wide utilization is moderate (say 50%). 3) Do not enforce the core compaction for kernel and pinned user-space tasks since they are manually optimized for performance. In my experiments, under a wide range of system-wide CPU utilization (5%—80%), the core compaction reduces 7-30% power consumption without sacrificing average and 99p tail latency. Signed-off-by: Changwoo Min <changwoo@igalia.com> |
||
---|---|---|
.. | ||
scx_lavd | ||
scx_layered | ||
scx_rlfifo | ||
scx_rustland | ||
scx_rusty | ||
meson.build | ||
README.md |
RUST SCHEDULERS
Introduction
This directory contains schedulers with user space rust components.
The README in each scheduler directory provides some background and describes the types of workloads or scenarios they're designed to accommodate. For more details on any of these schedulers, please see the header comment in their main.rs or *.bpf.c files.