1个不稳定版本
0.2.0 | 2023年4月25日 |
---|
#754 in Unix API
5KB
76 代码行,不包括注释
System76 Scheduler
Scheduling服务优化Linux的CPU调度程序,并自动分配进程优先级以提高桌面响应性。在AC状态下,将自动激活低延迟CPU调度,电池设置默认调度延迟。进程将定期扫描,并根据配置文件分配进程优先级。当与pop-shell结合使用时,前台进程及其子进程将获得更高的进程优先级。
这些更改使得应用程序和游戏的体验平滑性和性能得到显著提升。应用程序响应速度的提高在老式硬件的系统上最为明显,而游戏将受益于更高的帧率和更低的抖动。这是因为背景应用程序和服务在活动进程在CPU上使用时间最长后,将获得更少的剩余CPU预算。
安装
需要依赖项,如debian/control文件中定义的
- cargo & rustc
- clang
- just
- libclang-dev
- libpipewire-0.3-dev
- pkg-config
然后可以使用包含的justfile来构建和安装
just execsnoop=$(which execsnoop-bpfcc) build-release
sudo just sysconfdir=/usr/share install
DBus
- 接口:
com.system76.Scheduler
- 路径:
/com/system76/Scheduler
可以使用SetForegroundProcess(u32)
方法来更改活动前台进程。
调度器配置
配置文件存储在以下位置
- 系统:
/etc/system76-scheduler/config.kdl
- 发行版:
/usr/share/system76-scheduler/config.kdl
系统配置的存在将覆盖发行版配置。默认配置的文档可以在此处找到。
注意:如果已定义了 background
和 foreground
分配配置文件,则将启用前台进程管理。同样,如果定义了 pipewire
配置文件,则将启用 pipewire 进程监控。
进程优先级分配
除了 config.kdl
之外,额外的进程调度配置文件存储在
- 用户配置:
/etc/system76-scheduler/process-scheduler/
- 发行版:
/usr/share/system76-scheduler/process-scheduler/
这里提供了一个示例配置。它将以与主配置中的分配和异常节点相同的方式解析,并且配置文件可以继承同名之前的分配的值。
配置文件
assignments {
{{profile-name}} {{profile-properties}}
}
profile-name
可以参考您选择的任何名称。如果名称与之前的分配匹配,它将继承该分配的值,以及分配的任何其他配置文件属性。
profile-properties
可能包含以下任何一项:
-
优先级,定义为
nice=-20
至nice=19
-
以下之一的调度策略定义:
sched="batch"
sched="idle"
,sched="other"
sched=(fifo)1
至sched=(fifo)99
sched=(rr)1
至sched=(rr)99
实时调度策略分配一个介于 1 和 99 之间的优先级。较高的值具有更高的优先级。建议不要设置高于硬件中断的优先级(>49)
- 以下之一的 I/O 优先级定义:
io="idle"
io=(best-effort)0
至io=(best-effort)7
io=(realtime)0
至io=(realtime)7
尽力而为和实时类别具有 0 至 7 之间的优先级,其中 7 优先级最低,0 是最高优先级
分配
配置文件的每个子元素定义了要分配到配置文件的进程。
{{profile-name}} {{profile-properties}} {
"/match/by/cmdline" {{profile-properties}}
match-by-name {{profile-properties}}
* {{condition-properties}} {{profile-properties}}
}
- 以
/
开头的节点名称是通过命令行路径进行匹配 - 否则,节点名称是通过进程名称进行匹配
*
匹配所有进程,与额外的condition-properties
一起使用- 属性是 wild-match'd
- 属性可以以
!
开头以排除匹配条件的结果 cgroup="cgroup-path"
通过 cgroup 匹配进程parent="name"
通过父进程的进程名进行进程匹配
CPU调度延迟配置
默认
Linux内核对CFS的默认设置。在增加输入延迟的情况下,实现CPU密集型任务的高吞吐量。此设置对服务器和电池供电的笔记本电脑来说非常理想,因为低延迟的调度牺牲了一些能效以提高响应速度。
latency: 6ns
minimum_granularity: 0.75ms
wakeup_granularity: 1.0ms
bandwidth_size: 5us
响应式
略微减少CPU密集型任务的时间,为其他进程(尤其是等待和响应用户输入的进程)提供更多时间。这可以在一定程度上提高桌面响应速度,但会牺牲CPU密集型任务的吞吐量。
latency: 4ns
minimum_granularity: 0.4ms
wakeup_granularity: 0.5ms
bandwidth_size: 3us
许可证
根据Mozilla公共许可证2.0许可。此版权共享许可证的许可条件是提供受许可文件及其修改的源代码(在某些情况下,是GNU许可证之一)。必须保留版权和许可通知。贡献者提供专利权的明确许可。但是,使用受许可作品的大作品可以以不同的条款分发,且不包含大作品中添加的文件源代码。
贡献
您提交给作品中的任何有意贡献都应根据Mozilla公共许可证2.0(MPL-2.0)许可。必须在每个文件的顶部添加版权声明模板。
// Copyright {year} {person OR org} <{email}>
// SPDX-License-Identifier: MPL-2.0
lib.rs
:
启动execsnoop-bpfcc应用程序以监视进程执行。
依赖项
~3–4.5MB
~66K SLoC