이 트랙은 “코드는 빠른데 프로세스가 느린 이유"를 운영환경에서 찾고 고칩니다. µs 단위에서는 context switch, syscall, 스케줄링 정책, 코어 배치가 지연시간의 바닥을 결정합니다.
이 트랙이 책임지는 범위
애플리케이션이 커널·스케줄러와 맞닿는 지점에서 발생하는 비용을 다룹니다. 다음 다섯 가지가 그 접점입니다.
- context switch 비용과 회피 전략(스레드/코어 배치)
- syscall 비용과 경로 단축(가능한 범위의 사용자 공간 설계)
- CPU pinning/affinity 전략, NUMA 고려
- realtime scheduling의 개념과 적용 시 고려사항
- 타이밍/클럭/시간 측정 이슈(정확한 시간 기반 검증)
이 트랙이 다루지 않는 것 (경계)
이 트랙은 커널이 제공하는 설정·API를 어떻게 쓸지까지만 다루고, 커널 자체를 고치거나 다른 트랙의 범위와 겹치는 하드/소프트 최적화는 넘깁니다.
- 커널/스케줄러 구현을 직접 수정하는 수준의 튜닝 (→ 필요 시 별도 심화)
- C++ 언어/컴파일러/데이터 구조 자체의 최적화 상세 (→ 각 트랙)
- CPU 전력 관리(C-state/P-state, cpuidle/cpufreq governor)와 tickless 커널(NOHZ_FULL)·RCU 콜백 오프로드 튜닝 — 이 트랙의 스케줄링·affinity 챕터와 맞닿아 있지만, 커널 부팅 파라미터·전력 정책 자체의 심화 튜닝은 이 커리큘럼에 포함되지 않습니다.
sched(7)공식 문서를 참고하세요.
흔히 “코어를 고정(affinity)하면 항상 더 빨라진다"고 생각하기 쉽지만, 이는 오개념입니다. 잘못된 코어에 스레드를 고정하면 오히려 캐시 지역성이 나빠지거나(예: NUMA 원격 노드에 고정), 같은 코어를 다른 워크로드와 경합시켜 p99가 악화될 수 있습니다. 03·04번 챕터에서 다루는 것처럼, affinity는 “무조건 적용"이 아니라 토폴로지를 먼저 파악한 뒤 측정으로 검증해야 하는 전략입니다.
커리큘럼
난이도 범례: 기초(입문) · 중급(실무 핵심) · 심화(깊은 분석·전문 주제) · 전문(극한·니치). Tr.NN은 optimization-NN-* 트랙을 가리킵니다. 개요(본 트랙) 행은 동일 주제의 심화가 Tr.09(I/O)·Tr.10(네트워크) 등에 있음을 뜻합니다.
운영환경 최적화가 처음이라면 16 → 01 → 02 → 03 → 06 → 11 순서로 읽는 것을 권장합니다. 16은 process/thread의 기본 mental model을 맞추고, 01–03과 06은 context switch·syscall·affinity·시간 측정의 바닥 비용을 먼저 이해하게 해 줍니다. 그 위에서 04–05, 10, 12–18의 심화 주제를 읽으면 훨씬 덜 가파릅니다.
이 문서에서 표 순서를 유지하는 이유는 참조성과 경계 설명 때문입니다. 07~09처럼 “개요(본 트랙)” 성격의 장과 이후 심화 장을 장 번호 기준으로 찾기 쉬워야 하므로, 표는 지도 역할을 맡고 위 추천 순서는 입문자용 진입 경로를 설명합니다.
| 챕터 | 제목 | 난이도 | 핵심 내용 |
|---|---|---|---|
| 01 | Context Switch 비용 | 중급 | Context switch 비용 분석과 회피 전략 |
| 02 | Syscall 최적화 | 중급 | Syscall 비용과 최소화 기법 |
| 03 | CPU Pinning/Affinity | 중급 | CPU pinning/affinity 전략 |
| 04 | NUMA CPU Affinity | 심화 | NUMA에서 CPU affinity·스레드 배치 (메모리 할당은 Tr.04과 연계) |
| 05 | Realtime 스케줄링 | 심화 | Realtime 스케줄링 적용. 기본 스케줄러는 커널 6.6부터 CFS 대신 EEVDF로 전환됐고, 커널 6.12부터는 사용자 정의 스케줄러를 붙일 수 있는 sched_ext(BPF 스케줄러)가 추가됨 |
| 06 | 정밀 시간 측정 | 중급 | RDTSC, clock_gettime 등 정밀 타이밍 |
| 07 | 커널 바이패스 개요 | 중급 | 개요(본 트랙); 심화·실전은 Tr.09·Tr.10 |
| 08 | io_uring 개요 | 중급 | 개요(본 트랙); 파일 I/O 심화는 Tr.09; epoll 통합(6.15)·NAPI busy-poll·IORING_OP_URING_CMD(NVMe passthrough) 최신 기능 |
| 09 | XDP/eBPF 개요 | 중급 | 개요(본 트랙); 패킷 처리 심화는 Tr.10; eBPF verifier 확장(토큰, 동적 스택 alloca 논의) |
| 10 | Huge TLB Pages | 심화 | Huge TLB Pages 활용 |
| 11 | 컨테이너 성능 | 기초 | 컨테이너/가상화 성능 고려사항, Kubernetes “CPU limit 지양 + isolcpus/Intel RDT(CAT·MBA) 병행” 실무 전환 |
| 12 | IRQ 최적화 | 심화 | IRQ 처리와 인터럽트 최적화 |
| 13 | cgroups v2 | 중급 | cgroups v2 기반 리소스 제어와 성능 영향 |
| 14 | Memory Locking | 심화 | mlock/mlockall을 활용한 메모리 고정 전략 |
| 15 | Signal Handling | 중급 | Signal handling 오버헤드와 회피 전략 |
| 16 | Process vs Thread | 기초 | 프로세스 vs 스레드 아키텍처 선택 기준 |
| 17 | eBPF·커널 경계와 성능 안전 | 전문 | eBPF/XDP 운영·보안·지연 트레이드오프 (Tr.10·Tr.11 연계) |
| 18 | 클라우드 환경 꼬리 지연 | 심화 | 퍼블릭 클라우드 Noisy Neighbor, CPU Steal Time 분석과 방어 |
측정과 검증 (이 트랙 기준)
운영환경 설정은 코드와 달리 배포된 하드웨어·커널 버전에 따라 효과가 달라지므로, 코드 트랙보다 “같은 조건에서 재현했는가"를 더 엄격하게 따집니다.
- 운영환경 변경(affinity/scheduler) 전후 레이턴시 분포 비교
- 동일 하드웨어에서 재현 가능한 기준선 확보(변수 최소화)
- 시스템 레벨 회귀를 자동화(환경/런타임 설정 포함)
추천 선행/병행 트랙
이 트랙의 설정 변경이 실제로 유의미한지 판단하려면 측정 도구가 먼저 있어야 하고, 스케줄링 이슈는 종종 락 경합·CPU 이벤트와 뒤섞여 나타나므로 인접 트랙과 함께 읽는 편이 유리합니다.
- 선행: Low-latency 프로파일링·성능 분석 (Tr.01)
- 병행: 동시성 (Tr.07), CPU 마이크로아키텍처 (Tr.05)
플랫폼별 읽기 힌트
같은 주제라도 Linux와 Windows는 API·도구가 다르므로, 운영체제에 따라 커리큘럼을 도는 순서를 다르게 잡는 것이 효율적입니다.
- Linux 중심 독자는 01–03, 06, 07–10, 12–14를 먼저 읽으면 syscall·affinity·io_uring·IRQ·cgroups 흐름이 자연스럽습니다.
- Windows 중심 독자는 06, 11, 15를 먼저 읽고, 02·03을 “시스템 호출 경로와 스레드 배치” 관점에서 대응시켜 읽으면 ETW/IOCP 같은 Tr.01·Tr.09 주제와 연결하기 쉽습니다.
왜 이 트랙인가 (동기)
애플리케이션 코드와 빌드 설정을 다듬은 뒤에도, 스케줄링·시스템 콜·IRQ·컨테이너 오버헤드가 바닥 지연을 지배할 수 있습니다. 특히 실시간에 가까운 목표에서는 affinity 한 줄이 평균보다 꼬리 지연에 더 큰 영향을 줍니다. 이 트랙은 커널 구현을 고치는 범위가 아니라, 운영 가능한 설정과 측정으로 지연 분포를 안정화하는 데 초점을 둡니다.
Phase별 학습 궤적
Phase A — 컨텍스트와 syscall (챕터 01–03, 06) 비용의 “바닥”을 이해하고 측정합니다.
Phase B — NUMA·실시간·고정 (챕터 04–05, 10, 14) Tr.04 메모리 할당·Tr.07 경합과 맞물립니다. 건너뛰면 NUMA 머신에서 이상하게만 느린 코어만 남기도 합니다.
Phase C — 커널 바이패스·고급 주제 (챕터 07–09, 11–13, 15–18) 챕터 07–09는 개요(본 트랙)이며, io_uring·XDP/eBPF·DPDK의 심화 실전은 Tr.09·Tr.10에서 이어집니다. 챕터 17–18은 클라우드 및 eBPF 환경의 특수 운영 주제를 다룹니다.
이 트랙을 마친 후 달성할 목표
- 설명: context switch·syscall·affinity가 지연에 미치는 영향을 말로 설명할 수 있다.
- 적용: 배포 환경에서 재현 가능한 방식으로 affinity·스케줄 정책을 시험할 수 있다.
- 연계: Tr.09·Tr.10로 넘길 때 “개요에서 무엇을 이미 알았는지”를 정리할 수 있다.
- 경계: 커널 소스 수정 수준의 튜닝은 범위 밖임을 팀과 합의할 수 있다.
평가 기준과 이 장을 읽은 후 확인
위 목표를 “설명할 수 있다"에서 그치지 않고, 실제로 아래를 실습해봤는지 스스로 점검합니다.
- 동일 바이너리에서 affinity·스케줄 정책만 바꿔 레이턴시 분포 변화를 실제로 측정해 봤는가?
-
taskset/numactl등으로 코어를 고정하고, 고정 전후 p99를 비교해 본 적이 있는가? - NUMA 머신에서 “이상하게 느린 코어"를 원격 메모리 접근으로 진단해 본 적이 있는가?
범위와 경계
flowchart LR
subgraph inScope [이 트랙]
A["syscall·컨텍스트"]
B["affinity·NUMA"]
C["io_uring·XDP 개요"]
end
subgraph outScope [경계 밖]
D["파일 심화 Tr.09"]
E["네트워크 심화 Tr.10"]
F["커널 패치"]
end
inScope --> outScope
심화·전문가 확장 궤적
IRQ·cgroups·mlock 등은 운영 권한과 워크로드에 강하게 의존합니다. 심화 난이도 챕터는 스테이징에서 지표·분포를 확보한 뒤 적용하세요.
시리즈 전체 로드맵
12개 트랙의 권장 순서·심화 진입 조건은 Low-latency 최적화 시리즈 개요를 참고하세요.
지금 바로 이어 읽을 곳
01 → 02 → 03 → 16 순으로 읽으면 컨텍스트 스위치·syscall 비용의 기초에서 프로세스/스레드 아키텍처 선택까지 이어집니다.
- Context Switch 비용 분석과 회피 (챕터 01)
- Syscall 비용과 최소화 기법 (챕터 02)
- CPU Pinning/Affinity 전략 (챕터 03)
![Featured image of post [Performance 06] Introduction: OS·런타임 Low-latency 운영환경](/post/os-optimization/getting-started-os-runtime-performance-tuning/wordcloud_hu_e72a498d0b155cd0.webp)
![[Performance 06] Introduction: OS·런타임 Low-latency 운영환경](/post/os-optimization/getting-started-os-runtime-performance-tuning/wordcloud_hu_a9d684b10c323753.webp)
![[OS 06] Context Switch 비용 분석과 회피](/post/os-optimization/context-switch-cost-avoidance/wordcloud_hu_6b2ad90b0e4290f9.webp)
![[OS 06] Syscall 비용과 최소화 기법](/post/os-optimization/syscall-cost-minimization/wordcloud_hu_eaaaec6f806e1dbe.webp)
![[OS 06] CPU Pinning/Affinity 전략](/post/os-optimization/cpu-pinning-affinity-strategy/wordcloud_hu_80c176d7700a29.webp)
![[OS 06] NUMA CPU Affinity·스레드 배치](/post/os-optimization/numa-cpu-affinity-thread-placement/wordcloud_hu_27980902404e7114.webp)
![[Performance 09] Introduction: Low-latency I/O 최적화](/post/io-optimization/getting-started-io-performance-tuning/wordcloud_hu_1d0760437bd7445c.webp)
![[Performance 10] Introduction: Low-latency 네트워크 최적화](/post/network-optimization/getting-started-network-performance-tuning/wordcloud_hu_f4ddaf91fb13038a.webp)
![[Performance 04] Introduction: Low-latency 메모리·할당·레이아웃](/post/memory-optimization/getting-started-memory-allocation-data-layout-tuning/wordcloud_hu_4b3d1ede294a01c.webp)
![[Optimization(Series)] Introduction: Low-latency 최적화 12트랙 로드맵](/post/low-latency-optimization-series/getting-started-low-latency-optimization-series-overview/wordcloud_hu_8a1f40e0771bebe4.webp)
![[Performance 07] Introduction: Low-latency 동시성·멀티스레드](/post/concurrency-optimization/getting-started-concurrency-multithreading-performance-tuning/wordcloud_hu_af151f19d558a3a1.webp)