SCHED_EXT SCHEDULERS
====================

# Introduction

This directory contains the repo's schedulers.

Some of these schedulers are simply examples of different types of schedulers
that can be built using `sched_ext`. They can be loaded and used to schedule on
your system, but their primary purpose is to illustrate how various features of
`sched_ext` can be used.

Other schedulers are actually performant, production-ready schedulers. That is,
for the correct workload and with the correct tuning, they may be deployed in a
production environment with acceptable or possibly even improved performance.
Some of the examples could be improved to become production schedulers.

Please see the following `README` files for details on each of the various types
of schedulers:

- [`rust`](rust/README.md) describes all of the schedulers with `Rust`
  user space components.


# Note on C schedulers

This directory previously also held C schedulers for illustration purposes. These
schedulers are now found only in the Linux kernel repository in
[`tools/sched_ext`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/sched_ext).
Each C scheduler's purpose was to demonstrate a single technique for development,
often BPF-related. The C schedulers were kept synced between upstream and this
repository.

As the ecosystem has matured these schedulers have been superseded by those in the
`rust/` directory, many of which are production-ready. These schedulers better represent
modern `sched_ext` codebases and are a more appropriate starting point for newcomers.
The build system and surrouding crates ecosystem is also geared towards Rust schedulers.
As a result, the C schedulers are no longer mirrored here. They are available
from the kernel/tools/sched_ext, and also in the dedicated
[scx-c-examples](https://github.com/sched-ext/scx-c-examples) repository for
those who want to explore or experiment with C-based schedulers.
