Gli hypervisor, noti anche come virtual machine monitor, sono il componente centrale e più importante di un sistema basato sulle macchine virtuali. Si tratta di prodotti software utilizzati per governare la virtualizzazione.
Tra le componenti principali di un hypervisor va citato, appunto, il virtual machine monitor: elemento centrale, annovera diverse scelte opzionali come, ad esempio, la soluzione opensource Xen oppure gli standard VmWare ESX o Hyper-V di Microsoft.
Gli hypervisor svolgono attività di controllo al di sopra di ogni sistema, permettendone lo sfruttamento anche come monitor e debugger delle attività dei sistemi operativi e delle applicazioni, aiutando a identificare rapidamente malfunzionamenti e a intraprendere azioni correttive. Ogni hypervisor impone una serie di requisiti hardware che ogni server, storage o sottosistema di rete devono soddisfare.
Alcuni “trucchi” nella governance della virtualizzazione
La continua evoluzione dei sistemi hardware e, in particolare, della componentistica, ha generato una serie di acronimi e, conseguentemente, molta confusione. Catalogare e ordinare terminologie e significati operativi porta via tempo, ma l’imprecisione può comportare problemi di configurazione del sistema e imprevisti che possono innescare malfunzionamenti e problemi prestazionali.
Per ovviare a questo tipo di criticità, gli esperti suggeriscono di prendere in considerazione più nel dettaglio alcune delle caratteristiche delle CPU valutando non solo quelle attualmente in uso ma anche quelle emergenti, tenendo anche in considerazione le tecnologie necessarie per supportare i principali hypervisor come, ad esempio, VMware ESXi.
Isolare la memoria usando i bit NX e XD
Un aspetto fondamentale della virtualizzazione è l’isolamento, che impedisce al codice di applicazione di una macchina virtuale di accedere allo spazio di memoria utilizzata da altre macchine virtuali.
Questo tipo di isolamento costituisce un fattore di sicurezza importante nella protezione di ogni singola VM, andando a tutelare l’intero server da una vasta gamma di attacchi dannosi, tra cui virus e compromissioni all’overflow del buffer.
I processori che implementano questo tipo di isolamento della memoria utilizzano uno speciale bit che può marcare alcune aree di memoria come non eseguibili.
I processori AMD forniscono un bit NX (Never Execute), mentre i processori Intel offrono un bit XD (Execute Disable). Entrambi i bit sono effettivamente identici: ciò che cambia sono solo i nomi, mentre entrambi i bit del processore possono essere elencati insieme come NX / XD. L’idea è che quando un’area di memoria è contrassegnato come non eseguibile, il processore rifiuterà di eseguire qualsiasi codice in quelle aree protette.
In pratica, se si tenta di eseguire codice contrassegnato come non eseguibile, viene attivata una segnalazione automatica agli amministratori che in questo modo sono avvisati di una violazione di accesso della memoria e quindi di una possibile attività inadeguata sul server.
Questo impedisce a una macchina virtuale di influenzare un’altra macchina virtuale, consentendo di bloccare la proliferazione di un malware e da una VM a un’altra, rendendo così l’NX/XD una caratteristica importante del processore.
Fortunatamente, sia AMD che Intel già dal 2006 hanno iniziato a supportare soluzioni bit NX / XD, per cui è estremamente improbabile che qualsiasi server corrente non sia dotato di processori nativamente NX / XD.
Tuttavia, per rendere più sicura la governance è sempre meglio verificare il supporto XD/NX nella documentazione del server o controllare il BIOS per garantire opzioni come l’Execute Disable Bit, la tecnologia NX o il supporto XD. In caso negativo, il consiglio degli specialisti è di procedere a una sostituzione del server prima di installare l’hypervisor.
Cosa sono le istruzioni LAHF e SAHF?
I processori fanno un ampio uso dei registri, ovvero di aree di memoria estremamente ridotte integrate su ogni strato del chip e che contengono i risultati temporanei dei passaggi matematici o logici in corso, così come le condizioni prestabilite attraverso l’uso di bit di bandiera su diversi registri.
Nei processori x86, il registro AH è conosciuto come un registro accumulatore, utilizzato per l’accesso alla porta I / O, con virgola aritmetica di base e interruzioni: queste sono tutte le funzioni critiche in un ambiente virtualizzato, quindi i processori moderni possono accelerare la gestione di queste attività, fornendo comandi che consentono il controllo diretto sui contenuti del registro tra cui rientrano i comandi Load AH from Flags (LAHF) and Save AH to Flags (SAHF).
È facile perdersi nei meandri dei vari livelli di architettura dei processori, ma l’idea di base è che un hypervisor ESXi quando utilizza le istruzioni LAHF / SAHF può prendere un controllo molto più diretto del modo in cui ciascun core del processore gestisce I / O e interruzioni.
Questo controllo a livello di hardware è in grado di migliorare le prestazioni delle macchine virtuali in esecuzione su ogni core. I comandi SAHF / LAHF sono vagamente correlati al supporto di virtualizzazione più ampia su processori moderni come, ad esempio, le tecnologie AMD-V e Intel-VT.
Come nel caso dell’NX o del supporto bit XD, quasi tutti i moderni processori Intel e AMD supportano istruzioni LAHF o SAHF unitamente al set di istruzioni di virtualizzazione estesa (Intel-VT e AMD-V).
Sebbene le istruzioni LAHF / SAHF non possano essere attivate o disattivate in maniera discrezionale attraverso il BIOS, le funzionalità di virtualizzazione più ampi in genere possono essere controllati tramite il BIOS. Quindi, è importante verificare che Intel VT e AMD-V sianoo attivati prima di installare un hypervisor.
Come funziona Il Rapid Virtualization Indexing
L’RVI (Rapid Virtualization Indexing) fa parte della serie di funzionalità di virtualizzazione incluse con la tecnologia AMD-V, conosciute anche come indicizzazione delle pagine nidificate o SLAT (acronimo di Second Level Address Translation). Intel, invece, come terminologia utilizza l’EPT (Extended Page Tables).
La traduzione dell’indirizzo è necessaria, in quanto i processori devono utilizzare una tabella di pagina o la traduzione TLB (Look-Aside Buffer) per tradurre gli indirizzi relativi in indirizzi fisici completi ogni volta che un carico di lavoro richiede l’accesso alla memoria fisica.
In un computer virtualizzato, la traduzione di un indirizzo deve essere eseguita due volte, nel momento in cui viene richiesto l’accesso alla memoria fisica: in primo luogo per l’istanza di hosting, e una seconda volta per l’istanza di guest (VM). Questo secondo livello di traduzione degli indirizzi aumenta il carico di lavoro per il processore e riduce le prestazioni.
Tecnologie come EPT di Intel e AMD RVI consentono di migliorare le prestazioni di virtualizzazione, estendendo la tabella delle pagine in modo che un hypervisor sia in grado di determinare le posizioni di memoria fisica per entrambe le istanze di host e guest in un unico passaggio, piuttosto che due fasi successive.
Gli hypervisor di fascia alta hanno supportato caratteristiche SLAT per anni, incluso Hyper-V con Windows Server 2008 R2, VMware ESX 3.5, Xen 3.2 e via dicendo. Oggi hypervisor come Hyper-V per Windows 8 richiedono processori con capacità SLAT.
Altre caratteristiche della CPU da considerare per la virtualizzazione
I principali fornitori di processori, come Intel e AMD hanno integrato la maggior parte delle funzionalità di virtualizzazione in uno o più set di funzionalità, come VT-x di Intel con EPT e VT-d per la virtualizzazione I / O, mentre AMD offre funzionalità AMD-V come RVI e TLB.