QEMU-KVM์˜ ์ผ๋ฐ˜ ์ž‘๋™ ์›๋ฆฌ

QEMU-KVM์˜ ์ผ๋ฐ˜ ์ž‘๋™ ์›๋ฆฌ

๋‚˜์˜ ํ˜„์žฌ ์ดํ•ด:

1) KVM

KVM(Kernel-based Virtual Machine)์€ Linux OS์—์„œ ๋ชจ๋“ˆ๋กœ ์‹คํ–‰๋˜๋Š” ํ•˜์ดํผ๋ฐ”์ด์ €(VMM โ€“ Virtual Machine Manager)์ž…๋‹ˆ๋‹ค. ์กด์žฌํ•˜์ง€ ์•Š๋Š”(๊ฐ€์ƒ) ํ™˜๊ฒฝ์—์„œ ์ผ๋ถ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์‹œ์— ์ด ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹ค์ œ ๋ฌผ๋ฆฌ์  ํ•˜๋“œ์›จ์–ด๋ฅผ ์ด ์†Œํ”„ํŠธ์›จ์–ด๋กœ๋ถ€ํ„ฐ ์ˆจ๊ธฐ๋ ค๋ฉด ํ•˜์ดํผ๋ฐ”์ด์ €๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ดํผ๋ฐ”์ด์ €๋Š” ๋ฌผ๋ฆฌ์  ํ•˜๋“œ์›จ์–ด(ํ˜ธ์ŠคํŠธ)์™€ ๊ฐ€์ƒ OS(๊ฒŒ์ŠคํŠธ) ์‚ฌ์ด์—์„œ "์ŠคํŽ˜์ด์„œ" ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

KVM์€ Linux ์ปค๋„์˜ ํ‘œ์ค€ ๋ชจ๋“ˆ์ด๋ฏ€๋กœ ์ปค๋„์—์„œ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ(๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, ์Šค์ผ€์ค„๋Ÿฌ ๋“ฑ)์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒฐ๊ตญ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ด์ ์€ ๊ฒŒ์ŠคํŠธ์—๊ฒŒ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค(๊ฒŒ์ŠคํŠธ๋Š” Linux OS ์ปค๋„์—์„œ ์‹คํ–‰๋˜๋Š” ํ•˜์ดํผ๋ฐ”์ด์ €์—์„œ ์ž‘์—…ํ•˜๋ฏ€๋กœ).

KVM์€ ๋งค์šฐ ๋น ๋ฅด์ง€๋งŒ ๊ทธ ์ž์ฒด๋งŒ์œผ๋กœ๋Š” ๊ฐ€์ƒ OS๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” I/O ์—๋ฎฌ๋ ˆ์ด์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. I/O(CPU, ๋””์Šคํฌ, ๋„คํŠธ์›Œํฌ, ๋น„๋””์˜ค, PCI, USB, ์ง๋ ฌ ํฌํŠธ ๋“ฑ)์˜ ๊ฒฝ์šฐ KVM์€ QEMU๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

2) QEMU

QEMU(Quick Emulator)๋Š” ํ•˜๋‚˜์˜ ์•„ํ‚คํ…์ฒ˜์šฉ์œผ๋กœ ์„ค๊ณ„๋œ ์šด์˜ ์ฒด์ œ๋ฅผ ๋‹ค๋ฅธ ์•„ํ‚คํ…์ฒ˜์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋‹ค์–‘ํ•œ ์žฅ์น˜์šฉ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์ž…๋‹ˆ๋‹ค(์˜ˆ: ARM -> x86). ํ”„๋กœ์„ธ์„œ ์™ธ์—๋„ QEMU๋Š” ๋„คํŠธ์›Œํฌ ์นด๋“œ, HDD, ๋น„๋””์˜ค ์นด๋“œ, PCI, USB ๋“ฑ ๋‹ค์–‘ํ•œ ์ฃผ๋ณ€ ์žฅ์น˜๋ฅผ ์—๋ฎฌ๋ ˆ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค :

