공부 이야기/그냥 찾아보는 공부

리눅스의 io_uring에 대해

mind: 2024. 11. 17. 21:45

1. 리눅스의 Async I/O는 일반 I/O에서 발생하는 블로킹 문제를 해결해주긴 함

2. 그 이유는 사용자가 파일 시스템에 데이터를 쏘면 커널이 별도의 메모리 공간을 할당해서 처리 응답을 저장하기 때문임

3. 사용자는 커널이 대신 응답 처리를 해줄 때까지 기다릴 필요가 없음

4. 하지만 사용자 공간, 커널 공간 두 곳 모두 동일한 메모리를 할당해야 하는 비효율이 생김

5. 이를 해결하기 위해 io_uring은 사용자, 커널 양쪽 다 접근 가능한 공유 메모리 영역을 만들어 놓고 관리함

6. 두 번 복사할 필요가 없음

7. 이는 메모리 공간의 효율 향상뿐만 아니라 복사 행위에서 발생되는 CPU cost도 줄임

8. 한편, 공유 메모리 영역에는 요청 원형 큐, 완료 원형 큐를 둠

9. AIO는 요청이 발생할 때마다 시스템 콜을 호출하지만, io_uring은 큐에 가득 차면 시스템 콜을 호출함

10. 이는 커널 오버헤드를 줄여주며 궁극적으로 서버의 CPU cost를 감소시켜줌