Comprendere la virtualizzazione hardware e il ruolo critico dei registri della CPU

La virtualizzazione ha trasformato il moderno computing, consentendo ai provider cloud, alle imprese e ai data center di massimizzare l'utilizzo dell'hardware, eseguendo più sistemi operativi e applicazioni su un unico server fisico. Al centro di questa tecnologia si trova l'ipervisor, uno strato software che gestisce macchine virtuali (VMs). Tuttavia, la capacità dell'ipervisor di controllare efficacemente l'esecuzione delle VM, isolare gli ambienti ospiti e passare tra di loro dipende fortemente da un componente fondamentale della CPU: i registri.

Cosa sono i registri della CPU? I blocchi di costruzione di Stato del processore

I registri sono le posizioni di memoria più veloci all'interno di un processore. Essi risiedono direttamente sul disco della CPU e possono essere letti o scritti all'interno di un ciclo di clock unico—ordini di magnitudine più veloci della memoria della cache o della RAM. In genere misurati in bit (32-bit, 64-bit), i registri memorizzano dati critici come il prossimo indirizzo di istruzioni (program contatore o puntatore di istruzioni), il puntatore di stack attuale, i risultati aritmetici e il processore di controllo del processore di controllo del pezzo di memoria.

Classificazione dei registri

  • Registrati generali (GPR)[]: Usati per operazioni aritmetiche, logiche e movimento dati. In x86-64 architetture, registri come RAX, RBX, RCX, RDX, RSI, RDI, R8–R15 sono disponibili.
  • Registratori di tipo speciale[[]: Includi il puntatore di istruzioni (RIP in x86-64), puntatore di stack (RSP), e registro di bandiera (RFLAGS).
  • Control records[]: In x86, registra CR0, CR2, CR3, CR4, e CR8 funzioni di livello del sistema di controllo come le estensioni di paging, protezione e virtualizzazione.
  • Registrazioni di segmento[[: CS, DS, ES, FS, GS, SS gestiscono la segmentazione della memoria, anche se ora in gran parte vestigiale in modalità a 64 bit, rimangono importanti per la compatibilità legacy e alcuni scenari di VM.
  • Registrati Model-Specific (MSRs): Registrati specifici del processore che controllano caratteristiche come contatori di prestazioni, estensioni di temperatura e virtualizzazione. Non fanno parte del set di registro standard e devono essere accessibili tramite istruzioni RDMSR/WRMSR.
  • Crediti di distribuzione[: DR0–DR7 utilizzato per i breakpoint hardware e il debug.

Ogni VM in esecuzione su un ipervisor ha bisogno della sua copia di questi registri per mantenere un contesto di esecuzione indipendente. Quando l'ipervisor passa da una VM all'altra, salva lo stato del registro della VM in uscita e ripristina lo stato della VM in arrivo. Questo switch di contesto deve essere estremamente veloce per evitare le prestazioni evidenti in anticipo.

Il ruolo centrale dei registri nella virtualizzazione

L'ipervisor (spesso chiamato Virtual Machine Monitor, VMM) agisce come arbitro delle risorse hardware. I registri sono il meccanismo primario attraverso il quale il VMM mantiene lo stato per-VM, fa rispettare l'isolamento e intercetta le operazioni privilegiate.

Conservazione e commutazione del contesto

Ogni VM viene assegnata una serie di registri virtualizzati. Quando l'ipervisor esegue un interruttore di contesto (ad esempio, la condivisione di tempo tra due VM), salva i valori correnti del registro in una struttura di memoria chiamata il blocco di controllo della macchina virtuale (VMCB in AMD) o la struttura di controllo della macchina virtuale (VMCS in Intel).

Virtualizzazione di istruzioni-Livello

I sistemi operativi degli ospiti si aspettano di eseguire istruzioni privilegiate (ad esempio, tabelle di pagina modificate, aggiornamenti dei descrittori interrotti). In una classica virtualizzazione trafilata e emulata, quando l'ospite tenta di modificare un registro privilegiato, la CPU alza una trappola e l'ipervisor intercetta l'istruzione, emula il suo effetto sul registro virtuale e restituisce il controllo all'ospite.

Isolamento attraverso la protezione dei registri

Registrati come CR3 (indirizzo base della tabella pagina) e CR0 (bandiere di controllo) influenzano direttamente la memoria e la protezione. Se un sistema operativo guest potrebbe modificare CR3, potrebbe mappare la memoria fisica appartenente a un'altra VM. L'ipervisor impedisce questo impostando una tabella di pagina ombra o utilizzando tabelle di pagina nidificata (EPT/NPT) dove l'ipervisor controlla la traduzione di secondo livello.

Gestione dei registri di modello-Specifico (MSR)

Molte MSR sono per-core e influenzano l'intera CPU fisica. Virtualizzandole è difficile perché non vengono automaticamente salvati / ripristinati durante i switch di contesto VM. L'ipervisor deve utilizzare una combinazione di accesso di tracciamento (tramite le bitmap di MSR) e e l'emulazione di MSR legge/scrive per presentare ogni VM con il proprio spazio virtuale.

Tipi di registri specificatamente utilizzati nella virtualizzazione

Registrazioni generali

Ogni VM ottiene un proprio set di valori per RAX attraverso R15. Durante il contestualizzazione, tutti i GPR vengono salvati e ripristinati. I ipervisori critici delle prestazioni possono utilizzare funzioni della CPU come segmentazione di memoria (FS, GS) per memorizzare i puntatori per-VM per evitare l'inquinamento della cache.

Registrati di controllo (CR0, CR2, CR3, CR4, CR8)

  • CR0]: Controlli modalità di funzionamento del processore (pezzo PE per modalità protetta, bit PG per la paging).
  • CR2[]: Contiene l'indirizzo lineare di errore di ultima pagina. Ipervisori si affidano a questo per implementare la richiesta di paging e gestire i difetti di pagina nidi.
  • CR3: tiene l'indirizzo base della gerarchia della tabella delle pagine. La virtualizzazione assistita dall'hardware utilizza tabelle di pagina estesa (EPT) nelle tabelle di pagina Intel o Nested (NPT) in AMD, quindi il CR3 dell'ospite punta a pagine guest-fisiche, e la mappa di secondo livello dei tavoli dell'ipervisor guest-fisico a macchina-fisico.
  • CR4[]: Abilita caratteristiche come l'estensione di indirizzi fisici (PAE), SMEP, SMAP e estensioni di virtualizzazione (punto VMXE).
  • CR8: Registrazione priorità delle attività, utilizzata per la gestione dell'interruzione. L'ipervisor virtualizza questo per controllare la consegna interrotta alle VM.

Registrazione

Sebbene la segmentazione non sia in gran parte utilizzata in modalità a 64 bit, i registri del segmento (CS, DS, SS, ES, FS, GS) contengono ancora cache di descrittore nascoste che memorizzano la base, il limite e gli attributi.

Modelli-Specifici Registrati (MSR) in Virtualizzazione

Per esempio: - Ipertestazione di MSR (VMX BASIC] e IA32 VMX MISC descrivono le funzionalità della CPU per Intel VMXmap. - ]]

Debug Registers (DR0–DR7)

I registri Debug sono per-core e possono essere impostati dal sistema operativo guest per il debugging. L'ipervisor deve salvarli e ripristinarli sugli switch di contesto. Inoltre, il software maligno potrebbe utilizzare i registri di debug per uscire dalla VM se non correttamente virtualizzato.

Estensioni di virtualizzazione hardware: Come i registri sono migliorati

Prima delle estensioni hardware, la pura virtualizzazione del software (traduzione combinata) ha subito significative penalità di prestazione. Intel ha introdotto VT-x (Virtualization Technology) e AMD ha introdotto AMD-V (Pacifica) per aggiungere nuove modalità CPU e strutture di registro dedicate che semplificano la virtualizzazione.

Intel VT-x: VMCS e Guest/Host State Fields

La Virtual Machine Control Structure (VMCS) è una struttura dati che contiene tutti gli stati di registro per una VM. Include: - Area di stato ospite: copie di CR0, CR3, CR4, RSP, RIP, RFLAGS, registri dei segmenti e altro. - Area di stato ospitante: salva lo stato di registro dell'ipervisor da ripristinare sulle uscite della VM. - Campi di controllo: specificare quali eventi causano uscite di registro di VM.

Il VMCS viene caricato nel processore tramite l'istruzione VMPTRLD e il passaggio di contesto tra le VM è veloce perché il processore salva/ristabilisce tutto lo stato ospite in un'unica operazione. L'istruzione VMXON attiva la modalità di virtualizzazione; la modalità radice VMX (hypervisor) e la modalità non-root (ospite) hanno ciascuno i propri livelli di privilegi.

AMD-V: VMCB

AMD utilizza il Virtual Machine Control Block (VMCB), memorizzato nella memoria fisica. L'istruzione VMRUN carica la VMCB e passa alla modalità guest. Come VMCS, VMCB contiene stato e controlli dei registri guest e host per intercettare gli eventi. AMD utilizza anche Nested Page Tables (NPT) che si basano su un insieme separato di registri di pagine controllati dall'ipervisor.

ARMv8 Estensioni di virtualizzazione

I processori ARM hanno le proprie estensioni di virtualizzazione (VHE) che forniscono EL2 (livello di privilegi ipervisor). I registri come il comportamento di virtualizzazione di controllo HCR EL2 e il VTTBR EL2 tiene l'indirizzo base per la tabella di traduzione di secondo stadio.

Considerazioni sulle prestazioni nella gestione dei registri

Il costo del salvataggio e del ripristino dei registri durante le transizioni VM è un fattore di performance critico. Ogni uscita e entrata della VM comporta decine di carichi e negozi di registro. La virtualizzazione assistita dall'hardware riduce questo overhead perché il processore stesso esegue il salvataggio/ristabilimento in massa utilizzando il microcodice, ma le uscite sono ancora costose (centri di cicli).

Minimizzare le uscite VM

L'ipervisor può configurare il VMCS/VMCB per evitare frequenti uscite. Ad esempio, molti accessi MSR possono essere gestiti senza uscita VM se l'ipervisor pre-popola le bitmap MSR per consentire l'accesso diretto agli ospiti (per gli MSR benigni come contatore di time-stamp). Inoltre, le moderne CPU supportano le funzioni APICv e IOMMU che riducono le uscite per le operazioni di interromp e I/O.

Registrare Caching e Shadowing

Alcuni ipervisori cache guest registrano i valori nella struttura dei dati VCPU per evitare carichi ridondanti. Ad esempio, il CR3 ospite è spesso ombreggiato: l'ipervisor mantiene una copia e aggiorna solo il vero CR3 quando l'ospite cambia le tabelle delle pagine.

Impatto di virtualizzazione nidificata

Quando un ipervisor si trova all’interno di una VM (virtualizzazione adestata), l’ipervisor esterno deve virtualizzare le strutture VMCS/VMCB. Ciò richiede un’ulteriore cura dei registri, ad esempio, l’istruzione VMLAUNCH dell’ipervisatore interno deve essere intercettata ed emulata dall’ipervisor esterno, causando risparmi/restore extra.

Implicazioni di sicurezza della virtualizzazione del registro

I registri sono un obiettivo primario per attacchi a canale laterale e escalation privilegi. Un ipervisor compromesso potrebbe perdere i valori di registro tra le VM se il switching contestuale non è accurato. Ad esempio, durante un interruttore di contesto, i dati dei residui nei registri che non sono sovrascritti potrebbero essere osservati dalla prossima VM.

Esecuzione Speculativa

Gli attacchi Meltdown e Spectre sfruttano il fatto che l'esecuzione speculativa può accedere ai valori del registro che non sono architettonicamente visibili. In virtualizzazione, lo stato del registro dell'ipervisor potrebbe essere trapelato a un ospite maligno attraverso canali laterali microarchitecturali. Le mitigazioni includono il lavaggio dei buffer target di branch (IBRS, IBPB) e l'utilizzo di speciali MSR che controllano la previsione.

Registrazioni e sicurezza immutabili

Alcuni MSR (come quelli che controllano l'autenticazione debug o i numeri seriali del processore) non dovrebbero mai essere accessibili dagli ospiti. L'ipervisor imposta le bitmap MSR per causare un'uscita della VM su qualsiasi accesso, quindi restituisce un errore o un valore falso.

Sfide e direzioni future

Mentre le CPU moderne forniscono un supporto di virtualizzazione dei registri, rimangono delle sfide. Un problema importante è il numero crescente di MSR come le CPU aggiungono le funzionalità: ogni nuova MSR potrebbe essere virtualizzata, portando a grandi strutture VMCS/VMCB e a più lenti interruttori di contesto. Un'altra sfida è mula] computing eterogeneo]: core della CPU in una grande configurazione di VM.LITTLE può avere un'interfaccia di registro spesso registrarsi.

L'hardware futuro può includere registri hardware dedicati per la virtualizzazione, come un "file registro di virtualizzazione" per core che passa automaticamente all'ingresso/uscita della VM senza salvare/ripristinare esplicita. Inoltre, tecnologie di calcolo confidential come Intel TDX e AMD SEV si affidano alla crittografia della memoria e all'integrità, ma registrano lo stato all'interno della CPU deve salvare i valori di impedendo al nuovo ipervisor.

Conclusioni

I registri della CPU sono gli eroi non presenti della virtualizzazione dell'hardware, che memorizzano lo stato critico di ogni macchina virtuale, fanno rispettare l'isolamento tramite l'accesso controllato e consentono all'ipervisor di passare tra le VM con un minimo di overhead.