๋ช…๋ น์–ด/๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ(์˜ˆ: ARM)๋Š” TCG(Tiny Code Generator) ๋ณ€ํ™˜๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๊ฐ„ ํ”Œ๋žซํผ ๋…๋ฆฝ์  ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ ๋‹ค์Œ ์ด ํ”Œ๋žซํผ ๋…๋ฆฝ์  ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋Š” ๋Œ€์ƒ ๋ช…๋ น์–ด/์ฝ”๋“œ(์˜ˆ: x86)๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

ARM โ€“> ์ค‘๊ฐ„ ์ฝ”๋“œ โ€“> x86

๊ธฐ๋ณธ์ ์œผ๋กœ Intel VT-x(Intel Virtualization Technology)/AMD SVM(AMD Secure Virtual Machine)์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ด์ „ ํ”„๋กœ์„ธ์„œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋ชจ๋“  ํ˜ธ์ŠคํŠธ์˜ QEMU์—์„œ ๊ฐ€์ƒ ๋จธ์‹ ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฒฝ์šฐ ์‹คํ–‰ ์ค‘์ธ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋ฅผ TCG(TCG๋Š” Just-in-Time ์ปดํŒŒ์ผ๋Ÿฌ์ž„)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฆ‰์„์—์„œ ๋‘ ๋ฒˆ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋Š๋ฆฌ๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ €๊ฒƒ๋“ค. QEMU ์ž์ฒด๋Š” ๋งค์šฐ ํ›Œ๋ฅญํ•˜์ง€๋งŒ ์ž‘๋™ ์†๋„๊ฐ€ ๋งค์šฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

3) ๋ณดํ˜ธ ๋ง

QEMU-KVM์˜ ์ผ๋ฐ˜ ์ž‘๋™ ์›๋ฆฌ

ํ”„๋กœ์„ธ์„œ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋Š” ์ด์œ ๊ฐ€ ์žˆ์–ด์„œ ์ž‘๋™ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ํŠน๊ถŒ์ด ์žˆ๋Š” ๊ฒƒ(๋ง 0)๋ถ€ํ„ฐ ๊ฐ€์žฅ ์ œํ•œ์ ์ด๊ณ  ๊ทœ์ œ๋œ ๊ฒƒ๊นŒ์ง€ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์ˆ˜์ค€์ด ๋‹ค๋ฅธ ๋‹ค์–‘ํ•œ ์ˆ˜์ค€(๋ง/๋ณดํ˜ธ ๋ง)์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. โ€ (๋ง 3 ).

์šด์˜ ์ฒด์ œ(OS ์ปค๋„)๋Š” ๋ง 0(์ปค๋„ ๋ชจ๋“œ)์—์„œ ์‹คํ–‰๋˜๋ฉฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ฐ ์žฅ์น˜์— ๋Œ€ํ•ด ์›ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ง 3 ์ˆ˜์ค€(์‚ฌ์šฉ์ž ๋ชจ๋“œ)์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ์›ํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ด๋“  ํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋Œ€์‹  ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋งค๋ฒˆ ์•ก์„ธ์Šค๋ฅผ ์š”์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ์—๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ "์–ป์„ ์ˆ˜ ์—†์Œ"). ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ƒŒ๋“œ๋ฐ•์Šค์—'). ๋ง 1๊ณผ 2๋Š” ์šด์ „์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋„๋ก ๊ณ ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Intel VT-x/AMD SVM์ด ๋ฐœ๋ช…๋˜๊ธฐ ์ „์—๋Š” ํ•˜์ดํผ๋ฐ”์ด์ €๊ฐ€ ๋ง 0์—์„œ ์‹คํ–‰๋˜์—ˆ๊ณ  ๊ฒŒ์ŠคํŠธ๋Š” ๋ง 1์—์„œ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ง 1์—๋Š” OS์˜ ์ •์ƒ์ ์ธ ์ž‘๋™์„ ์œ„ํ•œ ์ถฉ๋ถ„ํ•œ ๊ถŒํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฒŒ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ ๊ฐ๊ฐ์˜ ๊ถŒํ•œ ์žˆ๋Š” ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜์ดํผ๋ฐ”์ด์ €๋Š” ์ด ํ˜ธ์ถœ์„ ์ฆ‰์‹œ ์ˆ˜์ •ํ•˜๊ณ  ๋ง 0์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค(QEMU์™€ ์œ ์‚ฌ). ์ €๊ฒƒ๋“ค. ๊ฒŒ์ŠคํŠธ ๋ฐ”์ด๋„ˆ๋ฆฌ NOT ํ”„๋กœ์„ธ์„œ์—์„œ ์ง์ ‘ ์‹คํ–‰๋˜์—ˆ์œผ๋ฉฐ ๋งค๋ฒˆ ์ฆ‰์‹œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ค‘๊ฐ„ ์ˆ˜์ •์„ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค.

