mirror of
https://github.com/JakeHillion/scx.git
synced 2024-12-02 05:47:12 +00:00
37 lines
1.8 KiB
Markdown
37 lines
1.8 KiB
Markdown
|
# scx_rusty
|
||
|
|
||
|
This is a single user-defined scheduler used within [sched_ext](https://github.com/sched-ext/scx/tree/main), which is a Linux kernel feature which enables implementing kernel thread schedulers in BPF and dynamically loading them. [Read more about sched_ext](https://github.com/sched-ext/scx/tree/main).
|
||
|
|
||
|
## Overview
|
||
|
|
||
|
A multi-domain, BPF / user space hybrid scheduler. The BPF portion of the
|
||
|
scheduler does a simple round robin in each domain, and the user space portion
|
||
|
(written in Rust) calculates the load factor of each domain, and informs BPF of
|
||
|
how tasks should be load balanced accordingly.
|
||
|
|
||
|
## How To Install
|
||
|
|
||
|
Available as a [Rust crate](https://crates.io/crates/scx_rusty): `cargo add scx_rusty`
|
||
|
|
||
|
## Typical Use Case
|
||
|
|
||
|
Rusty is designed to be flexible, and accommodate different architectures and
|
||
|
workloads. Various load balancing thresholds (e.g. greediness, frequenty, etc),
|
||
|
as well as how Rusty should partition the system into scheduling domains, can
|
||
|
be tuned to achieve the optimal configuration for any given system or workload.
|
||
|
|
||
|
## Production Ready?
|
||
|
|
||
|
Yes. If tuned correctly, rusty should be performant across various CPU
|
||
|
architectures and workloads. Rusty by default creates a separate scheduling
|
||
|
domain per-LLC, so its default configuration may be performant as well. Note
|
||
|
however that scx_rusty does not yet disambiguate between LLCs in different NUMA
|
||
|
nodes, so it may perform better on multi-CCX machines where all the LLCs share
|
||
|
the same socket, as opposed to multi-socket machines.
|
||
|
|
||
|
Note as well that you may run into an issue with infeasible weights, where a
|
||
|
task with a very high weight may cause the scheduler to incorrectly leave cores
|
||
|
idle because it thinks they're necessary to accommodate the compute for a
|
||
|
single task. This can also happen in CFS, and should soon be addressed for
|
||
|
scx_rusty.
|