์์ฆ ์ด๋ฆฌ๋ Linux Plumbers 2022 ์ปจํผ๋ฐ์ค์์ Western Digital์ ์์ง๋์ด๊ฐ Rust ์ธ์ด๋ก ์์ฑ๋๊ณ Linux ์ปค๋์์ ์คํ๋๋ NVMe(NVM-Express) ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ SSD ๋๋ผ์ด๋ธ์ฉ ์คํ์ ๋๋ผ์ด๋ฒ ๊ฐ๋ฐ์ ๋ํด ํ๋ ์ ํ ์ด์ ์ ํ์ต๋๋ค. ์์ค. ํ๋ก์ ํธ๊ฐ ์์ง ๊ฐ๋ฐ ์ด๊ธฐ ๋จ๊ณ์ ์๋ค๋ ์ฌ์ค์๋ ๋ถ๊ตฌํ๊ณ , ํ ์คํธ ๊ฒฐ๊ณผ Rust ์ธ์ด๋ก ๋ NVMe ๋๋ผ์ด๋ฒ์ ์ฑ๋ฅ์ ์ปค๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ C ์ธ์ด๋ก ์์ฑ๋ NVMe ๋๋ผ์ด๋ฒ์ ์ผ์นํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
๋ณด๊ณ ์์ ๋ฐ๋ฅด๋ฉด C์ ํ์ฌ NVMe ๋๋ผ์ด๋ฒ๋ ๊ฐ๋ฐ์์๊ฒ ์์ ํ ๋ง์กฑ์ค๋ฝ์ง๋ง NVMe ํ์ ์์คํ ์ ๋งค์ฐ ๊ฐ๋จํ๊ณ ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ ๋์ ์ฑ๋ฅ ์๊ตฌ ์ฌํญ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ Rust์์ ๋๋ผ์ด๋ฒ ๊ฐ๋ฐ์ ํ๋น์ฑ์ ํ์ํ๊ธฐ ์ํ ์ข์ ํ๋ซํผ์ ๋๋ค. ๋น๊ต๋ฅผ ์ํ ์ ์ฆ๋ ์ฐธ์กฐ ๊ตฌํ์ด๋ฉฐ ๋ค์ํ ์ธํฐํ์ด์ค(dev, pci, dma, blk-mq, gendisk, sysfs)๋ฅผ ์ง์ํฉ๋๋ค.
Rust์ฉ PCI NVMe ๋๋ผ์ด๋ฒ๋ ์ด๋ฏธ ์๋์ ํ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ๊ฐ๋ณ์ ์ธ ๊ฐ์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์์ง ๋๋ฆฌ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์ด ์์ง ์์ต๋๋ค. ํฅํ ๊ณํ์๋ ๊ธฐ์กด์ ์์ ํ์ง ์์ ๋ธ๋ก ์ฝ๋ ์ ๊ฑฐ, ์ฅ์น ์ ๊ฑฐ ๋ฐ ๋๋ผ์ด๋ฒ ์ธ๋ก๋ ์์ ์ง์, sysfs ์ธํฐํ์ด์ค ์ง์, ์ง์ฐ ์ด๊ธฐํ ๊ตฌํ, blk-mq์ฉ ๋๋ผ์ด๋ฒ ์์ฑ, queue_rq์ฉ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ ์ฌ์ฉ ์คํ์ด ํฌํจ๋ฉ๋๋ค.
๋ํ FreeBSD ์ปค๋์ฉ Rust ์ธ์ด๋ก ๋๋ผ์ด๋ฒ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํด NCC ๊ทธ๋ฃน์ด ์ํํ ์คํ์ ์ฃผ๋ชฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด /dev/rustmodule ํ์ผ์ ๊ธฐ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ ๊ฐ๋จํ ์์ฝ ๋๋ผ์ด๋ฒ๋ฅผ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋ค์ ์คํ ๋จ๊ณ์์ NCC ๊ทธ๋ฃน์ ๋คํธ์ํฌ ๋ฐ ํ์ผ ์์ ์ ๋ณด์์ ํฅ์์ํค๊ธฐ ์ํด Rust ์ธ์ด๋ก ์ปค๋์ ํต์ฌ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์์ ํ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฌ๋ Rust ์ธ์ด๋ก ๊ฐ๋จํ ๋ชจ๋์ ๋ง๋๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ง๋ง Rust๋ฅผ FreeBSD ์ปค๋์ ๋ ๊ธด๋ฐํ๊ฒ ํตํฉํ๋ ค๋ฉด ์ถ๊ฐ ์์ ์ด ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ทธ๋ค์ Rust for Linux ํ๋ก์ ํธ์์ ์ค๋นํ ์ถ๊ฐ ๊ธฐ๋ฅ๊ณผ ์ ์ฌํ๊ฒ ํ์ ์์คํ ๊ณผ ์ปค๋ ๊ตฌ์กฐ์ ๋ํ ์ถ์ํ ๊ณ์ธต ์ธํธ๋ฅผ ์์ฑํด์ผ ํ๋ค๊ณ ์ธ๊ธํฉ๋๋ค. ์์ผ๋ก ์ฐ๋ฆฌ๋ Illumos ์ปค๋์ ์ฌ์ฉํ์ฌ ์ ์ฌํ ์คํ์ ์ํํ๊ณ Linux, BSD ๋ฐ Illumos์ฉ Rust๋ก ์์ฑ๋ ๋๋ผ์ด๋ฒ์ ์ฌ์ฉํ ์ ์๋ Rust์ ๊ณตํต ์ถ์ํ๋ฅผ ์๋ณํ ๊ณํ์ ๋๋ค.
Microsoft์ Google์ ๋ฐ๋ฅด๋ฉด ์์ฌ ์ํํธ์จ์ด ์ ํ์ ์ทจ์ฝ์ ์ค ์ฝ 70%๋ ์์ ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. ๋ฌ์คํธ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ๋ถ์์ ํ ์์ ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ์ทจ์ฝ์ ์ ์ํ์ ์ค์ด๊ณ , ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ทผํ์ฌ ๋ฒํผ๋ฅผ ์ค๋ฒ๋ฐํ๋ ๋ฑ์ ์ค๋ฅ ๋ฐ์์ ์์จ ์ ์์ ๊ฒ์ผ๋ก ๊ธฐ๋๋ฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์์ ์ฒ๋ฆฌ๋ ์ฝ๋ ์คํ ์ค ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค์ ์ ํ์ฑ ํ๊ฐ๋ฟ๋ง ์๋๋ผ ์ฐธ์กฐ ํ์ธ, ๊ฐ์ฒด ์์ ๊ถ ๋ฐ ๊ฐ์ฒด ์๋ช
(๋ฒ์) ์ถ์ ์ ํตํด ์ปดํ์ผ ์๊ฐ์ Rust์์ ์ ๊ณต๋ฉ๋๋ค. Rust๋ ๋ํ ์ ์ ์ค๋ฒํ๋ก์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ฌ์ฉํ๊ธฐ ์ ์ ๋ณ์ ๊ฐ์ ํ์ ์ด๊ธฐํ๊ฐ ํ์ํ๋ฉฐ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋ฅ๋ฅผ ๋ ์ ์ฒ๋ฆฌํ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ ์ฐธ์กฐ ๋ฐ ๋ณ์ ๊ฐ๋
์ ์ ์ฉํ๊ณ , ๊ฐ๋ ฅํ ์ ์ ์ ํ ์ง์ ์ ์ ๊ณตํ์ฌ ๋
ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ์ต์ํํฉ๋๋ค.
์ถ์ฒ : opennet.ru