리누스 토발즈가 8월 16일(현지 시간) 커널 7.2를 릴리스한 직후 7.3 머지 윈도우가 열렸습니다. 첫 rc는 8월 30일경, 최종 릴리스는 10월 말로 예상됩니다. 올해 LTS가 7.3이 될지 7.4가 될지도 이 사이클 결과에 달려 있습니다. 이번 사이클의 무게중심은 새 하드웨어 지원보다 지연 시간(latency) 쪽입니다. 스케줄링 지연을 90% 줄인 SMP 재작업, 락 점유 시간을 700ms에서 2ms 아래로 끌어내린 메모리 관리 수정, 그리고 sched_ext의 서브 스케줄러 완성이 핵심입니다.
IPI를 기다리는 동안에도 선점을 허용
바이트댄스(ByteDance) 엔지니어들이 커널 SMP 코드를 재작업해 IPI(Inter-Processor Interrupt) 완료를 기다리는 구간에서도 선점이 가능하도록 바꿨습니다. 문제는 x86_64에서 TLB 플러시가 IPI로 처리된다는 점에서 출발합니다. 프로세스 종료나 페이지 회수 과정에서 여러 CPU의 IPI 완료를 한꺼번에 기다려야 하고, 그동안 선점이 막혀 있으니 원격 CPU 수가 늘어날수록 스케줄링 지연이 급격히 커졌습니다.
해결책은 기다려야 할 CPU 목록을 태스크별 CPU 마스크로 들고 있게 만드는 것입니다. 대기에 필요한 정보가 태스크 로컬로 바뀌면서 대기 전에 선점을 다시 켤 수 있게 됐습니다. 실제 운영 중인 서버 플릿에서 측정한 고우선순위 태스크의 SMP 함수 호출 유발 지연은 약 17ms에서 약 1.5ms로 줄었습니다. DPDK처럼 데이터 플레인 지연에 민감한 워크로드에서 특히 문제가 됐던 동작입니다.
메모리 관리 최적화 두 건
이번 사이클의 mm 변경 중 눈에 띄는 것은 특정 상황에서 시스템을 수백 밀리초 멈춰 세우던 두 가지 병목입니다.
| 변경 | 제출 | 측정 결과 | 영향받는 환경 |
|---|---|---|---|
rmap_walk_ksm() 최적화 | ZTE | 락 점유 시간 최악 705ms → 최대 1.67ms, 평균 1.44ms | KSM 사용 중 수만 개의 VMA가 하나의 anon_vma를 공유하는 JVM·Go 런타임, MySQL·PostgreSQL |
zs_free() 락 경합 완화 | 샤오미 | 라즈베리파이 4B 최대 1.83배, 20코어 인텔 시스템 최대 1.4배 | zswap·zRAM으로 압축 메모리를 쓰는 안드로이드 기기와 서버 |
앞쪽은 KSM(Kernel Samepage Merging)으로 병합된 페이지의 역매핑을 순회하는 경로입니다. mprotect()나 madvise() 호출로 VMA가 잘게 쪼개진 프로세스에서 메모리 압박이 겹치면 애플리케이션이 수백 밀리초 동안 얼어붙는 증상이 나타났습니다. 뒤쪽은 압축 메모리 할당자인 zsmalloc의 해제 경로로, 스왑 압박이 큰 환경에서 바로 체감되는 개선입니다.
sched_ext 서브 스케줄러가 기능 완성
BPF 프로그램으로 스케줄러를 작성하는 sched_ext는 지난 1년 동안 서브 스케줄러 지원을 다듬어 왔습니다. 7.3에서 enqueue 경로 지원이 마무리되면서 이 작업이 기능적으로 완성됐습니다. 허태준(Tejun Heo)은 pull request에서 “루트 BPF 스케줄러가 cgroup 서브트리를 회수 가능한 CPU 할당과 함께 중첩된 서브 스케줄러에 넘길 수 있게 됐다”고 설명했습니다.
cgroup 계층에 여러 스케줄러 인스턴스를 붙일 수 있다는 뜻입니다. 같은 머신에서 성격이 다른 워크로드를 돌릴 때 애플리케이션 도메인마다 자기 특성에 맞춘 BPF 스케줄러를 따로 붙이는 구성이 가능해집니다.
아키텍처와 하드웨어
| 항목 | 내용 |
|---|---|
| 애플 실리콘 | M3 Pro/Max/Ultra의 초기 메인라인 부팅 지원. 아직 콘솔 단계까지입니다. |
| Rust | 커널 Rust 코드가 PowerPC를 공식 지원합니다. 7.2의 s390 지원에 이어 아키텍처가 하나 더 늘었습니다. |
| AMD | UALink 인프라와 CXL Type-2 가속기 지원이 들어왔습니다. Zen 6용 P-State 드라이버는 코어 단위 동적 EPP를 지원합니다. |
| 인텔 | CFI를 쓰는 구형 CPU를 위한 KCFI 최적화, 하이브리드 P/E 코어 시스템의 클러스터 로드 밸런싱 개선. |
| GPU | 퀄컴 MSM DRM 드라이버가 Adreno 704·722를 지원합니다. |
파일시스템과 보안
eCryptfs가 오래 묵은 문제들을 한꺼번에 정리했습니다. 하위 암호화 파일의 악의적으로 조작된 메타데이터, 그리고 커널과 유저 공간 사이 miscdev 통신에 대한 하드닝이 들어갔습니다. 일부 수정은 eCryptfs가 메인라인에 들어온 2006년 커밋(237fead61998)까지 거슬러 올라갑니다.
NTFS3는 보안 하드닝과 함께 ADS(Alternative Data Streams)를 지원하게 됐고, lockdown 모드가 레거시 I/O·메모리 핸들러를 열어둔 채로 두던 문제도 고쳐졌습니다. binfmt_misc는 BPF 훅으로 인터프리터를 골라줄 수 있게 되어, 실행 파일마다 다른 실행 환경을 투명하게 배정하는 구성이 가능해졌습니다.
반대로 빠지는 코드도 있습니다. 아래는 이번 사이클에서 제거되는 목록입니다.
- FreeVxFS와 EFS 파일시스템
- 구형 SGI 드라이버 (보안 문제)
- Moxa 시리얼 카드 등 레거시 시리얼 드라이버
정리
7.3은 화려한 신기능보다 지연 시간을 갉아먹던 구조적 문제를 손본 사이클입니다. 실시간성이 중요한 서버를 운영한다면 SMP 재작업만으로도 업그레이드 가치가 있고, KSM이나 zswap을 켜둔 환경이라면 mm 최적화 두 건의 효과가 바로 드러납니다. sched_ext로 커스텀 스케줄러를 실험 중이라면 서브 스케줄러 완성이 이번 사이클의 가장 큰 소식입니다.
rc1이 나오면 실제 코드로 확인할 수 있습니다. 최종 릴리스까지는 두 달가량 남았고, 그 사이 LTS 지정 여부도 정해질 예정입니다.
참고
- Phoronix — Linux 7.3 SMP Improvement To Help Reduce Latency, Improve Real-Time Performance
- Phoronix — Two Very Exciting Memory Management Optimizations Going Into Linux 7.3
- Phoronix — Sched_ext's Sub-Scheduler Support Now "Feature Complete" With Linux 7.3
- Phoronix — eCryptfs Sees Fixes For Potential Malicious Intent
- Phoronix — Features Coming For Linux 7.3
- kernel.org — 릴리스 현황
- 리눅스 커널 7.2 릴리스 — 캐시 인지 스케줄링 도입, DRM Fair 스케줄러는 막판 되돌림
- sched_ext 사용법