Vai al contenuto

Virtualizzazione x86

Da Wikipedia, l'enciclopedia libera.
(Reindirizzamento da Virtualizzazione X86)
VirtualBox

In informatica la virtualizzazione x86 consiste nella creazione di una versione virtuale di una risorsa normalmente fornita fisicamente e appartenente a un sistema ad architettura x86. Qualunque risorsa hardware o software può essere virtualizzata: sistemi operativi, memoria, spazio disco. Ad oggi la virtualizzazione può essere effettuata a livello software e a livello hardware.

Tra gli impieghi della virtualizzazione il più utilizzato è probabilmente la virtualizzazione di sistemi operativi. Via software è necessario un sistema operativo in esecuzione (host) che esegua un software di virtualizzazione che crei ad alto livello le varie virtual machine (guest) che girano come se fossero dei normali programmi e che comunicano con l'hardware solo indirettamente, tramite il software di virtualizzazione che agisce a basso livello. Esempi di software di virtualizzazione sono Bochs, QEMU.

L'architettura x86 non supporta nativamente i requisiti di virtualizzazione di Popek e Goldberg[1]. Ne risulta che è molto difficile implementare una macchina virtuale generale su un processore x86. Recentemente sono state introdotte estensioni che hanno risolto questa ed altre difficoltà sulla virtualizzazione.

Virtualizzazione x86 via software

[modifica | modifica wikitesto]

L'8 febbraio 1999, VMware introdusse il primo prodotto di virtualizzazione x86, "VMware Virtual Platform", basato su precedenti ricerche dei propri fondatori all'Università di Stanford. VMware e software simili devono impiegare sofisticate tecniche per catturare e virtualizzare l'esecuzione di determinate istruzioni. Queste tecniche offrono minori performance rispetto ad una macchina virtuale in esecuzione su un'architettura virtualizzabile nativamente come IBM System/370 o Motorola MC68020. Kevin Lawton lanciò il progetto Plex86 (denominato originariamente "freemware") per la creazione di un "software libero" di virtualizzazione x86 con il solo supporto a Linux come sistema operativo "ospite", ma prima di questo Lawton pubblicò l'articolo Running multiple operating systems concurrently on an IA32 PC using virtualization techniques, il quale fornisce un'analisi sugli aspetti dell'architettura x86 maggiormente complicati da virtualizzare ed alcune tecniche per superare queste difficoltà. Anche Microsoft offre dei software di virtualizzazione x86, Microsoft Virtual PC e Microsoft Virtual Server, basati sulla tecnologia acquisita da Connectix. Recenti ricerche hanno cercato di migliorare le performance alla virtualizzazione x86 attraverso l'utilizzo di un'interfaccia software per le macchine virtuali che emula l'hardware sottostante. I sistemi operativi sono eseguiti su questa interfaccia, la quale non implementa i set di istruzioni x86 difficili da virtualizzare. Questa tecnica è chiamata paravirtualizzazione. Esempi di utilizzo di questa tecnologia sono Denali, L4, e Xen.

Virtualizzazione x86 via hardware

[modifica | modifica wikitesto]

Intel ed AMD hanno sviluppato indipendentemente le estensioni di virtualizzazione dell'architettura x86. Esse non sono tra loro completamente compatibili, ma supportano grosso modo le stesse istruzioni. Entrambe permettono ad una macchina virtuale di eseguire un sistema operativo ospite senza incorrere in grosse perdite prestazionali causate dall'emulazione via software.

AMD virtualization (AMD-V)

[modifica | modifica wikitesto]

L'estensione di virtualizzazione di AMD per l'architettura x86 a 64-bit (AMD64) è denominata AMD Virtualization, conosciuta anche con l'abbreviazione AMD-V o attraverso il nome in codice "Pacifica". I processori AMD che utilizzano il Socket AM2, il Socket S1, e il Socket F supportano la AMD Virtualization. Nel maggio 2006, AMD ha introdotto sul mercato le versioni dei processori Athlon 64 e Turion 64 con supporto a tale tecnologia. È stata annunciata anche la versione del processore Opteron con supporto alla virtualizzazione disponibile per agosto 2006.

Intel VT (IVT)

[modifica | modifica wikitesto]

