Linux 커널 최신 동향 개요

Linux 커널 6.12(2024년 11월)와 6.13(2025년 1월)은 실시간 컴퓨팅, 스케줄링 혁신, 보안 강화, Rust 언어 통합 확대 등 개발자와 시스템 관리자 모두에게 중요한 변화를 담았다. 특히 20년 이상 준비해온 PREEMPT_RT 패치셋의 메인라인 통합은 Linux 역사의 이정표로 평가받는다.

Linux 6.12: PREEMPT_RT 드디어 메인라인 통합

실시간(Real-Time) 패치셋 PREEMPT_RT가 20년간의 외부 패치 상태를 벗어나 Linux 6.12에서 공식 메인라인에 통합되었다. 이는 산업용 제어 시스템, 오디오/비디오 처리, 로보틱스 등 실시간 응답이 필요한 분야에서 별도 패치 없이 공식 커널로 실시간 기능을 사용할 수 있음을 의미한다.

# PREEMPT_RT 활성화 커널 빌드
make menuconfig
# General Setup → Preemption Model → Fully Preemptible Kernel (Real-Time) 선택

# 현재 커널의 선점 모드 확인
uname -r
cat /boot/config-$(uname -r) | grep PREEMPT
# CONFIG_PREEMPT_RT=y 이면 실시간 커널

# 실시간 우선순위로 프로세스 실행
chrt -f 99 my-realtime-app  # SCHED_FIFO 정책, 우선순위 99

# 스레드별 스케줄링 정책 설정
chrt -p -f 50 $(pidof my-app)  # 실행 중인 프로세스에 적용

# 실시간 프로세스 모니터링
top -H -p $(pidof my-app)  # 스레드별 표시

sched_ext: BPF로 스케줄러 커스터마이징

Linux 6.12에서 추가된 sched_ext는 BPF(Berkeley Packet Filter) 프로그램으로 CPU 스케줄링 알고리즘을 사용자 공간에서 정의할 수 있게 한다. 커널을 재컴파일하지 않고도 특수 목적 스케줄러를 구현할 수 있어, 게이밍, 데이터 센터, ML 학습 등 워크로드에 최적화된 스케줄링이 가능하다.

/* BPF 기반 커스텀 스케줄러 예제 (scx_simple.bpf.c) */
#include <scx/common.bpf.h>

/* 스케줄러 초기화 */
s32 BPF_STRUCT_OPS(simple_init) {
    return 0;
}

/* 태스크 실행 가능 상태로 전환 시 호출 */
void BPF_STRUCT_OPS(simple_enqueue, struct task_struct *p, u64 enq_flags) {
    scx_bpf_dispatch(p, SCX_DSQ_GLOBAL, SCX_SLICE_DFL, enq_flags);
}

/* 디스패치 큐에서 태스크 선택 */
void BPF_STRUCT_OPS(simple_dispatch, s32 cpu, struct task_struct *prev) {
    scx_bpf_consume(SCX_DSQ_GLOBAL);
}

/* 스케줄러 등록 */
SCX_OPS_DEFINE(simple_ops,
    .enqueue = (void *)simple_enqueue,
    .dispatch = (void *)simple_dispatch,
    .init = (void *)simple_init,
    .name = "simple",
);
# scx 도구 설치 및 스케줄러 적용
cd /path/to/scx
make

# 게임 최적화 스케줄러 적용
sudo ./scx_lavd  # LAVD(Latency-aware Virtual Deadline) 스케줄러

# 데이터 센터 최적화 (SLA 인식)
sudo ./scx_bpfland

# 현재 sched_ext 상태 확인
cat /sys/kernel/sched_ext/state
cat /sys/kernel/sched_ext/root/ops  # 활성 스케줄러 이름

Linux 6.13: 성능과 보안의 균형

2025년 1월 출시된 Linux 6.13은 Lazy Preemption 모델 도입, 파일 시스템 최적화, ARM 보안 아키텍처 지원을 중심으로 한다.

Lazy Preemption 모델

6.13에 추가된 Lazy Preemption은 자발적 선점(Voluntary Preemption)과 완전 선점(Full Preemption) 사이의 새로운 옵션이다. Voluntary보다 선점 기회가 많지만 Full보다 오버헤드가 적어, 범용 서버 워크로드에 최적화된 성능을 제공한다.

# 런타임에 선점 모드 변경 (6.13+)
echo lazy > /sys/kernel/debug/sched/preempt

# 가능한 값: none, voluntary, lazy, full
cat /sys/kernel/debug/sched/preempt

