跳转到内容
来自 Arch Linux 中文维基

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-schedsbpf

部署

scx-scheds 安装后会提供两个 systemd 服务 scx_loader.servicescx.servicescx.service 是 scx 调度程序,scx_loader.service 则是通过 D-Bus 来实现 scheds-ext 框架加载器和管理器的实用程序。

警告:现在不再推荐使用 scx.service,推荐使用 scx_loader.service ,且不要同时运行,否则它们不会执行任何东西。
警告:在使用 scheds-ext 框架的任何一个调度器时强烈建议禁用停止使用 ananicy-cpp-gitAUR 等相关的包,因为 anaicy-cpp-gitAUR 等相关的包会干扰系统优先级导致 scheds-ext watchdog 超时,使调度程序被“杀死”。

启用 scx_loader 服务。

scx-scheds 在安装后会生成一个默认配置文件位于 /etc/default/scx ,用于 scx.service

注意:scx_loader.service 不会使用 /etc/default/scx 配置文件。

配置 scx服务

scx.service 中分为两个部分: SCX_SCHEDULERSCX_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_bpflandscx_rustyscx_flashscx_lavd

SCX_FLAGS 是调度器的启动参数,例如:

SCX_FLAGS='-p -m performance'

-p 参数表示 启用每颗CPU的任务优先级划分-m 表示使用模式, performance 代表 gaming 或 lowlatency (低延迟)。

配置 scx_loader服务

注意: 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 意思是默认使用的调度器,scxscx_loader 的默认调度器都是 scx_bpfland ,如果字段为空则什么都不启用。 default_mode 指默认启动模式,主要参数有: "Auto""LowLatency""PowerSave""Gaming""Server" 。如果没有参数则为默认模式,即 "Auto"[scheds.scx_name] 指对调度器的自定义标志,把 scx_name 修改为实际的调度程序。参数标志有: auto_mode , gaming_mode , lowlatency_mode , powersave_modeserver_mode ;每个字段是一个字符串且每个字符串表示一个参数标志。如果没有参数标志则使用默认。

参考样本:

/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"]

参数标签

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 会自动使用默认的参数标志。

参见