์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ƒ๋‹นํ–ˆ๊ณ  ์ด๋Š” ํฐ ๋ฌธ์ œ์˜€์œผ๋ฉฐ ํ”„๋กœ์„ธ์„œ ์ œ์กฐ์—…์ฒด๋Š” ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒŒ์ŠคํŠธ OS ์ฝ”๋“œ ์‹คํ–‰์„ ํ—ˆ์šฉํ•˜๋Š” ํ™•์žฅ๋œ ๋ช…๋ น ์„ธํŠธ(Intel VT-x / AMD SVM)๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณง์žฅ ํ˜ธ์ŠคํŠธ ํ”„๋กœ์„ธ์„œ์—์„œ(์ด์ „์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ค‘๊ฐ„ ๋‹จ๊ณ„๋ฅผ ์šฐํšŒ)

Intel VT-x / AMD SVM์˜ ์ถœํ˜„์œผ๋กœ ํŠน๋ณ„ํ•œ ์ƒˆ๋กœ์šด ๋ง ๋ ˆ๋ฒจ -1(๋งˆ์ด๋„ˆ์Šค 0)์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ํ•˜์ดํผ๋ฐ”์ด์ €๊ฐ€ ์—ฌ๊ธฐ์—์„œ ์‹คํ–‰๋˜๊ณ  ๊ฒŒ์ŠคํŠธ๋Š” ๋ง XNUMX์—์„œ ์‹คํ–‰๋˜์–ด CPU์— ๋Œ€ํ•œ ํŠน๊ถŒ์ ์ธ ์•ก์„ธ์Šค๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

์ €๊ฒƒ๋“ค. ๊ฒฐ๊ตญ:

  • ํ˜ธ์ŠคํŠธ๋Š” ๋ง 0์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์†๋‹˜์€ ๋ง 0์—์„œ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์ดํผ๋ฐ”์ด์ €๋Š” ๋ง -1์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

4) QEMU-KVM

KVM์€ ๊ฒŒ์ŠคํŠธ์—๊ฒŒ ๋ง 0์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  QEMU๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ I/O(๊ฒŒ์ŠคํŠธ๊ฐ€ "๋ณด๊ณ " ์ž‘์—…ํ•˜๋Š” ํ”„๋กœ์„ธ์„œ, ๋””์Šคํฌ, ๋„คํŠธ์›Œํฌ, ๋น„๋””์˜ค, PCI, USB, ์ง๋ ฌ ํฌํŠธ ๋“ฑ)๋ฅผ ์—๋ฎฌ๋ ˆ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ QEMU-KVM(๋˜๋Š” KVM-QEMU) :)

CREDITS
๊ด€์‹ฌ์„ ๋Œ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ง„
๋ณดํ˜ธ ๋ง ์‚ฌ์ง„

์ถ”์‹ : ์ด ๊ธฐ์‚ฌ์˜ ํ…์ŠคํŠธ๋Š” ์›๋ž˜ ํ…”๋ ˆ๊ทธ๋žจ ์ฑ„๋„์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. @RU_Voip ์ฑ„๋„ ์ฐธ๊ฐ€์ž ์ค‘ ํ•œ ์‚ฌ๋žŒ์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์ž…๋‹ˆ๋‹ค.

์ œ๊ฐ€ ์ฃผ์ œ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์ด๋‚˜ ์ถ”๊ฐ€ํ•  ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ์ ์–ด์ฃผ์„ธ์š”.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ถœ์ฒ˜ : habr.com

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