Learning
토픽 67 / 85·파일 시스템, I/O, 시스템 구조

io_uring

io_uring

Linux의 고성능 비동기 I/O 인터페이스로, 사용자 공간과 커널 간 공유 링 버퍼를 사용하여 시스템 콜 오버헤드를 최소화하고 배치 처리와 폴링 지원

목적: 고성능 비동기 I/O, 시스템 콜 감소, 배치 처리, 저지연 I/O

특징: 링 버퍼 기반, 시스템 콜 최소화, 커널 폴링, SQE/CQE 구조

구조

  • Submission Queue (SQ): 사용자 → 커널, I/O 요청 제출
  • Completion Queue (CQ): 커널 → 사용자, I/O 완료 통지
  • SQE (Submission Queue Entry): 개별 I/O 요청 구조체
  • CQE (Completion Queue Entry): 개별 I/O 완료 구조체

동작

고급 기능

  • SQPOLL: 커널 스레드가 SQ 폴링, 시스템 콜 제로
  • IOPOLL: 커널이 디바이스 폴링, 인터럽트 없음
  • Linked Operations: I/O 작업 체이닝
  • Fixed Files/Buffers: 파일/버퍼 사전 등록으로 오버헤드 제거

지원 연산: read, write, fsync, send, recv, accept, connect, openat 등

장점: 시스템 콜 최소화, 높은 IOPS, 배치 처리, 저지연

단점: 복잡한 프로그래밍 모델, Linux 5.1+ 필요, 학습 곡선

적용사례: 고성능 스토리지, 네트워크 서버, 데이터베이스, 웹 서버

비교: io_uring(링버퍼/최소syscall) vs epoll(이벤트/syscall) vs AIO(POSIX/제한적)

연관: 비동기 I/O, epoll, 링 버퍼, 고성능 I/O, Linux 커널