Di tutte le notizie che già circolano su VMware vSphere 6.0 (che attualmente è in beta pubblica) c’è una novità che segna forse la fine di un’era: VMware ha annunciato che partire da dicembre 2014, gli aggiornamenti che saranno rilasciati per ESXi configureranno il TPS (Transparent Page Sharing) come disabilitato di default. Quindi non solo riguarderà la prossima versione ma anche tutte quelle correnti a partire dagli aggiornamenti di fine anno.
In realtà non vuol dire che questo sistema non funzionerà più, ma semplicemente che è stata fatta la scelta di disabilitarlo di default, ma lasciando comunque all’amministratore la possibilità di riabilitarlo in quei casi dove potrebbe servire (ad esempio ambienti VDI o comunque ambienti con molte VM uguali). Segna comunque una tendenza di revisione e aggiornamento dei prodotti e tecnologie… E un altro “pezzo storico” che prima o poi potrebbe scomparire come succederà per il vSphere Client (in teoria doveva già scomparire dalla prossima versione, ma pare che potrebbe resistere ancora un po’) oppure ESX Server o il Converter Enterprise.
Ma cosa è il TPS?
Usando un concetto diventato abbastanza comune nel mondo degli storage, TPS è una tecnologia unica di VMware per la deduplica della memoria primaria degli host ESXi: più VM che hanno pagine di memoria uguali (o persino una singola VM con pagine di memoria uguali) su uno stesso host, dopo che TPS è stato eseguito, possono condividere la stessa identica pagina di memoria fisica, con il risultato di utilizzare meno RAM di quanta effettivamente le varie VM stanno utilizzando. I dettagli tecnici sono un po’ più complessi e meriterebbero un dettagli un post a parte. L’importante è sapere che non è un processo real-time, ma periodico e che richiede tempo per ottenere risultati. Maggiori dettagli (in inglese) sono disponibili su questo white-paper: Understanding Memory Resource Management in VMware vSphere 5 (TPS è comunque una funzione presente anche nelle versioni precedenti a vSphere 5.x).
Ma perché non sarà più abilitato di default?
Il principale motivo è spiegato in questo post (in inglese) e riguarda un potenziale problema di sicurezza: alcuni studi accademici hanno individuato possibili condizioni nel qualche ottenere accesso a dati non autorizzati in un sistema con TPS. non ci sono dettagli a riguardo, ma per come funziona TPS (che alla prima scrittura duplica nuovamente la pagina con un copy on write) è sicuramente un problema “solo” di confidenzialità (accesso ai dati) e non di integrità (modifica dei dati).
Per questo motivo VMware adotterà un approccio “secure by default” disabilitando il TPS, benché secondo loro il rischio di sicurezza è veramente molto vasso.
Maggiori informazioni sono disponibili nell’articolo KB 2080735. Lo stesso rimanda anche ad una interesssante nuova funzione che sarà introdotta per mitigare (o meglio controllare) questo possibile problema. Come descritto nel KB 2091682 vi sarà una nuova configurazione (host level) chiamata Mem.ShareForceSalting che in qualche modo controllerà quali macchine possono condividere pagine: se il salt (impostato manualmente a livello di file vmx) e ovviamente anche il contenuto delle pagine sono uguali allora TPS può eseguire la condivisione della pagina.
Ma questo possibile problema di sicurezza non è l’unico motivo per il quale TPS potrebbe prima o poi scomparire (o quanto meno diventare non più utile o utilizzabile).
Una ragione è legata a come funziona il TPS nei sistemi moderni con hardware MMU e nei sistemi operativi moderni con pagine “grandi”. Il tutto è descritto nel KB 1021095 o in numerosi post di vari blogger, ma in sostanza quando si usano pagine di grandi dimensioni la probabilità di trovare due pagine uguali è molto bassa e quindi l’efficacia del TPS crolla (è vero che ci sono tecniche per renderlo applicabile anche in questi casi, ma la sostanza è queste tecniche implicano un maggiore overhead).
L’evoluzione hardware impatta sul TPS non solo per le nuove MMU ma anche per l’architettura stessa dei processori dove la memoria RAM non è uniformemente distribuita tra gli stessi, ma è sempre in prossimità di ciascun processore (questa architettura è chiamata NUMA ed è stata adottata prima da AMD con Opteron e successivamente da Intel con i primi Xeon Nehalem). Per questioni di efficienza è opportuno che la memoria rimanga locale e quindi condivisioni di pagine tra nodi NUMA diversi andrebbero contro questo principio.
Per un motivo simile, TPS diventa molto meno utile nei sistemi operativi moderni che adottano soluzioni di hardening (come ad esempio ASLR nei sistemi Windows recenti) e lo si vedere facilmente confrontando il grado di successo di TPS su macchine Windows XP rispetto a macchine 7o 8.
C’è poi da considerare il costo legato all’applicazione del TPS che è stato descritto in dettaglio fin dalla prime implementazioni (si veda ad esempio questo primo articolo su come funziona): normalmente il confronto tra due pagine avviene usando degli hash, ma quando due hash identici sono stati trovati è comunque necessario un confronto bit a bit per verificare che le due pagine siano identiche (e questo costo cresce al crescere della memoria, nonostante i core aumentino e pure la velocità della memoria aumenti).
C’è poi l’aspetto legato alla normale operatività in ambienti VMware: nel momento in cui si creano nuove VM, si riavvia una VM o semplicemente si sposta una VM da un host all’altro il TPS perde la sua efficacia (almeno sulle VM coinvolte). Ad esempio spostando con vMotion due VM da un host all’altro queste VM porteranno ad una copia completa di tutte le pagine di memoria (e pure eventuali pagine condivise tra le due VM saranno duplicate).
Può sembrare banale o un problema minimo, ma questo vuol dire che (soprattutto su host con tanta memoria utilizzata) quando si eseguono operazioni massive (come la manutenzione di un nodo) la memoria totale utilizzata potrebbe incrementare anche di molto e bisogna quindi tenere conto di questo aspetto. Lo stesso dicasi per sistemi molto dinamici ed in evoluzione continua (si pensi ad ambienti di sviluppo dove magari si creano e distruggono VM in continuazione).
Quindi prima o poi si chiuderà un’era: il TPS sta via via diventando meno efficace e dalle prossime versioni sarà disattivato (ma non ancora rimosso) come misura cautelativa dal punto di vista della sicurezza. Paradossalmente questo era ancora una delle (poche) differenze tecniche tra VMware ESxi e gli altri hypervisor e questo gap lo potrebbe colmare VMware stessa rinunciano a questa funzione.