#linux-kernel #interactive #workload #scheduler #bpf #tasks #context

app scx_bpfland

一个基于vruntime的sched_ext调度器,优先处理交互式工作负载。https://github.com/sched-ext/scx/tree/main

4个稳定版本

1.0.3 2024年8月21日
1.0.2 2024年8月9日
1.0.1 2024年7月15日
1.0.0 2024年7月14日

#92 in Unix API

Download history 219/week @ 2024-07-13 10/week @ 2024-07-20 84/week @ 2024-08-03 21/week @ 2024-08-10 130/week @ 2024-08-17

每月235次下载

GPL-2.0-only

59KB
1K SLoC

C 632 SLoC // 0.4% comments Rust 467 SLoC // 0.1% comments

scx_bpfland

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

概述

scx_bpfland:一个基于vruntime的sched_ext调度器,优先处理交互式工作负载。

该调度器由scx_rustland衍生而来,但它完全使用BPF实现,用户空间Rust部分最少,用于处理命令行选项、收集指标和输出调度统计信息。BPF部分负责所有的调度决策。

根据每秒钟自愿上下文切换的平均速率将任务分类为交互式或常规任务。超过特定自愿上下文切换阈值的任务被归类为交互式。交互式任务被优先放入高优先级队列,而常规任务被放入低优先级队列。在每个队列内,任务根据它们的加权运行时间排序:具有更高权重(优先级)或使用CPU时间更短(运行时间更小)的任务将被更早地调度,因为它们在队列中的位置更高。

此外,每个任务都有一个时间片预算。当任务被调度时,它会收到与其之前分配的时间片剩余未使用部分相当的时间片(应用最小阈值)。这为对延迟敏感的工作负载提供了更多机会在需要时超出其时间片,以便在没有被打断的情况下进行短时间的CPU活动(例如,实时音频编码/解码工作负载)。

典型用例

交互式工作负载,如游戏、直播、多媒体、实时音频编码/解码,特别是在这些工作负载与CPU密集型后台任务同时运行时。

在这种情况下,scx_bpfland确保交互式工作负载保持高水平响应。

生产就绪?

该调度器基于scx_rustland,实现了几乎相同的调度算法,经过一些修改和优化,完全在BPF中实现。

鉴于scx_rustland调度算法已经经过了广泛的测试,这个调度器可以被认为是生产就绪的。

依赖关系

~26–40MB
~667K SLoC