L'estensione di virtualizzazione sviluppata da Intel per le architetture x86 a 32 bit (IA-32) e a 64 bit (EM64T) è denominata IVT (abbreviazione di Intel Virtualization Technology), ed è a volte chiamata con il nome in codice "Vanderpool". IVT è stato ufficialmente lanciato all'Intel Developer Forum Spring 2005 ed è disponibile su tutti i processori Pentium 4 6x2, Pentium D 9x0, Xeon 7xxx, Core Duo e Core 2 Duo, esclusi i T5200, T5500, T6400, E4300, E4400, E4500 ed E4600. Su alcune implementazioni il supporto a Vanderpool può essere disabilitato da BIOS o da EFI.

A titolo di completezza si ricorda che Intel ha inoltre pubblicato le specifiche dell'equivalente di Vanderpool per l'architettura IA-64 (Itanium) il cui nome in codice è "Silvervale".

Precedentemente denominato in codice "Vanderpool", VT-x rappresenta la tecnologia Intel per la virtualizzazione sulla piattaforma x86. Il 13 novembre 2005, Intel ha rilasciato due modelli di Pentium 4 (Model 662 e 672) come primi processori Intel a supportare VT-x. Il flag della CPU per la capacità VT-x è "vmx"; in Linux, questo può essere controllato tramite /proc/cpuinfo, o in macOS tramite sysctl machdep.cpu.features.[2]

"vmx" sta per Virtual Machine Extensions, che aggiunge dieci nuove istruzioni: VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF e VMXON.[3] Queste istruzioni consentono di entrare e uscire da una modalità di esecuzione virtuale in cui il sistema operativo guest percepisce se stesso come funzionante con il massimo dei privilegi (anello 0), ma il sistema operativo host rimane protetto.

A partire dal 2015, quasi tutti i nuovi server, i processori Intel desktop e mobile supportano la VT-x, con alcuni dei processori Intel Atom come eccezione principale.[4] Con alcune schede madri, gli utenti devono abilitare la funzione VT-x di Intel nella configurazione del BIOS prima che le applicazioni possano farne uso.[5]

Intel ha iniziato ad includere Extended Page Tables (EPT),[6] una tecnologia per la virtualizzazione delle page-table,[7] a partire dall'architettura Nehalem,[8][9] rilasciata nel 2008. Nel 2010, Westmere ha aggiunto il supporto per il lancio del processore logico direttamente in modalità reale - una caratteristica chiamata "unrestricted guest", che richiede l'EPT per funzionare.[10][11]

Dalla microarchitettura di Haswell (annunciata nel 2013), Intel ha iniziato a includere il VMCS shadowing come tecnologia che accelera la virtualizzazione delle macchine virtuali annidate.[12] La struttura di controllo della macchina virtuale (VMCS) è una struttura dati in memoria che esiste esattamente una volta per macchina virtuale, mentre è gestita dalla VMM. Ad ogni cambiamento del contesto di esecuzione tra le diverse macchine virtuali, la VMCS viene ripristinata per la VM corrente, definendo lo stato del processore virtuale della VM.[13] Non appena vengono utilizzate più di una VMM o VMM nidificate, appare un problema simile a quello che ha richiesto la gestione della tabella di ombreggiatura, come descritto sopra. In questi casi, VMCS deve essere ombreggiato più volte (in caso di nesting) e parzialmente implementato nel software nel caso in cui non ci sia un supporto hardware da parte del processore. Per rendere più efficiente la gestione di shadow VMCS, Intel ha implementato il supporto hardware per il VMCS shadowing.[14]

La virtualizzazione della memoria e degli I/O viene eseguita dal chipset.[15] Tipicamente queste caratteristiche devono essere abilitate dal BIOS, che deve essere in grado di supportarle ed essere impostato per utilizzarle.

Virtualizzazione I/O di MMU (AMD-Vi e Intel VT-d)

[modifica | modifica wikitesto]

Un'unità di gestione della memoria di input-output (IOMMU) consente alle macchine virtuali guest di utilizzare direttamente le periferiche, come Ethernet, schede grafiche accelerate e controller per dischi rigidi, tramite DMA e interrupt remapping. Questo è talvolta chiamato PCI passthrough.[16]

Una IOMMU consente inoltre ai sistemi operativi di eliminare i buffer di rimbalzo necessari per poter comunicare con le periferiche i cui spazi di indirizzo di memoria sono più piccoli dello spazio di indirizzo di memoria del sistema operativo, utilizzando la traduzione degli indirizzi di memoria. Allo stesso tempo, una IOMMU permette anche ai sistemi operativi e agli hypervisor di impedire che un hardware malevolo o contenente bug comprometta la sicurezza della memoria tramite un attacco DMA.

