Kernel-based Virtual Machine

Kernel-based Virtual Machine (KVM) is a virtualization module in the Linux kernel that allows the kernel to function as a hypervisor. It was merged into the Linux kernel mainline in kernel version 2.6.20, which was released on February 5, 2007.[1] KVM requires a processor with hardware virtualization extensions, such as Intel VT or AMD-V.[2] KVM has also been ported to other operating systems such as FreeBSD[3] and illumos[4] in the form of loadable kernel modules.

KVM
Screenshot of QEMU/KVM running NetBSD, OpenSolaris and Kubuntu guests on an Arch Linux host.
Original author(s)Qumranet
Developer(s)The Linux Kernel community
Repository
Written inC
Operating systemUnix-like
PlatformARM, IA-64, PowerPC, S/390, x86, x86-64
TypeHypervisor
LicenseGNU GPL or LGPL
Websitewww.linux-kvm.org

KVM was originally designed for x86 processors and has since been ported to S/390,[5] PowerPC,[6] IA-64, and ARM.[7]

KVM provides hardware-assisted virtualization for a wide variety of guest operating systems including Linux, BSD, Solaris, Windows, Haiku, ReactOS, Plan 9, AROS Research Operating System[8] and macOS.[9] In addition, Android 2.2, GNU/Hurd[10] (Debian K16), Minix 3.1.2a, Solaris 10 U3 and Darwin 8.0.1, together with other operating systems and some newer versions of these listed, are known to work with certain limitations.[11]

Additionally, KVM provides paravirtualization support for Linux, OpenBSD,[12] FreeBSD,[13] NetBSD,[14] Plan 9[15] and Windows guests using the VirtIO[16] API. This includes a paravirtual Ethernet card, disk I/O controller,[17] balloon device, and a VGA graphics interface using SPICE or VMware drivers.

History

Avi Kivity began the development of KVM in mid-2006 at Qumranet, a technology startup company[18] that was acquired by Red Hat in 2008.[19]

KVM surfaced in October, 2006[20] and was merged into the Linux kernel mainline in kernel version 2.6.20, which was released on 5 February 2007.[1]

KVM is maintained by Paolo Bonzini.[21]

Internals

A high-level overview of the KVM/QEMU virtualization environment[22]:3

KVM provides device abstraction but no processor emulation. It exposes the /dev/kvm interface, which a user mode host can then use to:

  • Set up the guest VM's address space. The host must also supply a firmware image (usually a custom BIOS when emulating PCs) that the guest can use to bootstrap into its main OS.
  • Feed the guest simulated I/O.
  • Map the guest's video display back onto the system host.

On Linux, QEMU versions 0.10.1 and later is one such userspace host. QEMU uses KVM when available to virtualize guests at near-native speeds, but otherwise falls back to software-only emulation.

Internally, KVM uses SeaBIOS as an open source implementation of a 16-bit x86 BIOS.[23]

Features

KVM supports hot plug vCPUs,[24] dynamic memory management,[25] and Live Migration since February 2007.[26][27] memory write intensive workload impacts in migration process[28]

Emulated hardware

ClassDevice
Video cardCirrus CLGD 5446 PCI VGA card, dummy VGA card with Bochs VESA extensions,[29] or VirtIO[30]
PCIi440FX or Q35[29]
Input devicePS/2 and USB Mouse/Keyboard[29]
Sound cardSound Blaster 16, ENSONIQ AudioPCI ES1370, Gravis Ultrasound GF1, CS4231A compatible, Intel HD Audio[29]
Ethernet Network cardAMD Am79C970A (Am7990), E1000 (Intel 82540EM, 82573L, 82544GC), NE2000, Realtek RTL8139 and VirtIO
Storage deviceIDE, SATA, SCSI, SAS, USB, NVMe and VirtIO
Watchdog timerIntel 6300ESB or IB700
RAMbetween 50 MB and 32 TB
CPU1 – 160 CPUs

Graphical management tools

libvirt supports KVM
  • Kimchi  web-based virtualization management tool for KVM
  • Virtual Machine Manager  supports creating, editing, starting, and stopping KVM-based virtual machines, as well as live or cold drag-and-drop migration of VMs between hosts.
  • Proxmox Virtual Environment  an open-source virtualization management package including KVM and LXC. It has a bare-metal installer, a web-based remote management GUI, a HA cluster stack, unified storage, flexible network, and optional commercial support.
  • OpenQRM  management platform for managing heterogeneous data center infrastructures.
  • GNOME Boxes  Gnome interface for managing libvirt guests on Linux.
  • oVirt  open-source virtualization management tool for KVM built on top of libvirt

Licensing

KVM's parts are licensed under various GNU licenses:[31]

  • KVM kernel module: GPL v2
  • KVM user module: LGPL v2
  • QEMU virtual CPU core library (libqemu.a) and QEMU PC system emulator: LGPL
  • Linux user mode QEMU emulator: GPL
  • BIOS files (bios.bin, vgabios.bin and vgabios-cirrus.bin): LGPL v2 or later
gollark: They rely on fancy internal magic, and have bad properties like needing to be run unconditionally and in the same order each time.
gollark: No.
gollark: <@509984943833874432> Hooks are EVIL. EVIL.
gollark: I like the Elm *architecture*, just not *much of Elm*.
gollark: If you hate React why are you using it?

See also

References

  1. "Linux kernel 2.6.20, Section 2.2. Virtualization support through KVM". kernelnewbies.org. 2007-02-05. Retrieved 2014-06-16.
  2. KVM FAQ: What do I need to use KVM?
  3. "FreeBSD Quarterly Status Report: Porting Linux KVM to FreeBSD".
  4. "KVM on illumos".
  5. "Gmane - Mail To News And Back Again". Archived from the original on 2007-09-29. Retrieved 2007-05-07.
  6. Gmane Loom Archived 2007-09-29 at the Wayback Machine
  7. "KVM/ARM Open Source Project". Archived from the original on 2013-03-10. Retrieved 2017-11-01.
  8. "KVM wiki: Guest support status". Retrieved 2007-05-27.
  9. "Running Mac OS X as a QEMU/KVM Guest". Retrieved 2014-08-20.
  10. "status". Gnu.org. Retrieved 2014-02-12.
  11. "Guest Support Status - KVM". Linux-kvm.org. Retrieved 2014-02-12.
  12. "OpenBSD man page virtio(4)". Retrieved 2018-02-04.
  13. "virtio binary packages for FreeBSD". Retrieved 2012-10-29.
  14. "NetBSD man page virtio(4)". Retrieved 2013-07-15.
  15. "plan9front". Retrieved 2013-02-11.
  16. "An API for virtual I/O: virtio". LWN.net. 2007-07-11. Retrieved 2014-04-16.
  17. "SCSI target for KVM wiki". linux-iscsi.org. 2012-08-07. Retrieved 2012-08-12.
  18. Interview: Avi Kivity Archived 2007-04-26 at the Wayback Machine on KernelTrap
  19. "Red Hat Advances Virtualization Leadership with Qumranet, Inc. Acquisition". Red Hat. 4 September 2008. Retrieved 16 June 2015.
  20. https://www.itworldcanada.com/article/kvm-15-equipped-with-live-migration/7901
  21. Libby Clark (7 April 2015). "Git Success Stories and Tips from KVM Maintainer Paolo Bonzini". Linux.com. Archived from the original on 15 March 2016. Retrieved 17 June 2015.
  22. Khoa Huynh; Stefan Hajnoczi (2010). "KVM/QEMU Storage Stack Performance Discussion" (PDF). IBM. Linux Plumbers Conference. Retrieved January 3, 2015.
  23. "SeaBIOS". seabios.org. 2013-12-21. Retrieved 2014-06-16.
  24. https://access.redhat.com/articles/1339413
  25. https://www.linux-kvm.org/page/FAQ#Is_dynamic_memory_management_for_guests_supported.3F
  26. https://lwn.net/Articles/223754/
  27. https://www.linux-kvm.org/page/Migration
  28. https://www.berrange.com/posts/2016/05/12/analysis-of-techniques-for-ensuring-migration-completion-with-kvm/
  29. wiki.qemu.org – QEMU Emulator User Documentation, read 2010-05-06
  30. "Introducing Virgil - 3D virtual GPU for qemu". 2013-07-18. Archived from the original on 2013-07-25.
  31. Licensing info from Ubuntu 7.04 /usr/share/doc/kvm/copyright

Bibliography

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.