Domanda

IA-32 definisce vari casi in cui la CPU può invalidare l'intero TLB. A partire con le estensioni Asid che AMD ha rilasciato nei processori Opteron Rev-F (Barcellona?) Ci sono casi in cui non sono considerati validi solo le voci TLB di un certo ASID.

La domanda è, fa l'ASID sé mai smettere di essere valida? Ha l'Hypervisor deve controllare che un ASID è valido prima di utilizzarlo?

È stato utile?

Soluzione

I pensare la risposta è 'non direttamente' - guardando la programmazione del sistema AMD specifica , il campo ASID nel blocco di controllo VM è semplicemente un (fino a) ID 32bit quale tramonta hypervisor ad un valore univoco per ogni istanza di una VM, e viene usato come un ulteriore tag nella ricerca TLB.

Come si ha alcun controllo diretto sui contenuti TLB su x86, non si può controllare ciò che voci finiscono nel TLB - se il processore decide di aggiungere una voce alla TLB, la voce verrà etichettato con l'attuale ASID , che per definizione sarà valido quando aggiunto.

Questo è descritto in maniera alquanto rotonda sezione 15.15.1 della specifica programmazione del sistema precedentemente menzionato:

  

In implementazioni che non forniscono un modo per svuotare selettivamente tutte le traduzioni di un singolo specificato ASID, il software può lavare in modo efficace le voci TLB dell'ospite assegnando un nuovo ASID per l'ospite e non riutilizzare il vecchio ASID fino a quando l'intera TLB è stato lavata almeno una volta.

Questo implica che il processore non ha il concetto di ASIDs validi o non validi - è solo un numero il cui valore di corrente deve corrispondere un TLB entries ASID per il TLB per colpire. Quindi, se l'hypervisor non scarica correttamente un ASID prima che riutilizza esso, si otterrà stantio NR colpisce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top