# 부트 파라미터로 설정
# GRUB_CMDLINE_LINUX에 추가: preempt=lazy

파일 시스템 최적화 — tmpfs 20% 성능 향상

# tmpfs 큰 폴리오(folio) 읽기 성능 벤치마크
mount -t tmpfs -o size=4G tmpfs /mnt/tmpfs

# 대용량 파일 테스트
dd if=/dev/zero of=/mnt/tmpfs/testfile bs=1M count=2048

# 읽기 성능 측정 (6.13에서 20% 향상)
time dd if=/mnt/tmpfs/testfile of=/dev/null bs=1M

# Btrfs 성능 개선 확인 (락 경합 감소)
sudo btrfs filesystem show
sudo btrfs scrub start /mnt/btrfs && sudo btrfs scrub status /mnt/btrfs

Arm CCA (Confidential Compute Architecture) 지원

# Arm Realm에서 실행 중인지 확인
dmesg | grep -i realm

# Guarded Control Stack 상태 확인 (사용자 공간 스택 무결성)
dmesg | grep -i "guarded control stack"
cat /proc/cpuinfo | grep gcs

Rust 커널 통합 현황

Linux 6.12에서 시작된 Rust 언어의 커널 내 모듈화 지원이 6.13에서 더욱 확대되었다. 메모리 안전성이 보장된 Rust로 드라이버와 서브시스템을 작성할 수 있으며, 기존 C 코드와 완전한 상호운용이 가능하다.

// Rust로 작성하는 Linux 커널 모듈 예제
// (linux/samples/rust/rust_minimal.rs 참조)

use kernel::prelude::*;

module! {
    type: RustMinimal,
    name: "rust_minimal",
    author: "Rust for Linux Contributors",
    description: "Rust minimal sample",
    license: "GPL",
}

struct RustMinimal {
    numbers: Vec,
}

impl kernel::Module for RustMinimal {
    fn init(_name: &'static CStr, _module: &'static ThisModule) -> Result {
        pr_info!("Rust minimal sample (init)\n");
        
        let mut numbers = Vec::new();
        numbers.try_push(72)?;
        numbers.try_push(108)?;
        numbers.try_push(200)?;
        
        Ok(RustMinimal { numbers })
    }
}

impl Drop for RustMinimal {
    fn drop(&mut self) {
        pr_info!("My numbers are {:?}\n", self.numbers);
        pr_info!("Rust minimal sample (exit)\n");
    }
}
# Rust 커널 모듈 빌드 환경 설정
# 커널 소스 디렉토리에서
make LLVM=1 menuconfig
# General Setup → Rust Support 활성화

# Rust 툴체인 설치 (커널 빌드용)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup override set $(scripts/min-tool-version.sh rustc)
rustup component add rust-src
cargo install --locked bindgen-cli

# Rust 샘플 모듈 빌드
make LLVM=1 samples/rust/

# 모듈 로드
sudo insmod samples/rust/rust_minimal.ko
dmesg | tail -5
sudo rmmod rust_minimal

WSL2 개발자 팁 (2025 업데이트)

Windows 11의 WSL2는 꾸준히 Linux 커널을 업데이트하며 성능을 개선하고 있다. 최신 WSL2 커널은 Linux 6.x 기반으로, systemd 지원, GPU 패스스루, USB 장치 연결이 가능하다.

# WSL2 최신 커널로 업데이트
wsl --update

# 현재 WSL 커널 버전 확인
wsl --version

# WSL2 메모리 설정 최적화 (~/.wslconfig)
code $env:USERPROFILE\.wslconfig
# ~/.wslconfig
[wsl2]
memory=8GB           # 최대 메모리
processors=4         # 최대 CPU 수
swap=2GB             # 스왑 크기
localhostForwarding=true

# 네트워킹 미러링 모드 (Windows와 동일한 IP)
networkingMode=mirrored

# DNS 터널링
dnsTunneling=true

# 파이어월 설정
firewall=true
# WSL2에서 systemd 서비스 관리 (2022년부터 공식 지원)
sudo systemctl status nginx
sudo systemctl enable --now postgresql

# GPU 가속 (CUDA on WSL2)
nvidia-smi  # GPU 인식 확인

# USB 장치 연결 (usbipd-win 필요)
# Windows PowerShell에서:
usbipd list                    # 연결된 USB 목록
usbipd bind --busid 1-1        # 장치 공유 활성화
usbipd attach --wsl --busid 1-1 # WSL2에 연결

# WSL2 내에서 확인
lsusb