ืขืงืจื•ื ื•ืช ื›ืœืœื™ื™ื ืฉืœ ืคืขื•ืœืช QEMU-KVM

ืขืงืจื•ื ื•ืช ื›ืœืœื™ื™ื ืฉืœ ืคืขื•ืœืช QEMU-KVM

ื”ื”ื‘ื ื” ื”ื ื•ื›ื—ื™ืช ืฉืœื™:

1) KVM

KVM (ืžื—ืฉื‘ ื•ื™ืจื˜ื•ืืœื™ ืžื‘ื•ืกืก ืœื™ื‘ื”) ื”ื•ื ื”ื™ืคืจื•ื•ื™ื–ืจ (VMM - Virtual Machine Manager) ื”ืคื•ืขืœ ื›ืžื•ื“ื•ืœ ื‘ืžืขืจื›ืช ื”ื”ืคืขืœื” ืœื™ื ื•ืงืก. ื™ืฉ ืฆื•ืจืš ื‘-Hypervisor ืขืœ ืžื ืช ืœื”ืคืขื™ืœ ืชื•ื›ื ื” ื›ืœืฉื”ื™ ื‘ืกื‘ื™ื‘ื” ืœื ืงื™ื™ืžืช (ื•ื™ืจื˜ื•ืืœื™ืช) ื•ื‘ืžืงื‘ื™ืœ ืœื”ืกืชื™ืจ ืžืชื•ื›ื ื” ื–ื• ืืช ื”ื—ื•ืžืจื” ื”ืคื™ื–ื™ืช ื”ืืžื™ืชื™ืช ืขืœื™ื” ืชื•ื›ื ื” ื–ื• ืคื•ืขืœืช. ื”-Hypervisor ืคื•ืขืœ ื›"ืžืจื•ื•ื—" ื‘ื™ืŸ ื”ื—ื•ืžืจื” ื”ืคื™ื–ื™ืช (ืžืืจื—) ืœืžืขืจื›ืช ื”ื”ืคืขืœื” ื”ื•ื™ืจื˜ื•ืืœื™ืช (ืื•ืจื—).

ืžื›ื™ื•ื•ืŸ ืฉ-KVM ื”ื•ื ืžื•ื“ื•ืœ ืกื˜ื ื“ืจื˜ื™ ืฉืœ ืœื™ื‘ืช ืœื™ื ื•ืงืก, ื”ื•ื ืžืงื‘ืœ ืืช ื›ืœ ื”ื˜ื•ื‘ื™ื ื”ื ื“ืจืฉื™ื ืžื”ืงืจื ืœ (ื ื™ื”ื•ืœ ื–ื™ื›ืจื•ืŸ, ืžืชื–ืžืŸ ื•ื›ื•'). ื•ื‘ื”ืชืื ืœื›ืš, ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ, ื›ืœ ื”ื”ื˜ื‘ื•ืช ื”ืœืœื• ืžื’ื™ืขื•ืช ืœืื•ืจื—ื™ื (ืฉื›ืŸ ื”ืื•ืจื—ื™ื ืขื•ื‘ื“ื™ื ืขืœ ื”ื™ืคืจื•ื•ื™ื–ืจ ืฉืคื•ืขืœ ืขืœ/ื‘ืงืจื ืœ ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” Linux).

KVM ื”ื•ื ืžื”ื™ืจ ืžืื•ื“, ืื‘ืœ ื›ืฉืœืขืฆืžื• ื–ื” ืœื ืžืกืคื™ืง ื›ื“ื™ ืœื”ืคืขื™ืœ ืžืขืจื›ืช ื”ืคืขืœื” ื•ื™ืจื˜ื•ืืœื™ืช, ื›ื™... ื–ื” ื“ื•ืจืฉ ืืžื•ืœืฆื™ื™ืช 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 โ€“> intermediate_code โ€“> x86

ื‘ืขื™ืงืจื•ืŸ, ืืชื” ื™ื›ื•ืœ ืœื”ืจื™ืฅ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืขืœ QEMU ืขืœ ื›ืœ ืžืืจื—, ืืคื™ืœื• ืขื ื“ื’ืžื™ ืžืขื‘ื“ื™ื ื™ืฉื ื™ื ื™ื•ืชืจ ืฉืื™ื ื ืชื•ืžื›ื™ื ื‘-Intel VT-x (ื˜ื›ื ื•ืœื•ื’ื™ื™ืช ื•ื™ืจื˜ื•ืืœื™ื–ืฆื™ื” ืฉืœ ืื™ื ื˜ืœ) / AMD SVM (AMD Secure Virtual Machine). ืขื ื–ืืช, ื‘ืžืงืจื” ื–ื”, ื–ื” ื™ืขื‘ื•ื“ ืœืื˜ ืžืื•ื“, ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉื™ืฉ ืฆื•ืจืš ืœื”ื“ืจ ืžื—ื“ืฉ ืืช ื”ืงื•ื“ ื”ื‘ื™ื ืืจื™ ื”ืžื‘ืฆืข ืคืขืžื™ื™ื, ื‘ืืžืฆืขื•ืช TCG (TCG ื”ื•ื ืžื”ื“ืจ Just-in-Time).

ื”ึธื”ึตืŸ. QEMU ืขืฆืžื• ื”ื•ื ืžื’ื” ืžื’ื ื™ื‘, ืื‘ืœ ื–ื” ืขื•ื‘ื“ ืœืื˜ ืžืื•ื“.

3) ื˜ื‘ืขื•ืช ื”ื’ื ื”

