virtio-nvgpu โ€” KVM ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ NVIDIA GPU์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋ชจ๋“ˆ

virtio-nvgpu ํ”„๋กœ์ ํŠธ๋Š” KVM ํ•˜์ดํผ๋ฐ”์ด์ €์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒŒ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ NVIDIA GPU์— ์ตœ์†Œํ•œ์˜ ์„ฑ๋Šฅ ์ €ํ•˜๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” virtio ์žฅ์น˜๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ฒŒ์ŠคํŠธ ์‹œ์Šคํ…œ์— ๋กœ๋“œ๋˜๋Š” ์ปค๋„ ๋ชจ๋“ˆ๊ณผ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰๋˜๋Š” virtio ์žฅ์น˜๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ปค๋„ ๋ชจ๋“ˆ ์ฝ”๋“œ๋Š” C ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ GPLv2 ๋ผ์ด์„ ์Šค๊ฐ€ ์ ์šฉ๋˜๊ณ , virtio ์žฅ์น˜ ์ฝ”๋“œ๋Š” Rust ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ Apache 2.0 ๋ผ์ด์„ ์Šค๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋“ค์— ๋”ฐ๋ฅด๋ฉด GPU ์ ‘๊ทผ ์‹œ ์„ฑ๋Šฅ ์ €ํ•˜๋Š” 2%๋ฅผ ๋„˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋†’์€ ์„ฑ๋Šฅ์€ ioctl ํ˜ธ์ถœ์„ ๋„ค์ดํ‹ฐ๋ธŒ NVIDIA ๋“œ๋ผ์ด๋ฒ„๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ณ  API ์ˆ˜์ค€์—์„œ ์š”์ฒญ์„ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๊ณ  NVIDIA ๋“œ๋ผ์ด๋ฒ„ ABI ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•จ์œผ๋กœ์จ ๋‹ฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฒŒ์ŠคํŠธ ์ธก์—์„œ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜๋Š” ๊ณ ์ˆ˜์ค€ NVIDIA ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ŠคํŠธ ์‹œ์Šคํ…œ์— ์ปค๋„ ๋ชจ๋“ˆ์ด ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ /dev/nvidiactl, /dev/nvidia0โ€ฆN ๋ฐ /dev/nvidia-uvm ์žฅ์น˜ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๊ณ  ioctl() ๋ฐ mmap() ํ˜ธ์ถœ์„ ๊ฐ€์ƒ ํ(virtqueue)๋ฅผ ํ†ตํ•ด ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์˜ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ „๋‹ฌํ•˜๋ฉฐ, ํ•ธ๋“ค๋Ÿฌ๋Š” ์ด๋ฅผ NVIDIA ํ˜ธ์ŠคํŠธ ๋“œ๋ผ์ด๋ฒ„๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ๊ณผ ๊ฐ€์ƒ ๋จธ์‹  ๊ฐ„์˜ ์ปจํ…์ŠคํŠธ ์ „ํ™˜์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ช…๋ น ๋ฒ„ํผ๋Š” ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ๊ณผ GPU์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์— ๋งคํ•‘(mmapping)๋ฉ๋‹ˆ๋‹ค.

VFIO ํŒจ์Šค์Šค๋ฃจ(VFIO Passthrough)์™€ ๊ฐ™์€ ๋…์ ์ ์ธ GPU ์•ก์„ธ์Šค ํŒจ์Šค์Šค๋ฃจ ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ, virtio-nvgpu ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ๋Ÿฌ ๊ธฐ๊ธฐ์—์„œ ํ•˜๋‚˜์˜ GPU์— ๋Œ€ํ•œ ๊ณต์œ  ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ƒ ๊ธฐ๊ธฐvirtio-nvgpu๋Š” virtio-gpu(Venus, VirGL)์™€ ๋‹ฌ๋ฆฌ Vulkan ๋ฐ OpenGL ๊ทธ๋ž˜ํ”ฝ API ๋ณ€ํ™˜ ์ˆ˜์ค€์ด ์•„๋‹Œ NVIDIA ๋“œ๋ผ์ด๋ฒ„์— ๋Œ€ํ•œ ABI ํŒจ์Šค์Šค๋ฃจ๋ฅผ ํ†ตํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. virtio-nvgpu์˜ ๋‹จ์ ์œผ๋กœ๋Š” ์™„์ „ํ•œ IOMMU ๊ธฐ๋ฐ˜ ๊ฒฉ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ์ (๊ฒŒ์ŠคํŠธ ์‹œ์Šคํ…œ์€ NVIDIA ํ˜ธ์ŠคํŠธ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ†ตํ•ด ์ž‘๋™ํ•˜๋ฉฐ ioctl ํ˜ธ์ถœ ํ•„ํ„ฐ๋ง์œผ๋กœ ์ œํ•œ๋จ)๊ณผ NVIDIA ๋“œ๋ผ์ด๋ฒ„ ABI์— ์˜์กดํ•œ๋‹ค๋Š” ์ (ABI๋Š” ๋ฒ„์ „๋งˆ๋‹ค ๋ณ€๊ฒฝ๋˜๋ฏ€๋กœ virtio-nvgpu๋„ ์ด์— ๋งž์ถฐ ์ˆ˜์ •ํ•ด์•ผ ํ•จ)์ด ์žˆ์Šต๋‹ˆ๋‹ค.

virtio-nvgpu๋Š” Vulkan, OpenGL, NVENC ๋ฐ CUDA API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ Œ๋”๋ง, ๋น„๋””์˜ค ์ธ์ฝ”๋”ฉ ๋ฐ ์ปดํ“จํŒ…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ์‘์šฉ ๋ถ„์•ผ๋กœ๋Š” ํด๋ผ์šฐ๋“œ ๊ฒŒ์ž„ ์„œ๋น„์Šค ๋˜๋Š” ๊ฒŒ์ž„์ด๋‚˜ ๊ทธ๋ž˜ํ”ฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ๊ฐ€์ƒ ๋ฐ์Šคํฌํ†ฑ ํ™˜๊ฒฝ ๊ตฌ์ถ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์ƒ ๊ธฐ๊ธฐ์ด ์‹œ์Šคํ…œ์€ ๋ Œ๋”๋ง, NVENC๋ฅผ ์‚ฌ์šฉํ•œ ํ•˜๋“œ์›จ์–ด ์ธ์ฝ”๋”ฉ, ๊ทธ๋ฆฌ๊ณ  ์••์ถ•๋œ ๋น„๋””์˜ค ์ŠคํŠธ๋ฆผ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ์„ ์›๊ฒฉ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „์†กํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster