Pregunta

IA-32 define varios casos en los que la CPU puede invalidar toda la TLB. A partir de las extensiones ASID que AMD lanzó en los procesadores Opteron Rev-F (Barcelona) hay casos en los que se han invalidado sólo las entradas TLB de un cierto ASID.

La pregunta es, ¿tiene el mismo cada vez ASID deja de ser válida? ¿El hipervisor tiene que comprobar que un ASID es válida antes de usarlo?

¿Fue útil?

Solución

piensan la respuesta es 'no directamente' - mirar la programación del sistema AMD especificación , el campo ASID en el bloque de control VM es simplemente un (hasta) ID de 32 bits que los conjuntos de hipervisor en un valor único para cada instancia de una máquina virtual, y se utiliza como un adicional de etiqueta en la búsqueda TLB.

A medida que usted no tiene control directo sobre el contenido de la TLB en x86, no se puede controlar lo que las entradas de terminar en el TLB - si el procesador decide añadir una entrada a la TLB, la entrada será etiquetado con la corriente ASID , que por definición será válido cuando se añade.

Esto se describe de una manera algo rotonda en la sección 15.15.1 de la especificación la programación del sistema se ha mencionado anteriormente:

  

En las implementaciones que no proporcionan una manera de eliminar selectivamente todas las traducciones de una sola especificada ASID, el software puede eliminar con eficacia las entradas TLB del huésped mediante la asignación de un nuevo ASID para el huésped y no volver a utilizar el viejo ASID hasta que toda la TLB ha sido enrojecida al menos una vez.

Esto implica que el procesador no tiene un concepto de ASIDs válidos o no válidos - es sólo un número cuyo valor actual debe coincidir con una TLB entradas ASID para la TLB para golpear. Por tanto, si el hipervisor no se nivela correctamente un ASID antes de que se vuelve a utilizar, obtendrá rancio TLB golpea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top