ืขืงืจื•ื ื•ืช ื›ืœืœื™ื™ื ืฉืœ ืคืขื•ืœืช QEMU-KVM

ืงื•ื“ ืชื•ื›ื ื™ืช ื‘ื™ื ืืจื™ ื‘ืžืขื‘ื“ื™ื ืขื•ื‘ื“ ืžืกื™ื‘ื” ืžืกื•ื™ืžืช, ืื‘ืœ ื”ื•ื ืžืžื•ืงื ื‘ืจืžื•ืช ืฉื•ื ื•ืช (ื˜ื‘ืขื•ืช / ื˜ื‘ืขื•ืช ื”ื’ื ื”) ืขื ืจืžื•ืช ืฉื•ื ื•ืช ืฉืœ ื’ื™ืฉื” ืœื ืชื•ื ื™ื, ืžื”ืžื•ืขื“ืคื™ื ื‘ื™ื•ืชืจ (ื˜ื‘ืขืช 0), ื•ืขื“ ื”ืžื•ื’ื‘ืœื™ื ื‘ื™ื•ืชืจ, ื”ืžื•ืกื“ืจื™ื ื•"ืขื ื”ืื•ืžื™ื ืžื”ื•ื“ืงื™ื " (ื˜ื‘ืขืช 3).

ืžืขืจื›ืช ื”ื”ืคืขืœื” (ืงืจื ืœ OS) ืคื•ืขืœืช ืขืœ Ring 0 (ืžืฆื‘ ืœื™ื‘ื”) ื•ื™ื›ื•ืœื” ืœืขืฉื•ืช ืžื” ืฉื”ื™ื ืจื•ืฆื” ืขื ื›ืœ ื ืชื•ื ื™ื ื•ืžื›ืฉื™ืจ. ื™ื™ืฉื•ืžื™ ืžืฉืชืžืฉ ืคื•ืขืœื™ื ื‘ืจืžืช ื”ื˜ื‘ืขืช 3 (ืžืฆื‘ ืžืฉืชืžืฉ) ื•ืื™ื ื ืžื•ืจืฉื™ื ืœืขืฉื•ืช ืžื” ืฉื”ื ืจื•ืฆื™ื, ืืœื ื—ื™ื™ื‘ื™ื ืœื‘ืงืฉ ื’ื™ืฉื” ื‘ื›ืœ ืคืขื ื›ื“ื™ ืœื‘ืฆืข ืคืขื•ืœื” ืžืกื•ื™ืžืช (ืœืคื™ื›ืš, ืœื™ื™ืฉื•ืžื™ ืžืฉืชืžืฉ ื™ืฉ ื’ื™ืฉื” ืจืง ืœื ืชื•ื ื™ื ืฉืœื”ื ื•ืื™ื ื ื™ื›ื•ืœื™ื "ืœืงื‘ืœ ืœืชื•ืš" ืืจื’ื– ื”ื—ื•ืœ ืฉืœ ืžื™ืฉื”ื• ืื—ืจ). ื˜ื‘ืขืช 1 ื•-2 ืžื™ื•ืขื“ื•ืช ืœืฉื™ืžื•ืฉ ืขืœ ื™ื“ื™ ื ื”ื’ื™ื.

ืœืคื ื™ ื”ืžืฆืืช Intel VT-x / AMD SVM, ื”ื™ืคืจื•ื•ื™ื–ื•ืจื™ื ืคืขืœื• ืขืœ ืฆืœืฆื•ืœ 0, ื•ื”ืื•ืจื—ื™ื ืจืฆื• ืขืœ ืฆืœืฆื•ืœ 1. ืžื›ื™ื•ื•ืŸ ืฉืœืฆืœืฆื•ืœ 1 ืื™ืŸ ืžืกืคื™ืง ื–ื›ื•ื™ื•ืช ืœืคืขื•ืœื” ืจื’ื™ืœื” ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื”, ืขื ื›ืœ ืฉื™ื—ื” ืžื•ืกืžื›ืช ืžืžืขืจื›ืช ื”ืื•ืจื—ืช, hypervisor ื”ื™ื” ืฆืจื™ืš ืœืฉื ื•ืช ืืช ื”ืงืจื™ืื” ื”ื–ื• ืชื•ืš ื›ื“ื™ ืชื ื•ืขื” ื•ืœื‘ืฆืข ืื•ืชื” ืขืœ ื˜ื‘ืขืช 0 (ื‘ื“ื•ืžื” ืœ-QEMU). ื”ึธื”ึตืŸ. ืื•ืจื— ื‘ื™ื ืืจื™ ืœื ื‘ื•ืฆืข ื™ืฉื™ืจื•ืช ืขืœ ื”ืžืขื‘ื“, ื•ื›ืœ ืคืขื ืขื‘ืจ ื›ืžื” ืฉื™ื ื•ื™ื™ื ื‘ื™ื ื™ื™ื ืชื•ืš ื›ื“ื™ ืชื ื•ืขื”.

