caching x86 virtual-memory tlb virtual-address-space

caching - ¿El direccionamiento físico o virtual se utiliza en los procesadores x86/x86_64 para el almacenamiento en caché en L1, L2 y L3?



virtual-memory tlb (1)

La respuesta a tu pregunta es - depende. Esa es estrictamente una decisión de diseño de la CPU, que equilibra el equilibrio entre el rendimiento y la complejidad.

Tomemos, por ejemplo, los procesadores Intel Core recientes: están etiquetados físicamente y prácticamente indexados (al menos según http://www.realworldtech.com/sandy-bridge/7/ ). Esto significa que los cachés solo pueden completar búsquedas en el espacio de direcciones físicas puras, para determinar si la línea está allí o no. Sin embargo, dado que L1 es 32k, asociativo de 8 vías, significa que utiliza 64 conjuntos, por lo que solo necesita direccionar los bits 6 a 11 para encontrar el conjunto correcto. Resulta que las direcciones físicas y virtuales son las mismas en este rango, por lo que puede buscar el DTLB en paralelo con la lectura de un conjunto de caché, un truco conocido (consulte - http://en.wikipedia.org/wiki/CPU_cache para una buena explicación).

En teoría, se puede crear un caché virtualmente etiquetado de index + virtualy, lo que eliminaría el requisito de pasar por la traducción de direcciones (búsqueda de TLB y también recorridos de página en caso de fallas de TLB). Sin embargo, eso causaría numerosos problemas, especialmente con el alias de memoria, un caso en el que dos direcciones virtuales se asignan a la misma dirección física.

Supongamos que core1 tiene memorias virtuales addr A en una memoria caché totalmente virtual (se asigna a phys addr C, pero aún no hemos realizado esta comprobación). core2 escribe al addr B virtual que se asigna al mismo addr C C: esto significa que necesitamos algún mecanismo (generalmente un "snoop", término acuñado por Jim Goodman) que invalida esa línea en core1, gestionando la combinación de datos y la gestión de coherencia si es necesario. Sin embargo, core1 no puede responder a ese snoop ya que no sabe acerca de addr B virtual, y no almacena addr C físico en el caché virtual. Como puede ver, tenemos un problema, aunque esto es mayormente relevante para los sistemas x86 estrictos, otras arquitecturas pueden ser más laxas y permitir una administración más simple de tales cachés.

Con respecto a las otras preguntas, no se puede pensar en una conexión real con PAT, el caché ya está diseñado y no puede cambiar para diferentes tipos de memoria. La misma respuesta para la otra pregunta: el HW está en su mayoría por debajo de la distinción entre el modo de usuario / kernel (excepto por los mecanismos que proporciona para la verificación de seguridad, en su mayoría los distintos anillos).

¿Qué direccionamiento se usa en los procesadores x86 / x86_64 para el almacenamiento en caché en L1, L2 y L3 (LLC) - físico o virtual (usando PT / PTE y TLB ) y de alguna manera le afecta PAT (tabla de atributos de página) ?

¿Y hay diferencia entre los controladores (kernel-espacio) y las aplicaciones (espacio de usuario) en este caso?

Respuesta corta: Intel usa cachés L1 virtualmente indexados y etiquetados físicamente (VIPT): ¿Qué se utilizará para el intercambio de datos entre los subprocesos que se ejecutan en un Core con HT?

  • L1: direccionamiento virtual (en el caché de 8-way para definir el Set se requiere 12 bits bajos que son iguales en virt y phys)
  • L2 - Direccionamiento físico (requiere acceso a TLB para Virt-2-Phys)
  • L3 - Direccionamiento físico (requiere acceso a TLB para Virt-2-Phys)