Sia AMD che Intel hanno rilasciato le loro specifiche IOMMU:

  • La tecnologia di virtualizzazione I/O di AMD, "AMD-Vi", originariamente chiamata "IOMMU"[17]
  • La "tecnologia di virtualizzazione diretta per I/O" (VT-d) di Intel,[18] inclusa nella maggior parte dei processori Nehalem di fascia alta (ma non tutti) e dei processori Intel più recenti[19]

Oltre al supporto della CPU, sia il chipset della scheda madre che il firmware di sistema (BIOS o UEFI) devono supportare pienamente la funzionalità di virtualizzazione IOMMU I/O per poterlo utilizzare. Solo i dispositivi PCI o PCI Express che supportano il reset del livello funzionale (FLR) possono essere virtualizzati in questo modo, in quanto è necessario per riassegnare varie funzioni dei dispositivi tra macchine virtuali.[20][21] Se un dispositivo da assegnare non supporta Message Signaled Interrupts (MSI), non deve condividere le linee di interruzione con altri dispositivi perché l'assegnazione sia possibile.[22] Tutti i dispositivi PCI convenzionali instradati dietro un bridge PCI/PCI-X-to-PCI Express possono essere assegnati ad una macchina virtuale guest in una sola volta; i dispositivi PCI Express non hanno tale restrizione.

Software che utilizza VT

