mirror of
https://github.com/sched-ext/scx.git
synced 2024-11-25 04:00:24 +00:00
5a44329d45
Overview ======== This scheduler is derived from scx_rustland, but it is fully implemented in BFP with minimal user-space Rust part to process command line options, collect metrics and logs out scheduling statistics. Unlike scx_rustland, all scheduling decisions are made by the BPF component. Motivation ========== The primary goal of this scheduler is to act as a performance baseline for comparison with scx_rustland, allowing for a better assessment of the overhead caused by kernel/user-space interactions. It can also be used to deploy prototypes initially tested in the scx_rustland scheduler. In fact, this scheduler is expected to outperform scx_rustland, due to the elimitation of the kernel/user-space overhead. Scheduling policy ================= scx_bpfland is a vruntime-based sched_ext scheduler that prioritizes interactive workloads. Its scheduling policy closely mirrors scx_rustland, but it has been re-implemented in BPF with some small adjustments. Tasks are categorized as either interactive or regular based on their average rate of voluntary context switches per second: tasks that exceed a specific voluntary context switch threshold are classified as interactive. Interactive tasks are prioritized in a higher-priority DSQ, while regular tasks are placed in a lower-priority DSQ. Within each queue, tasks are sorted based on their weighted runtime, using the built-in scx vtime ordering capabilities (scx_bpf_dispatch_vtime()). Moreover, each task gets a time slice budget. When a task is dispatched, it receives a time slice equivalent to the remaining unused portion of its previously allocated time slice (with a minimum threshold applied). This gives latency-sensitive workloads more chances to exceed their time slice when needed to perform short bursts of CPU activity without being interrupted (i.e., real-time audio encoding / decoding workloads). Results ======= According to the initial test results, using the same benchmark "playing a videogame while recompiling the kernel", this scheduler seems to provide a +5% improvement in the frames-per-second (fps) compared to scx_rustland, with video games such as Cyberpunk 2077, Counter-Strike 2 and Baldur's Gate 3. Initial test results indicate that this scheduler offers around a +5% improvement in frames-per-second (fps) compared to scx_rustland when using the benchmark "playing a video game while recompiling the kernel". This improvement was observed in games such as Cyberpunk 2077, Counter-Strike 2, and Baldur's Gate 3. Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
26 lines
786 B
TOML
26 lines
786 B
TOML
[package]
|
|
name = "scx_bpfland"
|
|
version = "0.0.1"
|
|
authors = ["Andrea Righi <righi.andrea@gmail.com>", "Canonical"]
|
|
edition = "2021"
|
|
description = "A vruntime-based sched_ext scheduler that prioritizes interactive workloads. https://github.com/sched-ext/scx/tree/main"
|
|
license = "GPL-2.0-only"
|
|
|
|
[dependencies]
|
|
anyhow = "1.0.65"
|
|
ctrlc = { version = "3.1", features = ["termination"] }
|
|
clap = { version = "4.1", features = ["derive", "env", "unicode", "wrap_help"] }
|
|
libbpf-rs = "0.23"
|
|
log = "0.4.17"
|
|
scx_utils = { path = "../../../rust/scx_utils", version = "0.8.1" }
|
|
simplelog = "0.12.0"
|
|
rlimit = "0.10.1"
|
|
metrics = "0.23.0"
|
|
metrics-exporter-prometheus = "0.15.0"
|
|
|
|
[build-dependencies]
|
|
scx_utils = { path = "../../../rust/scx_utils", version = "0.8.1" }
|
|
|
|
[features]
|
|
enable_backtrace = []
|