토픽 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 커널