2012-03-22 25 views
7

Acabo de leer dos artículos sobre este tema que proporcionan información inconsistente, por lo que quiero saber cuál es el correcto. Tal vez ambos son correctos, pero ¿en qué contexto?¿Cuántos bytes el controlador de caché toma de la memoria principal a la caché L2?

Los first un estados que buscamos a un tamaño página un momento

El controlador de memoria caché está siempre observando las posiciones de memoria que se carga y carga de datos desde varias posiciones de memoria después de la posición de memoria que acaba de ser leer.

Para darle un ejemplo real, si la CPU cargó datos almacenados en la dirección 1,000, el controlador de caché cargará datos de "n" direcciones después de la dirección 1,000. Este número "n" se llama página; si un procesador determinado está trabajando con páginas de 4 KB (que es un valor típico), cargará datos de 4,096 direcciones por debajo de la posición de memoria actual que se está cargando (dirección 1,000 en nuestro ejemplo). En la siguiente figura, ilustramos este ejemplo.

enter image description here

Los second un estados que buscamos a sizeof (línea de caché) + sizeof (prefetcher) un momento

Así podemos resumir la forma en la memoria caché funciona como:

  1. La CPU solicita instrucciones/datos almacenados en la dirección "a".
  2. Dado que los contenidos de la dirección "a" no están dentro de la memoria caché, la CPU tiene que buscarlos directamente desde la RAM.
  3. El controlador de caché carga una línea (normalmente 64 bytes) comenzando en la dirección "a" en la memoria caché. Esto es más datos que la CPU solicitada, por lo que si el programa continúa ejecutándose secuencialmente (es decir, solicita la dirección a + 1), la siguiente instrucción/datos que la CPU solicitará ya estará cargada en la memoria caché .
  4. Un circuito denominado captador previo carga más datos ubicados después de esta línea, es decir, comienza a cargar los contenidos desde la dirección a + 64 en la caché. Para darle un ejemplo real, las CPU Pentium 4 tienen un buscador previo de 256 bytes , por lo que carga los siguientes 256 bytes después de la línea ya cargada en el caché.
+0

No puede ser una página completa. Los procesadores actuales pueden admitir páginas de hasta 4 MB en modo de 32 bits y 1 GB en modo de 64 bits. – ughoavgfhw

Respuesta

9

Depende totalmente de la implementación del hardware. Algunas implementaciones cargan una sola línea desde la memoria principal en un momento — y los tamaños de línea de caché varían mucho entre los diferentes procesadores. He visto tamaños de línea desde 64 bytes hasta 256 bytes. Básicamente, lo que significa el tamaño de una "línea de caché" es que cuando la CPU solicita memoria desde la RAM principal, lo hace así n bytes a la vez. Entonces, si n tiene 64 bytes y carga un entero de 4 bytes a 0x1004, la MMU realmente enviará 64 bytes a través del bus, todas las direcciones de 0x1000 a 0x1040. Todo este fragmento de datos se almacenará en la memoria caché de datos como una sola línea.

Algunas MMU pueden buscar múltiples líneas de caché en el bus por solicitud, de modo que realizar una solicitud en la dirección 0x1000 en una máquina que tiene caché de 64 bytes en realidad carga cuatro líneas de 0x1000 a 0x1100.Some systems le permiten hacer esto explícitamente con prefetch de caché especial o códigos de operación DMA.

El artículo a través de su primer enlace, sin embargo, es completamente incorrecto. Confunde el tamaño de un OS memory page con un hardware cache line. Estos son conceptos totalmente diferentes. El primero es el tamaño mínimo de espacio de direcciones virtuales que el sistema operativo asignará de una vez. El último es un detalle de cómo la CPU habla con la RAM principal.

se asemejan a entre sí solo en el sentido de que cuando el sistema operativo tiene poca memoria física, colocará en el disco parte de la memoria virtual no utilizada recientemente; luego, cuando usa esa memoria nuevamente, el sistema operativo carga esa página completa desde el disco a la memoria RAM física. Esto es análogo (pero no relacionado) a la forma en que la CPU carga los bytes de la RAM, por lo que el autor de "Hardware Secrets" se confunde.

Un buen lugar para aprender todo sobre la memoria de la computadora y por qué las cachés funcionan de la forma en que lo hacen es el documento de Ulrich Drepper, What Every Programmer Should Know About Memory.

+0

+1 para el enlace al papel de memoria Drepper. Sin embargo, el tamaño de la página es ciertamente una característica de hw y el sistema operativo no puede elegir un valor arbitrario para ella (por ejemplo, buscar cómo funcionan las tablas de páginas). – janneb

+0

@janneb Esta respuesta no parecía ser el lugar correcto para analizar la diferencia entre la búsqueda de caché, el tamaño de página de d-ERAT, el tamaño de TLB y el tamaño de la tabla de VMEM de software. Pero a corto plazo, muchas implementaciones permiten tamaños de página variables en el TLB. Tengo un dispositivo en mi escritorio que permite que la memoria se asigne como páginas de 4kb, 64kb o 4mb. – Crashworks

+0

Ciertamente no, pero tal como está ahora, al leer su respuesta uno puede entender incorrectamente que las páginas de memoria son simplemente un detalle de implementación del sistema operativo, mientras que en realidad está íntimamente conectado con la forma en que HW realiza la búsqueda de direcciones virtuales o físicas. – janneb

Cuestiones relacionadas