이 트랙은 “데이터가 저장장치를 오가는 경로"의 지연시간을 줄이는 영역을 책임집니다. µs 단위에서는 시스템콜 비용, 복사 횟수, I/O 스케줄링이 지연시간의 상당 부분을 차지합니다.
이 트랙이 책임지는 범위
디스크·파일과 데이터를 주고받는 경로에서 시스템콜·복사·페이지 캐시가 어떻게 지연을 만드는지가 이 트랙의 핵심 질문입니다.
- I/O 패턴과 비용 모델 (동기 vs 비동기, 블로킹 vs 논블로킹)
- 비동기 I/O 기법 (epoll, io_uring, IOCP, AIO)
- Zero-copy 기법 (sendfile, splice, mmap)
- Memory-mapped I/O 최적화
- 파일시스템과 블록 디바이스 특성 이해
- Direct I/O vs Buffered I/O 선택
이 트랙이 다루지 않는 것 (경계)
“저장장치로 향하는 경로"와 “네트워크로 향하는 경로"는 커널 계층은 겹치지만 병목 원인이 다르므로, 이 트랙은 전자만 다루고 후자·언어·하드웨어·스케줄링 계층은 각 전문 트랙에 맡깁니다.
- 네트워크 소켓/프로토콜 최적화 (→ 네트워크 최적화 트랙 Tr.10)
- C++ 언어 레벨 최적화 상세 (→ C++ 언어 트랙)
- CPU 파이프라인/캐시의 하드 분석 (→ CPU 트랙)
- OS 스케줄러/affinity의 상세 (→ OS/런타임 트랙)
커리큘럼
난이도 범례: 기초(입문) · 중급(실무 핵심) · 심화(깊은 분석·전문 주제) · 전문(극한·니치). Tr.NN은 optimization-NN-* 트랙을 가리킵니다. 심화(본 트랙) 행은 Tr.06에 있는 동일 주제 개요를 이어 받습니다.
이 트랙은 번호 순서대로(01 → 17) 읽으면 됩니다. 01은 I/O 지연의 그림을 먼저 잡아 주고, 02–03은 동기/비동기와 이벤트 모델의 차이를 정리하며, 07·11·12는 mmap·Reactor/Proactor·Vectored I/O처럼 이후 심화 챕터의 공통 바닥을 만들어 줍니다.
| 챕터 | 제목 | 난이도 | 핵심 내용 |
|---|---|---|---|
| 01 | I/O 비용 직관 | 기초 | 동기/비동기·블로킹/논블로킹·복사 횟수가 지연에 미치는 그림 잡기 |
| 02 | I/O 패턴과 비용 | 기초 | 동기/비동기, 블로킹/논블로킹 비용 모델 |
| 03 | 비동기 I/O 기초 | 중급 | select, poll, epoll, kqueue 비교 |
| 04 | io_uring 심화 | 심화 | 심화(본 트랙); 개요는 Tr.06; epoll 통합(6.15)·NAPI busy-poll·uring_cmd(NVMe passthrough), PostgreSQL 18 io_uring 통합 연구 사례(연구 벤치마크 상한 2.05배 — 실제 프로덕션 개선폭은 워크로드에 따라 이보다 작음, 자세한 내용은 챕터 04 참고) |
| 05 | IOCP와 Windows I/O | 중급 | Windows IOCP 모델과 최적화 |
| 06 | Zero-copy 기법 | 심화 | sendfile, splice, copy_file_range 활용 |
| 07 | Memory-mapped I/O | 중급 | mmap 활용과 주의사항 |
| 08 | Direct I/O | 심화 | O_DIRECT와 페이지 캐시 바이패스 |
| 09 | 파일시스템 특성 | 중급 | ext4, XFS, ZFS 등 성능 특성, ext4 단일 블록 원자적 쓰기(6.13+)·XFS FORCEALIGN 기반 atomic writes |
| 10 | 블록 디바이스 최적화 | 심화 | NVMe, SSD 특성과 I/O 스케줄러, NVMe 2.1 + FDP(Flexible Data Placement, TP4146b)로 쓰기 증폭 완화 |
| 11 | I/O 멀티플렉싱 패턴 | 중급 | Reactor, Proactor 패턴 구현 |
| 12 | Vectored I/O | 중급 | readv/writev, preadv2/pwritev2 활용 |
| 13 | POSIX AIO vs io_uring | 심화 | POSIX AIO와 io_uring 성능 비교 |
| 14 | Database I/O 패턴 | 심화 | WAL, fsync, 저널링 전략과 성능 영향 |
| 15 | File Locking 성능 | 중급 | 파일 잠금이 성능에 미치는 영향과 대안 |
| 16 | 스토리지 스택 커스터마이징 | 전문 | 커널 모듈·특수 FS·벤더 드라이버와의 경계 (운영 리스크·Tr.11 연계) |
| 17 | 로깅 성능 전략 | 중급 | 핫패스 로깅 비용 제어, 비동기 로거, 로그 레벨 분리와 I/O 영향 |
측정과 검증 (이 트랙 기준)
- I/O 처리량(throughput)과 지연시간(latency) 분리 측정
- 시스템콜 횟수/비용 프로파일링 (strace, perf)
- 복사 횟수 추적 (zero-copy 적용 전후)
- IOPS, 대역폭, 지연시간 분포 분석
추천 선행/병행 트랙
- 선행: Low-latency 프로파일링·성능 분석 (Tr.01)
- 병행: OS·런타임 (Tr.06), 메모리·할당 (Tr.04)
- 후행: 네트워크 최적화 (Tr.10)
스토리지·DB·파일 처리가 핫패스라면 이 트랙이 필수에 가깝습니다.
왜 이 트랙인가 (동기)
디스크와의 데이터 이동은 시스템 콜·커널 경로·복사 횟수·페이지 캐시 정책이 겹칩니다. Tr.06에서 syscall과 io_uring 개요를 본 뒤, 이 트랙에서는 파일·블록·DB 패턴으로 내려가 실전 튜닝을 합니다. 동일한 “비동기 I/O”라도 워크로드에 따라 이득이 크게 달라지므로, 처리량과 지연 분포를 분리 측정하는 습관이 필요합니다. 각 API의 정확한 동작·제약은 io_uring(7) 공식 문서를 1차 출처로 참고하고, 이 00 챕터가 다루지 못하는 세부 근거는 각 하위 챕터 본문에서 별도로 인용합니다.
Phase별 학습 궤적
Phase A — 직관·패턴 (챕터 01–03) I/O 지연의 기본 그림과 동기/비동기·멀티플렉싱 기초 없이 고급 API만 쓰면 디버깅이 어렵습니다.
Phase B — 고급 I/O (챕터 04–08, 11–13) io_uring 심화(본 트랙)는 Tr.06 개요를 전제로 합니다. zero-copy·mmap·O_DIRECT는 캐시 일관성·이식성 이슈가 큽니다.
Phase C — 스토리지·DB (챕터 09–10, 14–15, 17) 파일시스템·NVMe·WAL/fsync·핫패스 로깅 비용은 심화입니다. Tr.04 메모리·Tr.11 용량 계획과 연결됩니다.
이 트랙을 마친 후 달성할 목표
- 측정: syscall 횟수·복사 횟수·IOPS·지연 분포를 연결해 설명할 수 있다.
- 선택: epoll·IOCP·io_uring 등 경로를 플랫폼·워크로드에 맞게 고를 수 있다.
- 연계: Tr.06 개요와 본 트랙 심화의 차이를 팀에 전달할 수 있다.
평가 기준과 이 장을 읽은 후 확인
위 목표를 “설명할 수 있다"에서 그치지 않고, 실제로 아래를 실습해봤는지 스스로 점검합니다.
-
strace/perf로 자신의 코드가 내는 syscall 횟수를 실제로 세어 본 적이 있는가? - zero-copy(sendfile/splice/mmap) 적용 전후를 실제 벤치마크로 비교해 본 적이 있는가?
- Direct I/O와 Buffered I/O 중 하나를 자신의 워크로드에 맞게 실제로 선택·검증해 본 적이 있는가?
범위와 경계
flowchart LR
subgraph inScope [이 트랙]
A["파일·블록 I/O"]
B["io_uring 심화"]
C["DB I/O 패턴"]
end
subgraph outScope [경계 밖]
D["소켓·프로토콜 Tr.10"]
E["언어·버퍼 설계 Tr.02·Tr.04"]
F["CPU 캐시 Tr.05"]
end
inScope --> outScope
심화·전문가 확장 궤적
Direct I/O·저널링·스케줄러는 환경별로 튜닝 여지가 큽니다. 심화 챕터는 스테이징에서 재현한 워크로드로만 결론 내리는 것을 권장합니다. 이 트랙의 다음 확장 후보로는 오브젝트 스토리지/클라우드 블록 스토리지 지연 모델, 컨테이너·오버레이 파일시스템 I/O, 전문 저장소 스택 운영을 두고 검토할 수 있습니다.
시리즈 전체 로드맵
12개 트랙의 권장 순서·심화 진입 조건은 Low-latency 최적화 시리즈 개요를 참고하세요.
지금 바로 이어 읽을 곳
01 → 02 → 03 → 04 순으로 읽으면 I/O 비용 직관에서 패턴·비동기 I/O·io_uring 심화까지 이어집니다.
- I/O 비용 직관 (챕터 01)
- I/O 패턴과 비용 (챕터 02)
- 비동기 I/O 기초: select·poll·epoll·kqueue (챕터 03)
![Featured image of post [Performance 09] Introduction: Low-latency I/O 최적화](/post/io-optimization/getting-started-io-performance-tuning/wordcloud_hu_f5ee8c8fe9cc20df.webp)
![[Performance 09] Introduction: Low-latency I/O 최적화](/post/io-optimization/getting-started-io-performance-tuning/wordcloud_hu_1d0760437bd7445c.webp)
![[IO 09] I/O 비용 직관](/post/io-optimization/io-cost-intuition-sync-async-copy-fundamentals/wordcloud_hu_e9e25ebdb0769026.webp)
![[IO 09] I/O 패턴과 비용](/post/io-optimization/io-patterns-blocking-nonblocking-cost-model/wordcloud_hu_42aa67595baedd30.webp)
![[IO 09] 비동기 I/O 기초: select·poll·epoll·kqueue](/post/io-optimization/async-io-select-poll-epoll-kqueue/wordcloud_hu_bd16e5293f5f9e65.webp)
![[IO 09] io_uring 심화](/post/io-optimization/io-uring-advanced-deep-dive/wordcloud_hu_9430cc2847c0984b.webp)
![[Performance 06] Introduction: OS·런타임 Low-latency 운영환경](/post/os-optimization/getting-started-os-runtime-performance-tuning/wordcloud_hu_a9d684b10c323753.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)