scx-scheds包 是 scheds-ext 的程序实现,scheds-ext (Scheduler Extensions)是 Linux 的一个可拓展调度器框架,允许在不修改内核代码的情况下通过 BPF(Berkeley Packet Filter)或 eBPF 来实现自定义调度策略,具有少量的性能提升效果。
安装
需要先检查内核是否支持 bpf,使用 root 权限执行指令:
# zcat /proc/config.gz | grep -i BPF
通常情况下会输出这些内容:
# zcat /proc/config.gz | grep -i BPF
CONFIG_BPF=y CONFIG_HAVE_EBPF_JIT=y CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y .....
如果得到如上结果,代表内核支持 BPF。 安装 scx-scheds包 与 bpf包。
部署
scx-scheds 安装后会提供两个 systemd 服务 scx_loader.service
和 scx.service
:scx.service
是 scx 调度程序,scx_loader.service
则是通过 D-Bus 来实现 scheds-ext 框架加载器和管理器的实用程序。
scx.service
,推荐使用 scx_loader.service
,且不要同时运行,否则它们不会执行任何东西。启用 scx_loader 服务。
scx-scheds包 在安装后会生成一个默认配置文件位于 /etc/default/scx
,用于 scx.service
。
scx_loader.service
不会使用 /etc/default/scx
配置文件。配置 scx 服务
在 scx.service
中分为两个部分: SCX_SCHEDULER
和 SCX_FLAGS
。
/etc/default/scx
# List of scx_schedulers: scx_bpfland scx_central scx_flash scx_lavd scx_layered scx_nest scx_qmap scx_rlfifo scx_rustland scx_rusty scx_simple scx_userland scx_p2dq scx_tickless SCX_SCHEDULER=scx_bpfland # Set custom flags for each scheduler, below is an example of how to use #SCX_FLAGS='-p -m performance'
SCX_SCHEDULER
为 scx 调度器,总共 14 个调度器,主要调度器有 4 个:scx_bpfland
、scx_rusty
、scx_flash
和 scx_lavd
。
SCX_FLAGS
是调度器的启动参数,例如:
SCX_FLAGS='-p -m performance'
-p
参数表示启用每颗CPU的任务优先级划分。-m
表示使用模式 performance 代表 gaming 或 lowlatency(低延迟)。
适用环境:scx_rustland
旨在优先处理交互式工作负载,而不是后台 CPU 密集型工作负载,如游戏,实时直播和视频会议等,但不适用于生产环境;scx_lavd
使用了 LAVD (延迟关键性感知虚拟截止时间)调度算法,旨在提高 Linux 在游戏上的性能提升,虽然仍在开发,但已经能用于生产环境;scx_bpfland
是 scx_rustland
的改进版本,完全能用于平常使用和生产环境;scx_rusty
为一个多域、BPF/用户空间混合调度器,可以适应不同架构和工作负载,可以投入生产环境,但需要调整。
配置 scx_loader 服务
scx_loader 的配置文件有两个:/etc/scx_loader.toml
和 /etc/scx_loader/config.toml
。
文件结构为:
/etc/scx_loader/config.toml
default_sched = "scx_bpfland" default_mode = "Auto" [scheds.scx_bpfland] auto_mode = ["-m","performance"]
default_sched
意思是默认使用的调度器。scx
和 scx_loader
的默认调度器都是 scx_bpfland
,如果字段为空则什么都不启用。
default_mode
指默认启动模式,主要参数有: "Auto"
、"LowLatency"
、"PowerSave"
、"Gaming"
和 "Server"
。如果没有参数则为默认模式,即 "Auto"
。
[scheds.scx_name]
指对调度器的自定义标志,把 scx_name
修改为实际的调度程序。参数标志有: auto_mode
、gaming_mode
、lowlatency_mode
、powersave_mode
和 server_mode
;每个字段是一个字符串且每个字符串表示一个参数标志。如果没有参数标志则使用默认。
server_mode
仅 scx_bpfland
可用参考样例:
/etc/scx_loader.toml
default_sched = "scx_bpfland" default_mode = "LowLatency" [scheds.scx_bpfland] auto_mode = [] gaming_mode = ["-m", "performance"] lowlatency_mode = ["-k", "-s", "5000", "-l", "5000"] powersave_mode = ["-m", "powersave"]
default_sched
与 default_mode
项,因其它项具有默认值。参数标签
scx_bpfland
- Gaming Mode :
-m performance
- Low Latency Mode :
-s 5000 -S 500 -l 5000
- PowerSave Mode :
-m powersave
scx_rusty
没有自定义参数标志,使用默认参数标志。
scx_lavd
- Gaming Mode:
--performance
- Low Latency Mode:
--performance
- AutoPower Mode:
--autopower
- PowerSave Mode:
--powersave
scx_flash
没有自定义参数标签,使用默认参数标签。
启动和检查
通过 systemd 启动后,使用 root 权限进行检查。通过命令检查是否启用以及查看调度器:
# cat /sys/kernel/sched_ext/state /sys/kernel/sched_ext/*/ops 2>/dev/null
回退模式
如果配置文件中未定义特定参数标志, scx_loader
会自动使用默认的参数标志。