Coherencia de caché
Una caché puede utilizarse para mejorar el rendimiento del acceso a un determinado recurso. Cuando hay varias cachés de este tipo para el mismo recurso, como se muestra en la imagen, esto puede dar lugar a problemas. La coherencia de la caché o la coherencia de la caché se refiere a una serie de formas de asegurarse de que todas las cachés del recurso tienen los mismos datos, y que los datos de las cachés tienen sentido (lo que se llama integridad de los datos). La coherencia de la caché es un caso especial de la coherencia de la memoria.
Puede haber problemas si hay muchas cachés de un recurso de memoria común, ya que los datos de la caché pueden dejar de tener sentido, o una caché puede dejar de tener los mismos datos que las demás. Un caso común en el que se produce el problema es la caché de las CPUs en un sistema multiproceso. Como se puede ver en la figura, si el cliente superior tiene una copia de un bloque de memoria de una lectura anterior y el cliente inferior cambia ese bloque de memoria, el cliente superior podría quedarse con una caché de memoria no válida, sin saberlo. La coherencia de la caché está ahí para gestionar estos conflictos y mantener la consistencia entre la caché y la memoria.
Múltiples cachés de recursos compartidos
Definición
La coherencia define el comportamiento de las lecturas y escrituras en la misma posición de memoria. Las cachés son coherentes, si se cumplen todas las condiciones siguientes:
- Cuando un procesador P lee una ubicación X, después de escribir en esa ubicación, P debe obtener el valor que escribió, si ningún otro procesador escribió otro valor en esa ubicación. Esto también es cierto para los sistemas de monoprocesadores, significa que la memoria es capaz de mantener un valor escrito.
- Supongamos que hay dos procesadores, P1 y P2 , y que P1 escribió un valor X1 , y después, P2 escribió un valor X 2, si P1 lee el valor, debe obtener el valor escrito por P2 , X2 , y no el valor que escribió, X1 , si no hay otras escrituras entre ambos. Esto significa que la vista de la memoria es coherente. Si los procesadores pueden leer el mismo valor anterior después de la escritura realizada por P , 2la memoria no sería coherente.
- Sólo puede haber una escritura en un lugar determinado de la memoria a la vez. Si hay varias escrituras, deben producirse una tras otra. En otras palabras, si la ubicación X recibió dos valores diferentes A y B, en este orden, por dos procesadores cualesquiera, los procesadores nunca pueden leer la ubicación X como B y luego leerla como A. La ubicación X debe verse con los valores A y B en ese orden.
Estas condiciones se definen suponiendo que las operaciones de lectura y escritura se realizan de forma instantánea. Sin embargo, esto no ocurre en el hardware de los ordenadores debido a la latencia de la memoria y a otros aspectos de la arquitectura. Una escritura del procesador X puede no ser vista por una lectura del procesador Y si la lectura se realiza en un tiempo muy pequeño después de la escritura. El modelo de consistencia de memoria define cuándo un valor escrito debe ser visto por una siguiente instrucción de lectura realizada por los otros procesadores.
Mecanismos de coherencia de la caché
- Los mecanismos de coherencia basados en directorios mantienen un directorio central de bloques en caché.
- El snooping es el proceso en el que cada caché supervisa las líneas de direcciones para los accesos a las ubicaciones de memoria que están en su caché. Cuando se observa una operación de escritura en una ubicación de la que la caché tiene una copia, el controlador de la caché invalida su propia copia de la ubicación de memoria fisgoneada.
- El snarfing es cuando un controlador de caché observa tanto la dirección como los datos en un intento de actualizar su propia copia de una ubicación de memoria cuando un segundo maestro modifica una ubicación en la memoria principal.
Los sistemas de memoria compartida distribuida imitan estos mecanismos para poder mantener la coherencia entre bloques de memoria en sistemas poco acoplados.
Los dos tipos de coherencia más comunes que se suelen estudiar son el Snooping y el basado en directorios. Cada uno tiene sus propias ventajas e inconvenientes. Los protocolos de snooping tienden a ser más rápidos, si se dispone de suficiente ancho de banda, ya que todas las transacciones son una petición/respuesta vista por todos los procesadores. El inconveniente es que el snooping no es escalable. Cada solicitud debe ser transmitida a todos los nodos del sistema. A medida que el sistema se hace más grande, el tamaño del bus (lógico o físico) y el ancho de banda que proporciona deben crecer. Los directorios, en cambio, suelen tener latencias más largas (con una solicitud/reenvío/respuesta de 3 saltos) pero utilizan mucho menos ancho de banda, ya que los mensajes son punto a punto y no se difunden. Por esta razón, muchos de los sistemas más grandes (>64 procesadores) utilizan este tipo de coherencia de caché.
Preguntas y respuestas
P: ¿Qué es la coherencia de caché?
R: La coherencia de caché se refiere a garantizar que todas las cachés de un recurso tengan los mismos datos y que los datos de las cachés sean coherentes (integridad de los datos).
P: ¿Cuál es el propósito de la coherencia de la caché?
R: El propósito de la coherencia de la caché es gestionar los conflictos entre varias cachés de un recurso de memoria común y mantener la coherencia entre la caché y la memoria.
P: ¿Cuáles pueden ser las consecuencias de no tener coherencia de caché?
R: Sin coherencia de caché, es posible que los datos de la caché dejen de tener sentido o que una caché no tenga los mismos datos que las demás, lo que puede dar lugar a incoherencias y errores.
P: ¿Cuál es un caso común en el que se producen problemas con la coherencia de la caché?
R: Un caso común en el que se producen problemas con la coherencia de la caché es la caché de las CPU en un sistema multiproceso.
P: ¿Cómo funciona la coherencia de caché?
R: La coherencia de la memoria caché funciona garantizando que todas las memorias caché de un recurso tengan los mismos datos y que los datos de las memorias caché sean coherentes a través de varios métodos.
P: ¿Qué se entiende por coherencia de memoria?
R: La coherencia de memoria se refiere a la consistencia de los datos en un recurso de memoria compartida.
P: ¿Cómo puede mejorar el rendimiento la coherencia de la memoria caché?
R: La coherencia de la memoria caché puede mejorar el rendimiento al permitir un acceso más rápido y eficiente a un recurso determinado.