# Màquina virtual basada en nucli

La màquina virtual basada en nucli (KVM) és un mòdul de virtualització gratuït i de codi obert al nucli de Linux que permet que el nucli funcioni com a hipervisor. Es va fusionar amb el nucli principal de Linux a la versió 2.6.20, que es va publicar el 5 de febrer de 2007. KVM requereix un processador amb extensions de virtualització de maquinari, com Intel VT o AMD-V. KVM també s'ha portat a altres sistemes operatius com FreeBSD i illumos en forma de mòduls del nucli carregables.
KVM va ser dissenyat originalment per a processadors x86, però des de llavors s'ha portat a ESA/390, PowerPC, IA-64 i ARM. El port IA-64 es va eliminar el 2014.
KVM admet la virtualització assistida per maquinari per a una gran varietat de sistemes operatius convidats, com ara BSD, Solaris, Windows, Haiku, ReactOS, Plan 9, AROS, macOS i fins i tot altres sistemes Linux. A més, se sap que Android 2.2, GNU/Hurd (Debian K16), Minix 3.1.2a, Solaris 10 U3 i Darwin 8.0.1, juntament amb altres sistemes operatius i algunes versions més noves d'aquests enumerats, funcionen amb certs limitacions.
A més, KVM proporciona suport de paravirtualització per a convidats Linux, OpenBSD, FreeBSD, NetBSD, Plan 9 i Windows utilitzant l'API VirtIO. Això inclou una targeta Ethernet paravirtual, un controlador d'E/S de disc, controlador de globus i una interfície gràfica VGA amb controladors SPICE o VMware.

## Història

Avi Kivity va començar el desenvolupament de KVM a mitjans de 2006 a Qumranet, una empresa d'inici de tecnologia que va ser adquirida per Red Hat el 2008.
KVM va aparèixer l'octubre de 2006 i es va fusionar amb la línia principal del nucli de Linux a la versió del nucli 2.6.20, que es va publicar el 5 de febrer de 2007.
El manteniment de KVM és Paolo Bonzini.

## Interns

KVM proporciona l'abstracció del dispositiu però no emula el processador. Exposa el/dev/kvm, que un amfitrió en mode d'usuari pot utilitzar per:
* Configureu l'espai d'adreces de la VM convidada. L'amfitrió també ha de proporcionar una imatge de microprogramari (normalment una BIOS personalitzada quan emula ordinadors) que el convidat pot utilitzar per arrencar al seu sistema operatiu principal.
* Alimenta l'E/S simulada del convidat.
* Assigna la pantalla de vídeo del convidat a l'amfitrió del sistema.
Originalment, es va proporcionar una versió bifurcada de QEMU per llançar convidats i fer front a l'emulació de maquinari que no és gestionada pel nucli. Aquest suport es va fusionar finalment amb el projecte upstream. Ara hi ha nombrosos monitors de màquines virtuals (VMM) que poden utilitzar la interfície KVM, incloent kvmtool, crosvm i Firecracker i nombrosos VMM especialitzats construïts amb marcs com rust-vmm.
Internament, KVM utilitza SeaBIOS com a implementació de codi obert d'una BIOS x86 de 16 bits.

## Característiques

KVM té suport per a vCPU intercanviables en calent, gestió de memòria dinàmica, i Live Migration des del febrer de 2007. També redueix l'impacte que tenen les càrregues de treball intensives en escriptura de memòria en el procés de migració.

## Maquinari emulat

El propi KVM emula molt poc maquinari, en lloc d'apostar-se a una aplicació client de nivell superior com ara QEMU, crosvm o Firecracker per a l'emulació del dispositiu.
KVM proporciona els següents dispositius emulats:
* CPU virtual i memòria
* VirtIO

## Eines de gestió gràfica