ื”ืชืงื•ืจื” ื”ื™ื™ืชื” ืžืฉืžืขื•ืชื™ืช ื•ื–ื• ื”ื™ื™ืชื” ื‘ืขื™ื” ื’ื“ื•ืœื”, ื•ืื– ื™ืฆืจื ื™ ื”ืžืขื‘ื“ื™ื, ืœืœื ืชืœื•ืช ื–ื” ื‘ื–ื”, ืคืจืกืžื• ืกื˜ ื”ื•ืจืื•ืช ืžื•ืจื—ื‘ (Intel VT-x / AMD SVM) ืฉืืคืฉืจื• ื‘ื™ืฆื•ืข ืงื•ื“ ืžืขืจื›ืช ื”ืคืขืœื” ืื•ืจื—ื™ื ื‘ืฆื•ืจื” ื™ืฉื™ืจื” ืขืœ ื”ืžืขื‘ื“ ื”ืžืืจื— (ืขืงื™ืคืช ื›ืœ ืฉืœื‘ื™ ื‘ื™ื ื™ื™ื ื™ืงืจื™ื, ื›ืคื™ ืฉื”ื™ื” ืœืคื ื™ ื›ืŸ).

ืขื ื›ื ื™ืกืชื• ืฉืœ Intel VT-x / AMD SVM, ื ื•ืฆืจื” ื˜ื‘ืขืช ื—ื“ืฉื” ืžื™ื•ื—ื“ืช ื‘ืจืžื” -1 (ืžื™ื ื•ืก ืื—ืช). ื•ืขื›ืฉื™ื• ื”-Hypervisor ืคื•ืขืœ ืขืœื™ื•, ื•ื”ืื•ืจื—ื™ื ืคื•ืขืœื™ื ืขืœ Ring 0 ื•ืžืงื‘ืœื™ื ื’ื™ืฉื” ืžื•ืขื“ืคืช ืœ-CPU.

ื”ึธื”ึตืŸ. ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ:

  • ื”ืžืืจื— ืคื•ืขืœ ืขืœ ื˜ื‘ืขืช 0
  • ืื•ืจื—ื™ื ืขื•ื‘ื“ื™ื ืขืœ ื˜ื‘ืขืช 0
  • hypervisor ืคื•ืขืœ ืขืœ ื˜ื‘ืขืช -1

4) QEMU-KVM

KVM ื ื•ืชืŸ ืœืื•ืจื—ื™ื ื’ื™ืฉื” ืœ-Ring 0 ื•ืžืฉืชืžืฉ ื‘-QEMU ื›ื“ื™ ืœื—ืงื•ืช ืืช ื”-I/O (ืžืขื‘ื“, ื“ื™ืกืงื™ื, ืจืฉืช, ื•ื™ื“ืื•, PCI, USB, ื™ืฆื™ืื•ืช ื˜ื•ืจื™ื•ืช ื•ื›ื•' ืฉื”ืื•ืจื—ื™ื "ืจื•ืื™ื" ื•ืขื•ื‘ื“ื™ื ืื™ืชืŸ).

ืžื›ืืŸ QEMU-KVM (ืื• KVM-QEMU) :)

ืงืจื“ื™ื˜ื™ื
ืชืžื•ื ื” ืœืžืฉื•ืš ืชืฉื•ืžืช ืœื‘
ืชืžื•ื ื” ืฉืœ ื˜ื‘ืขื•ืช ื”ื’ื ื”

ื .ื‘. ื”ื˜ืงืกื˜ ืฉืœ ืžืืžืจ ื–ื” ืคื•ืจืกื ื‘ืžืงื•ืจ ื‘ืขืจื•ืฅ ื”ื˜ืœื’ืจื @RU_Voip ื›ืชืฉื•ื‘ื” ืœืฉืืœื” ืฉืœ ืื—ื“ ืžืžืฉืชืชืคื™ ื”ืขืจื•ืฅ.

ื›ืชื‘ื• ื‘ืชื’ื•ื‘ื•ืช ืื™ืคื” ืื ื™ ืœื ืžื‘ื™ืŸ ื ื›ื•ืŸ ืืช ื”ื ื•ืฉื ืื• ืื ื™ืฉ ืžื” ืœื”ื•ืกื™ืฃ.

ืชื•ื“ื” ืœืš!

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”