원문 보기: https://dawoum.duckdns.org/wiki/Linux_kernel/Extensible_Scheduler_Class
확장 가능한 스케줄러 클래스(Extensible Scheduler Class), 또는 sched-ext로 더 잘 알려진 것은 Berkeley Package Filter (BPF)에서 커널 스레드 스케줄러를 구현하고 그것들을 동적으로 로드하도록 활성화하는 리눅스 커널 기능입니다. 필수적으로 이것은 최종 사용자에게 다른 스케줄러를 갖기 위해 또 다른 커널을 빌드할 필요 없이 사용자-공간에서 스케줄러를 변경하도록 허용합니다.
이를 사용하기 위해, 오직 한 번 이 기능을 켜도록 커널 컴파일이 필요합니다. 이와 관련된 정보는 Linux kernel/Compiling linux kernel with cachyos patches to use scx-sched에서 찾을 수 있습니다.
Methods for starting and managing schedulers
먼저, 새로운 커널로 부팅합니다.
이제, 스케줄러를 설치해야 합니다. 데비안에서는 패키지로 제공하지 않기 때문에, 소스를 받아서 컴파일을 시도합니다:
- git clone --recurse-submodules --depth 1 https://github.com/sched-ext/scx
- cd scx
- dh_make --createorig -p scx-scheds_1.0.10
- dh_auto_configure --buildsystem=meson
- vi debian/changelog
- time dpkg-buildpackage -i -us -uc -b
아마도 컴파일이 잘 되지 않을 수 있습니다. 다음 패키지가 필요하고, 다른 것도 필요할 수 있습니다:
- bpftool (>= 7.6.0), libbpf-dev, jq
모두 설치한 후에, 다시 컴파일을 시도합니다:
- time dpkg-buildpackage -i -us -uc -b
패키지가 만들어질 때까지 반복합니다.
이제 설치합니다:
- cd ..
- sudo dpkg -i scx-scheds_1.0.10-1_amd64.deb
필요에 따라 아치 패키지 소스를 볼 필요가 있습니다:
Starting the Scheduler in the Terminal
아마도 모든 과정이 잘 되었다면, 서비스가 동작 중일 것입니다:
- sudo systemctl status scx_loader.service
이전에는 scx.service를 사용했지만, 지금은 더 이상 유효하지 않고 scx_loader 서비스를 사용합니다.
비록 서비스가 실행 중이라고 해도 동작하지 않을 수 있습니다. 예를 들어, 오류 메시지는 없지만, 출력 내용이 없으면, 아마도 제대로 동작하지 않는 것일 수 있습니다. 우선 확인해 보십시오:
- sudo systemctl status scx_loader.service
● scx_loader.service - DBUS on-demand loader of sched-ext schedulers
Loaded: loaded (/usr/lib/systemd/system/scx_loader.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-03-10 22:18:29 KST; 35min ago
Invocation: 7465ba675aaf47b781d5afce77145fb8
Main PID: 887241 (scx_loader)
Tasks: 30 (limit: 76836)
Memory: 33.1M (peak: 35M)
CPU: 163ms
CGroup: /system.slice/scx_loader.service
├─887241 /usr/bin/scx_loader
└─887269 scx_bpfland
Mar 10 22:18:29 dawoum scx_loader[887241]: [INFO]: starting scx_bpfland command
Mar 10 22:18:29 dawoum scx_loader[887269]: 13:18:29 [INFO] scx_bpfland 1.0.10-gd25836a-dirty x86_64-unknown-linux-gnu SMT on
Mar 10 22:18:29 dawoum scx_loader[887269]: 13:18:29 [INFO] scheduler flags: 0x6
Mar 10 22:18:30 dawoum scx_loader[887269]: 13:18:30 [INFO] primary CPU domain = 0xffffff
Mar 10 22:18:30 dawoum scx_loader[887269]: 13:18:30 [INFO] cpufreq performance level: max
Mar 10 22:18:30 dawoum scx_loader[887269]: 13:18:30 [INFO] SMT sibling CPUs: [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
Mar 10 22:18:30 dawoum scx_loader[887269]: 13:18:30 [INFO] L3 cache ID 0: sibling CPUs: [0, 12, 1, 13, 2, 14]
Mar 10 22:18:30 dawoum scx_loader[887269]: 13:18:30 [INFO] L3 cache ID 1: sibling CPUs: [10, 22, 11, 23, 9, 21]
Mar 10 22:18:30 dawoum scx_loader[887269]: 13:18:30 [INFO] L3 cache ID 2: sibling CPUs: [3, 15, 4, 16, 5, 17]
Mar 10 22:18:30 dawoum scx_loader[887269]: 13:18:30 [INFO] L3 cache ID 3: sibling CPUs: [6, 18, 7, 19, 8, 20]
위와 같이 비슷하게 출력되지 않을 때, 명령-줄에서 실행해 볼 필요가 있습니다:
- sudo bpfland
메시지를 확인해서 오류를 수정하십시오:
Configurations
이제 설정을 추가해야 합니다. 설정의 위치는 순서에 따라, 다음 두 곳에서 찾습니다:
- /etc/scx_loader/config.toml
- /etc/scx_loader.toml
디렉토리를 만들고, 파일에 내용을 추가합니다:
- sudo mkdir -p /etc/scx_loader
- sudo vi /etc/scx_loader/config.toml
default_sched = "scx_bpfland"
default_mode = "Auto"
[scheds.scx_bpfland]
auto_mode = []
gaming_mode = ["-m", "performance"]
lowlatency_mode = ["-s", "5000", "-S", "500", "-l", "5000", "-m", "performance"]
powersave_mode = ["-m", "powersave"]
[scheds.scx_rusty]
auto_mode = []
gaming_mode = []
lowlatency_mode = []
powersave_mode = []
[scheds.scx_lavd]
auto_mode = []
gaming_mode = ["--performance"]
lowlatency_mode = ["--performance"]
powersave_mode = ["--powersave"]
[scheds.scx_flash]
auto_mode = []
gaming_mode = []
lowlatency_mode = []
powersave_mode = []
[scheds.scx_p2dq]
auto_mode = []
gaming_mode = []
lowlatency_mode = ["-y"]
powersave_mode = []
[scheds.scx_tickless]
auto_mode = []
gaming_mode = ["-f 5000 -s 5000"]
lowlatency_mode = ["-f 5000 -s 1000"]
powersave_mode = ["-f 50 -p"]
필요에 따라 수정할 수 있습니다.
이제 서비스를 다시 시작하고 로그를 확인합니다:
- sudo systemctl restart scx_loader.service
- sudo systemctl status scx_loader.service
External Resources
- https://github.com/sched-ext/scx
- https://wiki.cachyos.org/configuration/sched-ext/
- https://github.com/sched-ext/scx/blob/main/rust/scx_loader/configuration.md
- https://blogs.igalia.com/changwoo/sched-ext-a-bpf-extensible-scheduler-class-part-1/