๋คํธ์ํฌ ์ฑ๋ฅ ์ต์ ํ ์์ง๋์ด์ธ ์ ์๋ ์ค์๊ฐ ๋น๋์ค ์คํธ๋ฆฌ๋ฐ ํ๋ซํผ ํ๋ก์ ํธ์์ ์ป์ ์ค์ง์ ์ธ ๊ฒฝํ์ ๊ณต์ ํฉ๋๋ค. ๋คํธ์ํฌ IO ์ฑ๋ฅ์ ํต์ฌ ์์๋ TCP ์ฐ๊ฒฐ ๊ด๋ฆฌ, ๋ฐ์ดํฐ ์ง๋ ฌํ, ์์ถ์
๋๋ค. ์ ์๋ ์๋(1KB) ๋ฐ ๋๋(1MB) ๋ฐ์ดํฐ ์ ์ก์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ค์ํ ํ๋ ์์ํฌ๋ฅผ ๋น๊ตํ๋ ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๋ฉฐ, ์ฒ๋ฆฌ๋, ์ง์ฐ ์๊ฐ, ๋ฆฌ์์ค ์ฌ์ฉ๋์ ๊ฐ์กฐํฉ๋๋ค. ํต์ฌ ๋คํธ์ํฌ IO ์ต์ ํ ๊ธฐ์ ๋ก๋ ์ ๋ก ์นดํผ( `sendfile` ์ฌ์ฉ), ๋ฉ๋ชจ๋ฆฌ ๋งคํ( `mmap` ), TCP ํ๋ผ๋ฏธํฐ ํ๋, ๋น๋๊ธฐ IO๊ฐ ๋
ผ์๋ฉ๋๋ค.
์ด ๊ธฐ์ฌ์์๋ Node.js, Go, Rust์ ๋คํธ์ํฌ IO ๊ตฌํ์ ๋ถ์ํฉ๋๋ค. Node.js๋ ์ฌ๋ฌ ๋ฐ์ดํฐ ๋ณต์ฌ ๋ฐ ๋ธ๋กํน ํ์ผ IO๋ก ์ธํด ์ด๋ ค์์ ๊ฒช์ต๋๋ค. Go๋ ํจ์จ์ ์ธ ๊ณ ๋ฃจํด๊ณผ ํ๋ฅญํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ์ง๋ง ์ฌ์ ํ ๋ฐ์ดํฐ ๋ณต์ฌ ๋ฐ GC ์ค๋ฒํค๋๊ฐ ๋ฐ์ํฉ๋๋ค. Rust๋ `mmap` ๋ฐ `sendfile`์ ํตํ ์ ๋ก ์นดํผ ์ง์, ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ, ๋น๋๊ธฐ ๊ธฐ๋ฅ์ ํตํด ๋๊ฐ์ ๋ํ๋
๋๋ค.
๋น๋์ค ์คํธ๋ฆฌ๋ฐ ํ๋ซํผ์ ์ํ ์ค์ง์ ์ธ ์ต์ ํ ์กฐ์น๋ก๋ ์ฒญํฌ ์ ์ก ๋ฐ ์ฐ๊ฒฐ ์ฌ์ฌ์ฉ์ด ์์ต๋๋ค. ์ค์๊ฐ ๊ฑฐ๋ ์์คํ
์ ๊ฒฝ์ฐ, ๋ฎ์ ์ง์ฐ ์๊ฐ์ ์ํด UDP ์ต์ ํ ๋ฐ ์ผ๊ด ์ฒ๋ฆฌ๊ฐ ์ค์ํฉ๋๋ค. ๋ฏธ๋ ํธ๋ ๋๋ DPDK ๋ฐ RDMA์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ ํ๋์จ์ด ๊ฐ์ ๋คํธ์ํฌ IO, ๊ทธ๋ฆฌ๊ณ ์ ์ํ ์์ถ๊ณผ ๊ฐ์ ์ง๋ฅํ ์ต์ ํ ๊ธฐ์ ์ ํฅํ๊ณ ์์ต๋๋ค. ์ ์๋ ๋คํธ์ํฌ IO ์ต์ ํ๊ฐ ๋ณต์กํ๊ณ ๋ค๋จ๊ณ์ ์์ง๋์ด๋ง ์์
์ด๋ฉฐ, ์์คํ
์ฑ๋ฅ์ ์ํด ์ ์ ํ ํ๋ ์์ํฌ์ ์ ๋ต์ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ๊ฒฐ๋ก ์ง์ต๋๋ค.
dev.to
๐_Network_IO_Performance_Optimization[20260102074107]
