#linux-kernel #userspace #调度器 #bpf #用户 #用户定义 #空间

应用 scx_rusty

scx_rusty是一个多域、BPF / 用户空间混合调度器,用于sched_ext中,sched_ext是一种Linux内核特性,它允许在BPF中实现内核线程调度器并动态加载它们。https://github.com/sched-ext/scx/tree/main

12个版本 (4个稳定版)

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

#448 in Unix API

Download history 8/week @ 2024-05-04 2/week @ 2024-05-25 151/week @ 2024-06-01 21/week @ 2024-06-08 3/week @ 2024-06-15 248/week @ 2024-07-13 12/week @ 2024-07-20 84/week @ 2024-08-03 20/week @ 2024-08-10 139/week @ 2024-08-17

每月243次下载

GPL-2.0-only

135KB
3K SLoC

Rust 1.5K SLoC // 0.1% comments C 1K SLoC // 0.2% comments

scx_rusty

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

概述

一个多域、BPF / 用户空间混合调度器。调度器的BPF部分在每个域中执行简单的轮询,而用户空间部分(用Rust编写)计算每个域的负载因子,并通知BPF如何相应地进行任务负载均衡。

如何安装

作为Rust crate提供: cargo add scx_rusty

典型用例

Rusty设计得灵活,可以适应不同的架构和工作负载。可以通过调整各种负载均衡阈值(例如贪婪、频繁等),以及Rusty应该如何将系统划分为调度域,来实现任何特定系统或工作负载的最佳配置。

是否已准备好投入生产?

是的。如果调整得当,Rusty在各种CPU架构和工作负载中都应该具有高性能。Rusty默认为每个LLC创建一个单独的调度域,因此其默认配置可能也很有性能。请注意,然而scx_rusty尚未在不同NUMA节点之间区分LLC,因此在所有LLC共享相同套接字的多CCX机器上可能表现更好,而不是在多套接字机器上。

请注意,您可能会遇到不可行权重的难题,其中一个非常高的权重可能导致调度器错误地闲置核心,因为它认为这些核心对于处理单个任务的计算是必要的。这种情况也可能在CFS中出现,并且scx_rusty应该很快就会解决这个问题。

依赖项

~26–40MB
~673K SLoC