* Kimchi – eina de gestió de virtualització basada en web per a KVM
* Gestor de màquines virtuals – admet la creació, l'edició, l'inici i l'aturada de màquines virtuals basades en KVM, així com la migració d'arrossegar i deixar anar en directe o en fred de màquines virtuals entre hosts.
* Entorn virtual Proxmox – un paquet de gestió de virtualització de codi obert que inclou KVM i LXC. Té un instal·lador complet, una GUI de gestió remota basada en web, una pila de clúster HA, emmagatzematge unificat, xarxa flexible i suport comercial opcional.
* OpenQRM – plataforma de gestió per a la gestió d'infraestructures heterogènies de centres de dades
* Caixes de GNOME – Interfície de Gnome per gestionar convidats de libvirt a Linux
* oVirt – eina de gestió de virtualització de codi obert per a KVM construïda sobre libvirt

## Referències

* ↑ «Linux kernel 2.6.20, Section 2.2. Virtualization support through KVM» (en anglès). kernelnewbies.org, 05-02-2007. [Consulta: 16 juny 2014].
* ↑ «FreeBSD Quarterly Status Report: Porting Linux KVM to FreeBSD» (en anglès).
* ↑ «KVM on illumos» (en anglès).
* ↑ «Gmane - Mail To News And Back Again» (en anglès). Arxivat de l'original el 2007-09-29. [Consulta: 7 maig 2007].
* ↑ «KVM/ARM Open Source Project» (en anglès). Arxivat de l'original el 2013-03-10. [Consulta: 1r novembre 2017].
* ↑ «kernel/git/torvalds/linux.git: KVM: ia64: remove» (en anglès).
* ↑ «KVM wiki: Guest support status» (en anglès). [Consulta: 27 maig 2007].
* ↑ «Running Mac OS X as a QEMU/KVM Guest» (en anglès). [Consulta: 20 agost 2014].
* ↑ «status» (en anglès). Gnu.org. [Consulta: 12 febrer 2014].
* ↑ «Guest Support Status - KVM» (en anglès). Linux-kvm.org. [Consulta: 12 febrer 2014].
* ↑ «OpenBSD man page virtio(4)» (en anglès). [Consulta: 4 febrer 2018].
* ↑ «virtio binary packages for FreeBSD» (en anglès). [Consulta: 29 octubre 2012].
* ↑ «NetBSD man page virtio(4)» (en anglès). Arxivat de l'original el 2019-11-13. [Consulta: 15 juliol 2013].
* ↑ «plan9front» (en anglès). [Consulta: 11 febrer 2013].
* ↑ «An API for virtual I/O: virtio» (en anglès). LWN.net, 11-07-2007. [Consulta: 16 abril 2014].
* ↑ «SCSI target for KVM wiki» (en anglès). linux-iscsi.org, 07-08-2012. Arxivat de l'original el 2020-06-05. [Consulta: 12 agost 2012].
* ↑ «Red Hat Advances Virtualization Leadership with Qumranet, Inc. Acquisition» (en anglès). Red Hat, 04-09-2008. [Consulta: 16 juny 2015].
* ↑ «KVM 15 equipped with live migration | IT World Canada News» (en anglès), 07-03-2007.
* ↑ «Linux kernel 2.6.20, Section 2.2. Virtualization support through KVM» (en anglès). kernelnewbies.org, 05-02-2007. [Consulta: 16 juny 2014].
* ↑ Libby Clark. «Git Success Stories and Tips from KVM Maintainer Paolo Bonzini» (en anglès). Linux.com, 07-04-2015. Arxivat de l'original el 15 març 2016. [Consulta: 17 juny 2015].
* ↑ «SeaBIOS» (en anglès). seabios.org, 21-12-2013. [Consulta: 16 juny 2014].
* ↑ «Hot Plugging Virtual CPUs with Red Hat Enterprise Virtualization Manager» (en anglès).
* ↑ «Faq - KVM» (en anglès).
* ↑ «KVM-15 release [LWN.net]» (en anglès).
* ↑ «Migration - KVM» (en anglès).
* ↑ «Daniel P. Berrangé » Blog Archive » Analysis of techniques for ensuring migration completion with KVM» (en anglès).