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]사례만 지원했습니다.
레퍼런스
- ^ 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 (링크) - ^ Axboe, Jens (October 15, 2019). "Efficient IO with io_uring" (PDF).
{{cite web}}
: CS1 maint :url-status (링크) - ^ a b "Getting Hands-on with io_uring using Go". developers.mattermost.com. Retrieved 2021-11-20.
- ^ a b "The rapid growth of io_uring [LWN.net]". lwn.net. Retrieved 2021-11-20.
- ^ "Faster IO through io_uring Kernel Recipes 2019". Retrieved 2021-03-14.
- ^ Corbet, Jonathan. "Ringing in a new asynchronous I/O API". LWN.net. Retrieved 2021-03-14.
{{cite web}}
: CS1 maint :url-status (링크) - ^ "What's new with io_uring" (PDF). Retrieved 2022-06-01.
외부 링크