[Linux] io_uring
io_uring์ ๋ฆฌ๋ ์ค ์ปค๋ 5.1๋ถํฐ ๋์ ๋ ๋น๊ต์ ์ต์ ์ ๋น๋๊ธฐ I/O ๋ชจ๋ธ์ด๋ค. epoll๋ณด๋ค๋ ํ ๋จ๊ณ ์งํํ ํํ๋ผ๊ณ ํ ์ ์๋ค.
๊ด๋ จ ํฌ์คํธ
https://m.blog.naver.com/sssang97/223049662481
๊ธฐ๋ณธ ๊ตฌ์กฐ
I/O๋ ๊ทธ ์์ฒด๋ก ์์ฒญ๋ system call์ ๋ฐ์์ํค๊ณ , ๋ณดํต์ system call ์์ฒด๊ฐ ์ฑ๋ฅ ๋ณ๋ชฉ์ด ๋๊ณค ํ๋ค.
๊ทธ๋์ io_uring์ ๊ธฐ์กฐ๋ ์ค๊ฐ ๋ ์ด์ด๋ฅผ ์ถ๊ฐํด์ system call ํ์๋ฅผ ์ต์ํ์ผ๋ก ์ค์ด๋ ๊ฒ์ ์๋ค.
ํด์ ๊ฝค๋ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
์ฐ์ , io_uring์ ์ฌ์ฉ์ ์์ญ๊ณผ ์ปค๋ ์์ญ ์ฌ์ด์ 2๊ฐ์ ring buffer๋ฅผ ๋๋ค.
ํ๋๋ ์ฌ์ฉ์ ์์ญ์์ ๋ฐ์ํ I/O๋ฅผ ์ปค๋๋ก ์๋ Submission Queue.
ํ๋๋ ์ปค๋์์ ์ฒ๋ฆฌ ์๋ฃ๋ I/O์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ฌ์ฉ์ ์์ญ์ผ๋ก ๋ฐํํด์ฃผ๋ Completion Queue๋ค.
io_uring์ ์ 2๊ฐ์ ๋ฒํผ ํ๋ฅผ ํตํด ์ฌ๋ฌ๊ฐ์ I/O ์์ฒญ/์๋ต์ ๋ฒํผ ๋จ์๋ก ๋ฌถ์ด์ ์ธ๊ทธ๋ฆฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ทจํ๋ค.
์ด ๋๋ถ์ system call์ ์ต์ํํ๊ณ ์ ์ <>์ปค๋ ์ฌ์ด์ context switch๋ฅผ ์ค์ผ ์ ์๋ค.
๊ฒ๋ค๊ฐ ํ๋ฅผ ํตํ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฑ์ ์ฌ๋ฌ๊ฐ์ง ์์ฉ์๋ ์ ๋ฆฌํ ๋ถ๋ถ์ด ์๋ค.
์๋๋ epoll๊ณผ io_uring์ ๋น๊ตํ ๋ฒค์น๋งํฌ ์ฌ๋ก ์ค ํ๋๋ค.
๋ฎ์์๋ก ๋น ๋ฅด๋ค. ์ฒ๋ฆฌ๋์ด ๋ง์์ง์๋ก io_uring์ ์ฑ๋ฅ์ด ๋ ๋๋ณด์ด๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
ํ์ฌ
์์ง ์์ฑ ๋จ๊ณ๋ ์๋๊ณ , ํ๋ก๋์ ์์ ์ฌ์ฉ๋๋ ์ฌ๋ก๊ฐ ๋ง์ง๋ ์์ ๊ฒ ๊ฐ๋ค.
ํนํ ๋ณด์ ์ทจ์ฝ์ ์ด ๊ฐ๋ ๋์์ ์์ง ์ ๋ฉด์ ์ผ๋ก ์ฐ๊ธฐ์๋ ๋ฌด๋ฆฌ๊ฐ ์์ด๋ณด์ด๋๋ผ.
์ฐธ์กฐ
https://en.m.wikipedia.org/wiki/Io_uring
https://smileostrich.tistory.com/m/entry/What-is-IOuring-Inside-IOuring
https://realwakka.github.io/linux/ringing-in-a-new-asynchronous-io-api/