#linux-kernel #userspace #scheduler #layer #scheduling #bpf #cpu

app scx_layered

scx_layered 是一个高度可配置的多层 BPF / 用户空间混合调度器,用于 sched_ext,这是一个 Linux 内核功能,允许在 BPF 中实现内核线程调度器并动态加载它们。https://github.com/sched-ext/scx/tree/main

13 个版本 (4 个稳定版本)

1.0.3 2024 年 8 月 21 日
1.0.2 2024 年 8 月 9 日
1.0.1 2024 年 7 月 15 日
0.0.9 2024 年 6 月 3 日
0.0.1 2023 年 11 月 30 日

#229Unix API

Download history 15/week @ 2024-05-03 2/week @ 2024-05-24 135/week @ 2024-05-31 22/week @ 2024-06-07 3/week @ 2024-06-14 232/week @ 2024-07-12 16/week @ 2024-07-19 99/week @ 2024-08-09 90/week @ 2024-08-16

每月 189 次下载

GPL-2.0-only

140KB
3.5K SLoC

Rust 2K SLoC // 0.0% comments C 1.5K SLoC // 0.1% comments

scx_layered

这是一个用于 sched_ext 的单一用户定义调度器,sched_ext 是一个 Linux 内核功能,允许在 BPF 中实现内核线程调度器并动态加载它们。[了解更多关于 sched_ext](https://github.com/sched-ext/scx/tree/main)。

概述

一个高度可配置的多层 BPF / 用户空间混合调度器。

scx_layered 允许用户将任务分类到多个层,并对这些层应用不同的调度策略。例如,可以创建一个包含所有属于 user.slice cgroup 切片的所有任务的层,并指定一个策略,确保该层在系统的一些 CPU 上至少有 80% 的 CPU 利用率。

如何安装

作为 Rust 包 提供:cargo add scx_layered

典型用例

scx_layered 设计为高度可定制,可针对特定应用程序进行优化。例如,如果您有一个需要优先访问所有但 1 个物理核心以确保可接受的 p99 延迟的高优先级服务,您可以指定该服务将获得对所有但 1 个核心的优先访问。如果该服务最终没有利用所有这些核心,它们可以由其他层使用,直到需要时。

是否已准备好投入生产?

是的。如果调整得当,scx_layered 应该在各种 CPU 架构和工作负载上都有良好的性能。

话虽如此,您可能会遇到不可行权重的问题,其中具有非常高的权重的任务可能会导致调度器错误地让核心闲置,因为它认为这些核心对于单个任务的计算是必要的。在CFS中也可能发生这种情况,并且应该很快会为scx_layered解决。

依赖项

~25–38MB
~625K SLoC