우리는 Linux 6.10의 안정 버전이 출시된 지 며칠 후, 일련의 매우 흥미로운 변경 사항은 물론 장치 지원, 기능 등의 측면에서 큰 개선이 포함된 버전입니다.
이 글의 이유는 차기 예상되는 Linux 버전인 "Linux 6.11"에 관한 것이기 때문에 조만간 이 릴리스에 대해 이야기할 것입니다. 이 릴리스에는 제가 언급한 몇 가지 변경 사항이 발표되어 있습니다. 시간이 충분하다면 다른 게시물에서 이에 대해 다루고 싶습니다.
좋아, 이제 기사의 요점으로 넘어가겠습니다. Linus Torvalds의 발표에 대한 언급 Linux 6.11 커널에 포함하려는 의지에 대해 일부 메커니즘을 구현하는 패치 "sched_ext"(SCX).
이 메커니즘또는 eBPF를 사용하여 Linux 커널 내에서 CPU 스케줄러를 생성하기 위한 것입니다. 작동 방식을 요약하면 다음과 같습니다.
- eBPF 및 CPU 프로그래머: eBPF를 사용하면 CPU 스케줄러를 Linux 커널 내에서 동적으로 로드하고 실행할 수 있습니다. JIT(Just-In-Time) 컴파일은 eBPF 바이트코드를 실행을 위한 기계 명령어로 변환합니다.
- SCHED_EXT 수업: 이것은 커널 호출 우선순위가 클래스 사이에 있는 새로운 프로그래밍 클래스입니다. SCHED_IDLE 및 SCHED_NORMAL. 다음과 연결된 BPF 드라이버 SCHED_EXT 일반 스케줄러에 이미 연결된 작업에 영향을 주지 않고 실시간 실행보다 우선순위가 낮은 작업을 처리할 수 있습니다. SCHED_NORMAL.
- 운영 : BPF 드라이버는 CPU에서 실행되기를 기다리는 작업 대기열을 분석하고 CPU 코어가 해제될 때 할당할 작업을 선택합니다. 활성 BPF 드라이버가 없는 경우 SCHED_EXT, 작업은 스케줄러를 사용하여 처리됩니다. SCHED_NORMAL.
- 장점 : 메커니즘 sched_ext 다양한 프로그래밍 기술과 전략을 역동적인 방식으로 실험할 수 있습니다. 이를 통해 프로그래머의 기능적 프로토타입을 신속하게 생성하고 생산 환경에서 즉시 교체할 수 있습니다. 예를 들어, 애플리케이션의 특정 특성에 맞게 조정하고 시스템 상태 및 기타 요인에 따라 일정 전략을 변경할 수 있습니다.
언급 할 가치가 있습니다. "sched_ext"는 2022년에 커널 개발자가 고려하도록 처음 제안되었습니다., 이어서 6개의 패치 개정판이 출시되었습니다. 메인 커널에서는 지원되지 않지만, Ubuntu, Arch Linux, Fedora 및 NixOS와 같은 여러 배포판에서는 추가 패키지를 통해 "sched_ext" 설치를 제공합니다.. Canonical은 다음 구성요소를 포함하는 것을 고려하고 있습니다.sched_ext» Ubuntu 24.10에서 출시되었으며 Valve는 Steam Deck 통합을 위해 노력하고 있습니다. Meta에서는 다음을 기반으로 하는 프로그래머입니다.sched_ext»는 이미 프로덕션 인프라에서 사용되고 있습니다.
또한 현재 약 12명의 프로그래머가 기반을 두고 있다고 합니다. "sched_ext", 각각은 사용자 공간에 정의된 작업 스케줄링 논리를 가지며 BPF 프로그램을 사용하여 커널에 로드됩니다.
- scx_layered: 작업을 레이어로 나누는 하이브리드 스케줄러로, 각 레이어에는 자체 예약 전략이 있습니다. 보장된 CPU 리소스를 사용하여 특정 작업을 특정 레이어에 할당하거나 개별 애플리케이션의 우선 순위를 높일 수 있습니다. Meta에서 개발한 사용자 공간 로직은 Rust로 작성되었습니다.
- scx_rustland: CPU 집약적인 작업보다 대화형 작업에 우선순위를 두도록 최적화되었습니다. 예를 들어 표준 EEVDF 스케줄러에 비해 동시 커널 컴파일 중에 Terraria 게임의 FPS가 향상됩니다. Rust 논리를 사용하여 Canonical 직원이 개발했습니다.
- scx_lavd: LAVD(Latency-Criticality Aware Virtual Deadline) 알고리즘을 구현하여 지연 및 프로세스 진행 감소의 관련성을 고려하여 컴퓨터 게임 및 대화형 작업의 대기 시간을 줄입니다. Rust 논리를 사용하여 Igalia와 Valve가 개발했습니다.
- scx_rusty, scx_rlfifo, scx_mitosis: 로드에 따라 작업 그룹의 균형을 맞추고 간단한 FIFO 스케줄러를 구현하며 작업 그룹을 CPU 코어에 바인딩하는 스케줄러입니다. 모두 Rust 구성 요소를 사용합니다.
- scx_central, scx_Flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland: "sched_ext"의 다양한 기능을 보여주는 C 구성 요소를 사용하는 프로그래머의 예입니다.
마지막으로 Google은 BPF 프로그램을 사용하여 작업 스케줄러 결정에 영향을 미치기 위해 자체 프레임워크인 ghOSt를 사용하는 실험을 하고 있으며 ghOSt를 sched_ext로 마이그레이션하기 시작했다는 점을 덧붙일 가치가 있습니다. 또한 Google은 ChromeOS용 'sched_ext' 포트를 개발 중입니다.
출처 : https://lkml.org