WD๋Š” Rust๋กœ NVMe ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. FreeBSD์—์„œ Rust ์‹คํ—˜ํ•˜๊ธฐ

์š”์ฆ˜ ์—ด๋ฆฌ๋Š” Linux Plumbers 2022 ์ปจํผ๋Ÿฐ์Šค์—์„œ Western Digital์˜ ์—”์ง€๋‹ˆ์–ด๊ฐ€ Rust ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜๊ณ  Linux ์ปค๋„์—์„œ ์‹คํ–‰๋˜๋Š” NVMe(NVM-Express) ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” SSD ๋“œ๋ผ์ด๋ธŒ์šฉ ์‹คํ—˜์  ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ์— ๋Œ€ํ•ด ํ”„๋ ˆ์  ํ…Œ์ด์…˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ค€. ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„์ง ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‹จ๊ณ„์— ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ Rust ์–ธ์–ด๋กœ ๋œ NVMe ๋“œ๋ผ์ด๋ฒ„์˜ ์„ฑ๋Šฅ์€ ์ปค๋„์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ C ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ NVMe ๋“œ๋ผ์ด๋ฒ„์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

WD๋Š” Rust๋กœ NVMe ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. FreeBSD์—์„œ Rust ์‹คํ—˜ํ•˜๊ธฐ
WD๋Š” Rust๋กœ NVMe ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. FreeBSD์—์„œ Rust ์‹คํ—˜ํ•˜๊ธฐ

๋ณด๊ณ ์„œ์— ๋”ฐ๋ฅด๋ฉด 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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€