์ธํ
๊ณต๋ ํ๋ก์ ํธ
Cloud Hypervisor๋ virtio ๊ธฐ๋ฐ ๋ฐ๊ฐ์ํ ์ดํ๋ผ์ด์ธ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ Linux ๋ฐฐํฌํ์ ์คํํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ์ธ๊ธ๋ ์ฃผ์ ์์ ์๋ ๋์ ์๋ต์ฑ, ๋ฎ์ ๋ฉ๋ชจ๋ฆฌ ์๋น, ๊ณ ์ฑ๋ฅ, ๊ตฌ์ฑ ๋จ์ํ, ๊ฐ๋ฅํ ๊ณต๊ฒฉ ๋ฒกํฐ ๊ฐ์ ๋ฑ์ด ์์ต๋๋ค.
์๋ฎฌ๋ ์ด์ ์ง์์ ์ต์ํ์ผ๋ก ์ ์ง๋๋ฉฐ ๋ฐ๊ฐ์ํ์ ์ค์ ์ ๋ก๋๋ค. ํ์ฌ๋ x86_64 ์์คํ ๋ง ์ง์๋์ง๋ง AArch64 ์ง์๋ ์งํ ์ค์ ๋๋ค. ๊ฒ์คํธ ์์คํ ์ค ํ์ฌ 64๋นํธ Linux ๋น๋๋ง ์ง์๋ฉ๋๋ค. CPU, ๋ฉ๋ชจ๋ฆฌ, PCI, NVDIMM ์ค์ ์ ๋น๋ ๋จ๊ณ์์ ์ด๋ฃจ์ด์ง๋๋ค. ์๋ฒ ๊ฐ์ ๊ฐ์ ๋จธ์ ์ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์ต๋๋ค.
์ ๋ฒ์ ์์:
- ๋ฐ๊ฐ์ํ I/O๋ฅผ ๋ณ๋์ ํ๋ก์ธ์ค๋ก ์ด๋ํ๋ ์์
์ด ๊ณ์๋์์ต๋๋ค. ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋ก ์ฅ์น์ ์ํธ ์์ฉํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
๊ฐ์ ํธ์คํธ-์ฌ์ฉ์-blk . ์ด๋ฌํ ๋ณ๊ฒฝ์ ํตํด vhost-user ๋ชจ๋์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ธ๋ก ์ฅ์น๋ฅผ ๋ค์๊ณผ ๊ฐ์ ํด๋ผ์ฐ๋ ํ์ดํผ๋ฐ์ด์ ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.SPDK , ๋ฐ๊ฐ์ํ ์คํ ๋ฆฌ์ง์ฉ ๋ฐฑ์๋ - ๋ง์ง๋ง ๋ฆด๋ฆฌ์ค์ ๋์
๋ ๋คํธ์ํฌ ์์
์ ๋ฐฑ์๋๋ก ์ด๋ํ๋ ๊ธฐ๋ฅ ์ง์
๊ฐ์ ํธ์คํธ-์ฌ์ฉ์-๋ท , ๊ฐ์ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์๋ก์ด ๋ฐฑ์๋๋ก ํ์ฅ๋จ๊ฐ๋ณ๊ฒ ๋๋๋ฆฌ๋ค . ๋ฐฑ์๋๋ Rust๋ก ์์ฑ๋์์ผ๋ฉฐ ์ด์ Cloud Hypervisor์์ ์ฃผ์ ๋ฐ๊ฐ์ํ ๋คํธ์ํฌ ์ํคํ ์ฒ๋ก ์ฌ์ฉ๋ฉ๋๋ค. - ํธ์คํธ ํ๊ฒฝ๊ณผ ๊ฒ์คํธ ์์คํ
๊ฐ ํต์ ์ ํจ์จ์ฑ๊ณผ ๋ณด์์ ๋์ด๊ธฐ ์ํด virtio๋ฅผ ํตํด ์๋ํ๋ AF_VSOCK ์ฃผ์ ์ง์ (๊ฐ์ ๋คํธ์ํฌ ์์ผ)์ ๊ฐ์ถ ์์ผ์ ํ์ด๋ธ๋ฆฌ๋ ๊ตฌํ์ด ์ ์๋ฉ๋๋ค. ๊ตฌํ์ ํ๋ก์ ํธ ๊ฐ๋ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
ํญ์ฃฝ ์๋ง์กด์์ ๊ฐ๋ฐ. VSOCK์ ์ฌ์ฉํ๋ฉด ๊ฒ์คํธ ์์คํ ์ธก์ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ํธ์คํธ ๊ฐ์ ์ํธ ์์ฉ์ ์ํด ํ์ค POSIX ์์ผ API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ด๋ฌํ ์ํธ ์์ฉ์ ์ํด ์ผ๋ฐ ๋คํธ์ํฌ ํ๋ก๊ทธ๋จ์ ์ฝ๊ฒ ์ ์ฉํ๊ณ ํ๋์ ์๋ฒ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ ์ํธ ์์ฉ์ ๊ตฌํํ ์ ์์ต๋๋ค. - HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ๊ด๋ฆฌ API์ ๋ํ ์ด๊ธฐ ์ง์์ด ์ ๊ณต๋์์ต๋๋ค. ์์ผ๋ก ์ด API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฆฌ์์ค ํซ ํ๋ฌ๊ทธ โโ๋ฐ ํ๊ฒฝ ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ ๊ฐ์ ๊ฒ์คํธ ์์คํ ์์ ๋น๋๊ธฐ ์์ ์ ์์ํ ์ ์์ต๋๋ค.
- PCI ๋ฒ์ค ์๋ฎฌ๋ ์ด์ ์ด ํ์ํ์ง ์์ ์ต์ํ์ ๊ฒ์คํธ ์์คํ ์ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ virtio MMIO(Memory mapped virtio)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ ์ก ๊ตฌํ ๊ณ์ธต์ ์ถ๊ฐํ์ต๋๋ค.
- Cloud Hypervisor์์ ์ค์ฒฉ ๊ฒ์คํธ ์์คํ ์คํ์ ๋ํ ์ง์์ ํ์ฅํ๊ธฐ ์ํ ์ด๋์ ํฐ๋ธ์ ์ผํ์ผ๋ก virtio๋ฅผ ํตํด ๋ฐ๊ฐ์ํ IOMMU ์ฅ์น๋ฅผ ์ ๋ฌํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ค์ฒฉ ๋ฐ ์ง์ ์ฅ์น ์ ๋ฌ์ ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.
- Ubuntu 19.10์ ๋ํ ์ง์ ์ ๊ณต
- 64GB ์ด์์ RAM์ ๊ฐ์ถ ๊ฒ์คํธ ์์คํ ์ ์คํํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ์ฃผ๋ชฉํ ์ ์๋ ๊ฒ์
์ด ํ๋ซํผ์ ์ต์ํ์ ์ค๋ฒํค๋๋ก ๊ฐ์ ๋จธ์ ์ ์คํํ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ ์๋ฒ๋ฆฌ์ค ๊ฐ๋ฐ ๋ชจ๋ธ(์๋น์ค๋ก์์ ๊ธฐ๋ฅ)์ ์ฌ์ฉํ์ฌ ๊ตฌ์ถ๋ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ๊ณผ ์๋น์ค๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. Firecracker๋ ํ๋์จ์ด ๊ฐ์ํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์์ ํ ๊ฒฉ๋ฆฌํ๋ฉด์๋ ๊ธฐ์กด ์ปจํ ์ด๋์ ์ฑ๋ฅ๊ณผ ์ ์ฐ์ฑ์ ์ ๊ณตํ๋ microVM์ด๋ผ๋ ๊ฒฝ๋ ๊ฐ์ ๋จธ์ ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด Firecracker๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ microVM ์์๋ถํฐ ์ ํ๋ฆฌ์ผ์ด์ ์์๊น์ง์ ์๊ฐ์ 125ms๋ฅผ ์ด๊ณผํ์ง ์์ผ๋ฏ๋ก ์ด๋น ์ต๋ 150๊ฐ ํ๊ฒฝ์ ๊ฐ๋๋ก ์ ๊ฐ์ ๋จธ์ ์ ์์ํ ์ ์์ต๋๋ค.
Firecracker์ ์ ๋ฆด๋ฆฌ์ค์๋ API ํธ๋ค๋ฌ("--no-api")๋ฅผ ์คํํ์ง ์๊ณ ์๋ ๋ชจ๋๊ฐ ์ถ๊ฐ๋์ด ํ๊ฒฝ์ด ๊ตฌ์ฑ ํ์ผ์ ํ๋ ์ฝ๋ฉ๋ ์ค์ ์ผ๋ก๋ง ์ ํ๋ฉ๋๋ค. ์ ์ ๊ตฌ์ฑ์ "--config-file" ์ต์ ์ ํตํด ์ง์ ๋๋ฉฐ JSON ํ์์ผ๋ก ์ ์๋ฉ๋๋ค. ๋ช ๋ น์ค ์ต์ ์ค "-" ๊ตฌ๋ถ ๊ธฐํธ์ ๋ํ ์ง์๋ ์ถ๊ฐ๋์์ผ๋ฉฐ, ๊ทธ ํ์๋ ํ๋๊ทธ๊ฐ ์ฒ๋ฆฌ ์์ด ์ฒด์ธ์ ๋ฐ๋ผ ์ ๋ฌ๋ฉ๋๋ค.
ํญ์ฃฝ ๊ฐ๋ฐ์ ์๋ง์กด๋
์๋ง์กด๋
์ถ์ฒ : opennet.ru