[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/