[modifica | modifica wikitesto]
  • Collax V-Cube Piattaforma di virtualizzazione, clustering ed alta disponibilità basata su KVM con gestione semplificata tramite interfaccia web.
  • KVM Virtual Machine basata su kernel per Linux
  • Parallels Workstation ha un hypervisor con il supporto Intel VT-x
  • TRANGO real-time embedded hypervisor
  • VirtualBox
  • VirtualBridges VERDE -
  • Virtual PC, della Microsoft
  • Virtual Server (anche questa della Microsoft): una futura versione (Virtual Server 2005 R2 SP1, da distribuire nel Q1 2007[23][24]) supporterà le estensioni Intel VT e AMD Pacifica.
  • VMware Workstation su processori Intel, VMware Workstation 5.5 richiede Intel-VT per eseguire sistemi operativi guest a 64-bit.[25] Per i sistemi guest a 32-bit, l'uso della tecnologia VT è possibile ma non è attivo di default, perché per l'attività lavorativa normale è più lento.[26][27]
  • Xen 3.0 utilizza Intel VT per eseguire sistemi operativi guest non modificati. Sia Intel che AMD hanno contribuito a supportare le loro estensioni di virtualizzazione nel monitor di virtual machine Xen, permettendo l'esecuzione di sistemi operativi guest non modificati.
  1. ^ Requisiti di Popek e Goldberg per la virtualizzazione, su pctuner.net, 26 maggio 2009. URL consultato il 29 dicembre 2009 (archiviato dall'url originale il 1º giugno 2009).
  2. ^ (EN) Tao Wang, How to Start Intel Hardware-assisted Virtualization (hypervisor) on Linux to Speed-up Intel Android x86 Emulator, su software.intel.com, Intel, 12 marzo 2012. URL consultato il 26 ottobre 2018.
  3. ^ (EN) Gabriel Torres, Everything You Need to Know About the Intel Virtualization Technology, in Hardware Secrets, 9 luglio 2012, p. 2. URL consultato il 26 ottobre 2018.
  4. ^ (EN) Intel Virtualization Technology List, su ark.intel.com, Intel. URL consultato il 26 ottobre 2018 (archiviato dall'url originale il 27 ottobre 2010).
  5. ^ (EN) Windows Virtual PC: Configure BIOS, su microsoft.com, Microsoft. URL consultato il 26 ottobre 2018 (archiviato dall'url originale il 6 settembre 2010).
  6. ^ (EN) Gil Neiger, A. Santoni, F. Leung, D. Rodgers e R. Uhlig, Intel Virtualization Technology: Hardware Support for Efficient Processor Virtualization, in Intel Technology Journal, vol. 10, n. 3, Intel, pp. 167–178. URL consultato il 26 ottobre 2018 (archiviato dall'url originale il 25 settembre 2012).
  7. ^ (EN) Matthew Gillespie, Best Practices for Paravirtualization Enhancements from Intel® Virtualization Technology: EPT and VT-d, su software.intel.com, Intel, 1º giugno 2009. URL consultato il 26 ottobre 2018.
  8. ^ (EN) First the Tick, Now the Tock: Next Generation Intel® Microarchitecture (Nehalem) (PDF), su intel.com, Intel. URL consultato il 6 novembre 2018.
  9. ^ (EN) A Superior Hardware Platform for Server Virtualization (PDF), su download.intel.com, Intel. URL consultato il 6 novembre 2018 (archiviato dall'url originale il 7 giugno 2011).
  10. ^ (EN) Implements BIOS emulation support for BHyVe: A BSD Hypervisor (PDF), su 2013.asiabsdcon.org. URL consultato il 6 novembre 2018.
  11. ^ Intel® 64 and IA-32 Architectures Software Developer’s Manual (PDF), su download.intel.com, Intel, marzo 2013. URL consultato il 6 novembre 2018 (archiviato dall'url originale il 18 aprile 2013).
  12. ^ (EN) 4th Generation Intel Core™ vPro™ Processors with Intel VMCS Shadowing (PDF), su intel.com, Intel. URL consultato l'8 novembre 2018.
  13. ^ (EN) Narendar B. Sahgal e Dion Rodgers, Understanding Intel® Virtualization Technology (VT) (PPT), su download.microsoft.com, Intel. URL consultato l'8 novembre 2018 (archiviato dall'url originale l'8 settembre 2014).
  14. ^ (EN) Stephen J. Bigelow, The 'what, where and why' of VMCS shadowing, in Search Server Virtualization, novembre 2013. URL consultato l'8 novembre 2018.
  15. ^ (EN) Darren Abramson, Intel Virtualization Technology for Directed I/O, in Intel Technology Journal, vol. 10, n. 03, 10 agosto 2006, DOI:10.1535/itj.1003.02. URL consultato l'8 novembre 2018 (archiviato dall'url originale il 20 gennaio 2007).
  16. ^ (EN) M. Tim Jones, Linux virtualization and PCI passthrough, su ibm.com, IBM, 13 ottobre 2009. URL consultato l'8 novembre 2018.
  17. ^ (EN) AMD I/O Virtualization Technology (IOMMU) Specification License Agreement (PDF), su support.amd.com, AMD, febbraio 2009. URL consultato l'8 novembre 2018 (archiviato dall'url originale il 24 gennaio 2011).
  18. ^ (EN) Intel Virtualization Technology for Directed I/O: Specification, su intel.com:80, Intel. URL consultato l'8 novembre 2018 (archiviato dall'url originale il 23 giugno 2013).
  19. ^ (EN) Intel Virtualization Technology for Directed I/O (VT-d) Supported CPU List, su ark.intel.com, Intel. URL consultato l'8 novembre 2018 (archiviato dall'url originale il 27 ottobre 2010).
  20. ^ (EN) Function Level Reset (FLR) (PDF), su pcisig.com, 27 giugno 2006. URL consultato l'8 novembre 2018 (archiviato dall'url originale il 21 ottobre 2006).
  21. ^ (EN) VTd HowTo, su Xen. URL consultato l'8 novembre 2018.
  22. ^ (EN) How to assign devices with VT-d in KVM, su KVM. URL consultato l'8 novembre 2018.
  23. ^ Virtual Server 2005 R2 SP1 Beta 1 download link and availability details, su blogs.technet.com, technet.com, 28 aprile 2006. URL consultato il 29 settembre 2006 (archiviato dall'url originale il 24 giugno 2008).
  24. ^ Virtual Server 2005 R2 SP1 - beta 2 feature listing, su microsoft.com, Microsoft.
  25. ^ Hardware Requirements for 64-Bit Guest Operating Systems, su vmware.com, VMWare (archiviato dall'url originale il 14 luglio 2006).
  26. ^ Keith Adams, Agesen, Ole, A Comparison of Software and Hardware Techniques for x86 Virtualization (PDF), su vmware.com, VMWare, 2006.
  27. ^ How to check if Vanderpool usage is enabled?, su vmware.com, VMware, marzo 2006 (archiviato dall'url originale il 24 agosto 2006). Article suggests adding monitor_control.vt32 = "TRUE" to the *.vmx file will enable use of hardware VT.

Voci correlate

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
Virtualizzazione hardware VT di Intel
La virtualizzazione hardware Pacifica di AMD
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica