피드로 돌아가기
Hacker NewsHacker News
Infrastructure

Syscall 최소화와 Completion Model 도입을 통한 Linux I/O 성능 극대화

Epoll vs. Io_uring in Linux

2026년 6월 20일5advanced

Context

전통적인 epoll 기반의 Readiness Model은 I/O 가능 상태 알림 후 read/write를 별도로 호출하는 구조임. 이 과정에서 발생하는 잦은 Context Switch와 Syscall 오버헤드로 인해 대규모 연결 처리 시 시스템 병목 현상이 발생함.

Technical Solution

  • Readiness Model에서 Completion Model로의 전환을 통한 I/O 처리 방식 근본적 변경
  • User-Kernel 간 Shared Memory 기반 Ring Buffer를 도입하여 데이터 전달 비용 제거
  • 단일 io_uring_enter() 호출로 다수의 I/O 요청을 일괄 처리하는 Batching 메커니즘 적용
  • IORING_SETUP_SQPOLL 설정을 통한 전용 커널 스레드 운용으로 Steady State에서의 Syscall 제로화 달성
  • io_uring_register_buffers() 활용으로 커널의 메모리 리매핑 과정을 생략한 Zero-copy 구현
  • IORING_OP_SEND_ZC 적용을 통한 네트워크 전송 시 버퍼 복사 단계 완전 제거

1. Linux Kernel v

5.1+ 환경인지 확인 후 epoll 대신 io_uring 검토

2. 극한의 성능이 필요한 경우 SQPOLL 설정과 CPU 소모 간의 Trade-off 분석

3. 메모리 복사 비용 제거를 위해 Fixed Buffer 등록 및 Zero-copy OP 적용 여부 검토

4. 동기적 리턴값이 아닌 CQE의 res 필드를 통한 비동기 에러 핸들링 로직 설계

원문 읽기