Featured image of post [Performance 09] Introduction: Low-latency I/O 최적화

[Performance 09] Introduction: Low-latency I/O 최적화

Low-latency I/O 최적화 트랙의 도입 챕터입니다. I/O 비용 직관부터 비동기 I/O·zero-copy·filesystem 선택까지의 진입 순서를 정리하고, 시스템콜·복사 횟수·지연 분포를 연결해 검증하는 접근을 소개합니다.

이 트랙은 “데이터가 저장장치를 오가는 경로"의 지연시간을 줄이는 영역을 책임집니다. µ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.NNoptimization-NN-* 트랙을 가리킵니다. 심화(본 트랙) 행은 Tr.06에 있는 동일 주제 개요를 이어 받습니다.

이 트랙은 번호 순서대로(01 → 17) 읽으면 됩니다. 01은 I/O 지연의 그림을 먼저 잡아 주고, 02–03은 동기/비동기와 이벤트 모델의 차이를 정리하며, 07·11·12는 mmap·Reactor/Proactor·Vectored I/O처럼 이후 심화 챕터의 공통 바닥을 만들어 줍니다.

챕터제목난이도핵심 내용
01I/O 비용 직관기초동기/비동기·블로킹/논블로킹·복사 횟수가 지연에 미치는 그림 잡기
02I/O 패턴과 비용기초동기/비동기, 블로킹/논블로킹 비용 모델
03비동기 I/O 기초중급select, poll, epoll, kqueue 비교
04io_uring 심화심화심화(본 트랙); 개요는 Tr.06; epoll 통합(6.15)·NAPI busy-poll·uring_cmd(NVMe passthrough), PostgreSQL 18 io_uring 통합 연구 사례(연구 벤치마크 상한 2.05배 — 실제 프로덕션 개선폭은 워크로드에 따라 이보다 작음, 자세한 내용은 챕터 04 참고)
05IOCP와 Windows I/O중급Windows IOCP 모델과 최적화
06Zero-copy 기법심화sendfile, splice, copy_file_range 활용
07Memory-mapped I/O중급mmap 활용과 주의사항
08Direct 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)로 쓰기 증폭 완화
11I/O 멀티플렉싱 패턴중급Reactor, Proactor 패턴 구현
12Vectored I/O중급readv/writev, preadv2/pwritev2 활용
13POSIX AIO vs io_uring심화POSIX AIO와 io_uring 성능 비교
14Database I/O 패턴심화WAL, fsync, 저널링 전략과 성능 영향
15File 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 심화까지 이어집니다.