La virtualizzazione della memoria

Scritto il 24/09/2009
 

La virtualizzazione dei sistemi operativi – Capitolo 2.2.2

Il vmkernel gestisce tutta la memoria fisica presente sull’host ad esclusione di quella allocata dalla service console. Una parte è a suo uso esclusivo e la rimanente viene resa disponibile alle macchine virtuali e ai corrispondenti VMM (Virtual Machine Monitor).

I sistemi operativi in esecuzione sulle macchine virtuali hanno la loro gestione della memoria virtuale attraverso il processo di paginazione. Anche se non è argomento del presente documento, richiamiamo alla mente alcuni concetti sulla paginazione con un esempio.

Consideriamo un server con un processore a 32 bit. Lo spazio di indirizzamento di questo calcolatore è di 232 indirizzi possibili. Può essere che la memoria installata non sia sufficiente a gestire quel numero di parole di memoria. Se il processore tenta di leggere una parola di memoria che punta ad un indirizzo non disponibile, riceve una trap che gli comunica che il riferimento alla memoria è inesistente.

La tecnica della paginazione consiste nel realizzare un’area di memoria virtuale sul disco e una mappa di memoria che crea una corrispondenza tra gli indirizzi della memoria fisica e gli indirizzi della memoria virtuale su disco. Questa mappa della memoria è gestita da un componente hardware chiamato Memory Management Unit (MMU). Nell’architettura IA32 è presente anche un ulteriore tecnica di gestione della memoria virtuale detta segmentazione, che consente la mappatura di spazi multipli di indirizzamento, ma si rimanda alla bibliografia o al successivo paragrafo “La gestione della memoria” per ulteriori approfondimenti.

Nell’ambiente di virtualizzazione, dato che più sistemi operativi guest possono accedere alla stessa memoria fisica, si aggiunge un nuovo livello indirizzamento. Il VMM gestisce una mappatura tra gli indirizzi della memoria fisica dell’host e gli indirizzi della memoria “fisica” della macchina virtuale. Ogni macchina virtuale vede uno spazio di indirizzamento contiguo con inizio dall’indirizzo 0. Non è necessario che anche lo spazio di indirizzamento sulla macchina fisica sia contiguo. Il VMM intercetta tutte le istruzioni che modificano la struttura della memoria affinché la stato della memory management unit non possa essere alterato dalla macchina virtuale.

ESX Server gestisce una MMU software utilizzando una tecnica detta shadow page table. Con l’uscita sul mercato dei processori di AMD e Intel con il supporto hardware alla virtualizzazione il lavoro svolto dal VMM è stato notevolmente ridotto dato che la mappatura tra le pagine di memoria della macchina virtuale e le pagine di memoria della macchina fisica sono gestite in hardware. Vediamo più in dettaglio le differenze tra la gestione software della MMU (senza supporto hardware) e la gestione hardware con i processori AMD-V.

Software MMU

Con la tecnica delle shadow pages il VMM mantiene al suo interno la mappatura tra l’indirizzo delle logical pages e l’indirizzo delle machine pages e memorizzandola in una tabella detta shadow page table. Come avviene normalmente nel caso che il sistema operativo sia installato direttamente sull’host fisico, le più recenti mappature tra logical pages e machine pages sono salvate nel Translation Lookaside Buffer (TLB).
Il VMM mantiene la tabella delle shadow pages sincronizzata con la tabella della pagine del sistema operativo guest, affinché i processi in esecuzione sul sistema operativo guest accedano agli indirizzi delle machine pages.

Questa sincronizzazione introduce un overhead di elaborazione ogni volta che il sistema operativo guest aggiorna la propria page table.


Fig. 2.5: Mappatura della memoria con la shadow page table e MMU software

Hardware MMU

Lo sviluppo che sta avendo la virtualizzazione ha spinto le aziende produttrici di processori a supportare in hardware alcune funzionalità. AMD, ad esempio ha introdotto in alcuni modelli di processore una tecnologie denominata Rapid Virtualization Indexing (RVI) che incorpora la virtualizzazione della MMU rendendo inutile la tecnica delle shadow pages ed espandendo il Translation Lookaside Buffer.

Utilizzando RVI il sistema operativo guest mantiene la sua mappatura tra gli indirizzi delle logical pages e gli indirizzi delle phisical pages nella propria page table e il VMM gestisce l’ulteriore livello di mappatura tra le phisical pages e le machine pages denominato nested page table. In questo caso sia le page table del sistema guest che la nested page table sono rivelate all’hardware.

Quando si accede ad un indirizzo delle logical pages, l’hardware controlla la guest page table e per ogni indirizzo di phisical page al quale si accede ed effettua un secondo controllo delle nested page table per determinare l’effettivo indirizzo della machine page, In questo modo si elimina la necessità di gestire la shadow page table e la sincronizzazione della guest page table. È tuttavia vero che così si raddoppia il costo a causa dell’accesso alle due tabelle ma, utilizzando pagine di dimensioni maggiori, si può ridurre il numero di letture delle pagine di memoria e ottenere prestazioni decisamente superiori a quelle offerte dalla soluzione software.


Fig. 2.6: Mappatura della memoria con supporto hardware della MMU

L’espansione del TLB, che consiste nell’inserimento di uno specifico tag per identificare a quale macchina virtuale sono associate le informazioni contenute sul TLB, permette di migliorare ulteriormente le prestazioni di accesso alla memoria delle macchine virtuali.

Torna all’Indice »

Serverlab