18 releases (stable)
1.0.12 | May 10, 2025 |
---|---|
1.0.10 | Mar 6, 2025 |
1.0.8 | Dec 16, 2024 |
1.0.6 | Nov 6, 2024 |
0.0.1 | Dec 22, 2023 |
#597 in Text processing
156 downloads per month
29KB
413 lines
scx_rustland
This is a single user-defined scheduler used within sched_ext, which is a Linux kernel feature which enables implementing kernel thread schedulers in BPF and dynamically loading them. Read more about sched_ext.
Overview
scx_rustland is based on scx_rustland_core, a BPF component that abstracts the low-level sched_ext functionalities. The actual scheduling policy is entirely implemented in user space and it is written in Rust.
How To Install
Available as a Rust crate: cargo add scx_rustland
Typical Use Case
scx_rustland is designed to prioritize interactive workloads over background CPU-intensive workloads. For this reason the typical use case of this scheduler involves low-latency interactive applications, such as gaming, video conferencing and live streaming.
scx_rustland is also designed to be an "easy to read" template that can be used by any developer to quickly experiment more complex scheduling policies fully implemented in Rust.
Production Ready?
For performance-critical production scenarios, other schedulers are likely to exhibit better performance, as offloading all scheduling decisions to user-space comes with a certain cost (even if it's minimal).
However, a scheduler entirely implemented in user-space holds the potential for seamless integration with sophisticated libraries, tracing tools, external services (e.g., AI), etc.
Hence, there might be situations where the benefits outweigh the overhead, justifying the use of this scheduler in a production environment.
Demo
The key takeaway of this demo is to demonstrate that , despite the overhead of running a scheduler in user-space, we can still obtain interesting results and, in this particular case, even outperform the default Linux scheduler (EEVDF) in terms of application responsiveness (fps), while a CPU intensive workload (parallel kernel build) is running in the background.
Dependencies
~54MB
~666K SLoC