IO_uring

io_uring

io_uring(이전의 aioring)은 스토리지 디바이스 비동기 I/O 작업을 위한 Linux 커널 시스템 호출 인터페이스로, 다음과 같은 함수에 의해 제공되는 유사한 인터페이스로 성능 문제를 해결합니다.read()/write()또는aio_read()/aio_write()파일 [1][2]: 2 기술자가 액세스하는 데이터에 대한 작업 등입니다.

페이스북의 [1]Jens Axboe에 의해 주로 개발되었습니다.

인터페이스

내부적으로는 I/O 요청 제출 및 완료(스토리지 디바이스의 경우 각각 [3]SQ(Submission Queue) 및 Completion Queue(CQ; 완료 큐))를 저장하기 위해 "큐 링"(원형 버퍼)이라고 하는2개의 버퍼를 생성하여 동작합니다.이러한 버퍼를 커널과 애플리케이션 간에 공유하면 이들 [1][4][3]버퍼를 복사하기 위해 추가 비용이 많이 드는 시스템 콜을 발행할 필요가 없어지기 때문에 I/O 퍼포먼스가 향상됩니다.io_uring 설계서에 따르면 SQ 버퍼는 소비자 어플리케이션에 의해서만 쓰기 가능하며 CQ 버퍼는 [1]: 3 커널에 의해서만 쓰기 가능하다.

에서 제공하는 APIliburing사용자 공간(애플리케이션)용 라이브러리를 사용하여 커널 인터페이스와 보다 [1][1]: 12 쉽게 상호 작용할 수 있습니다.

커널 인터페이스와 라이브러리는 모두 Linux 5.1 커널 [1][4][5]버전에서 채택되었습니다.

Linux 커널은 버전 2.5 이후 비동기 I/O를 가지고 있지만 사용하기 어렵고 [6]비효율적인 것으로 나타났습니다.이전 API는 특정 틈새 사용 [7]사례만 지원했습니다.

레퍼런스

  1. ^ a b c d e f g "Linux Kernel Getting io_uring To Deliver Fast & Efficient I/O - Phoronix". Phoronix. Retrieved 2021-03-14.{{cite web}}: CS1 maint :url-status (링크)
  2. ^ Axboe, Jens (October 15, 2019). "Efficient IO with io_uring" (PDF).{{cite web}}: CS1 maint :url-status (링크)
  3. ^ a b "Getting Hands-on with io_uring using Go". developers.mattermost.com. Retrieved 2021-11-20.
  4. ^ a b "The rapid growth of io_uring [LWN.net]". lwn.net. Retrieved 2021-11-20.
  5. ^ "Faster IO through io_uring Kernel Recipes 2019". Retrieved 2021-03-14.
  6. ^ Corbet, Jonathan. "Ringing in a new asynchronous I/O API". LWN.net. Retrieved 2021-03-14.{{cite web}}: CS1 maint :url-status (링크)
  7. ^ "What's new with io_uring" (PDF). Retrieved 2022-06-01.

외부 링크

  • io_uring을 통한 효율적인 I/O, io_uring의 배경 동기 상세 설명, 인터페이스(데이터 구조 등), 성능 평가