stringtranslate.com

Coherencia de caché

Si dos clientes tienen una copia en caché de un bloque de memoria en particular y uno de ellos modifica el bloque, la copia del otro cliente debe invalidarse o actualizarse. Si no es así, el sistema se encuentra en un estado incoherente: contiene dos registros diferentes del mismo bloque de memoria que afirman estar actualizados.
Cachés incoherentes: los cachés tienen diferentes valores de una única ubicación de dirección.

En la arquitectura informática , la coherencia de caché es la uniformidad de los datos de recursos compartidos que se almacenan en múltiples cachés locales . En un sistema coherente de caché, si varios clientes tienen una copia en caché de la misma región de un recurso de memoria compartida, todas las copias son iguales. Sin coherencia de caché, un cambio realizado en la región por un cliente puede no ser visto por otros y pueden producirse errores cuando los datos utilizados por diferentes clientes no coinciden. [1]

Se utiliza un protocolo de coherencia de caché para mantener la coherencia de la caché. Los dos tipos principales son los protocolos de espionaje y los basados ​​en directorios .

La coherencia de la caché es de particular relevancia en sistemas multiprocesamiento , donde cada CPU puede tener su propia caché local de un recurso de memoria compartida.

Cachés coherentes: el valor en todas las copias de los cachés es el mismo.

Descripción general

En un sistema multiprocesador de memoria compartida con una memoria caché separada para cada procesador, es posible tener muchas copias de los datos compartidos: una copia en la memoria principal y otra en la caché local de cada procesador que la solicitó. Cuando una de las copias de los datos se modifica, las otras copias deben reflejar ese cambio. La coherencia de la caché es la disciplina que garantiza que los cambios en los valores de los operandos compartidos (datos) se propaguen por todo el sistema de manera oportuna. [2]

Los siguientes son los requisitos para la coherencia de la caché: [3]

Propagación de escritura
Los cambios en los datos de cualquier caché deben propagarse a otras copias (de esa línea de caché) en los cachés pares.
Serialización de transacciones
Las lecturas/escrituras en una única ubicación de memoria deben ser vistas por todos los procesadores en el mismo orden.

En teoría, la coherencia se puede realizar en la granularidad de carga/almacenamiento . Sin embargo, en la práctica, generalmente se realiza en la granularidad de los bloques de caché. [4]

Definición

La coherencia define el comportamiento de las lecturas y escrituras en una única ubicación de dirección. [3]

Un tipo de datos que aparecen simultáneamente en diferentes memorias caché se denomina coherencia de caché o, en algunos sistemas, memoria global.

En un sistema multiprocesador, considere que más de un procesador ha almacenado en caché una copia de la ubicación de memoria X. Las siguientes condiciones son necesarias para lograr la coherencia de la caché: [5]

  1. En una lectura realizada por un procesador P en una ubicación X que sigue a una escritura del mismo procesador P en X, sin que otro procesador escriba en X entre las instrucciones de escritura y lectura realizadas por P, X siempre debe devolver el valor escrito por P.
  2. En una lectura realizada por un procesador P1 en la posición X que sigue a una escritura de otro procesador P2 en X, sin que se produzcan otras escrituras en X realizadas por ningún otro procesador entre los dos accesos y estando la lectura y la escritura suficientemente separadas, X siempre debe devolver el valor escrito por P2. Esta condición define el concepto de visión coherente de la memoria. La propagación de las escrituras a la posición de memoria compartida garantiza que todas las cachés tengan una visión coherente de la memoria. Si el procesador P1 lee el valor antiguo de X, incluso después de la escritura de P2, podemos decir que la memoria es incoherente.

Las condiciones anteriores satisfacen los criterios de propagación de escritura necesarios para la coherencia de la caché. Sin embargo, no son suficientes, ya que no satisfacen la condición de serialización de transacciones. Para ilustrar esto mejor, considere el siguiente ejemplo:

Un sistema multiprocesador consta de cuatro procesadores: P1, P2, P3 y P4, todos conteniendo copias en caché de una variable compartida S cuyo valor inicial es 0. El procesador P1 cambia el valor de S (en su copia en caché) a 10, después de lo cual el procesador P2 cambia el valor de S en su propia copia en caché a 20. Si aseguramos solo la propagación de escritura, entonces P3 y P4 seguramente verán los cambios realizados a S por P1 y P2. Sin embargo, P3 puede ver el cambio realizado por P1 después de ver el cambio realizado por P2 y, por lo tanto, devolver 10 en una lectura a S . P4 por otro lado puede ver los cambios realizados por P1 y P2 en el orden en que se realizan y, por lo tanto, devolver 20 en una lectura a S . Los procesadores P3 y P4 ahora tienen una vista incoherente de la memoria.

Por lo tanto, para satisfacer la serialización de transacciones y, por lo tanto, lograr la coherencia de caché, se debe cumplir la siguiente condición junto con las dos anteriores mencionadas en esta sección:

La definición alternativa de un sistema coherente es a través de la definición del modelo de memoria de consistencia secuencial : "el sistema coherente de caché debe parecer que ejecuta todas las cargas y almacenamientos de los subprocesos en una única ubicación de memoria en un orden total que respeta el orden del programa de cada subproceso". [4] Por lo tanto, la única diferencia entre el sistema coherente de caché y el sistema secuencialmente consistente está en el número de ubicaciones de direcciones de las que habla la definición (una única ubicación de memoria para un sistema coherente de caché y todas las ubicaciones de memoria para un sistema secuencialmente consistente).

Otra definición es: "un multiprocesador es consistente en caché si todas las escrituras en la misma ubicación de memoria se realizan en algún orden secuencial". [7]

En raras ocasiones, pero especialmente en algoritmos, la coherencia puede referirse a la localidad de referencia . Pueden existir múltiples copias de los mismos datos en diferentes cachés simultáneamente y, si se permite que los procesadores actualicen sus propias copias libremente, puede resultar en una visión inconsistente de la memoria.

Mecanismos de coherencia

Los dos mecanismos más comunes para garantizar la coherencia son el snooping y los basados ​​en directorios , cada uno con sus propias ventajas y desventajas. [8] Los protocolos basados ​​en snooping tienden a ser más rápidos, si hay suficiente ancho de banda disponible, ya que todas las transacciones son una solicitud/respuesta vista por todos los procesadores. El inconveniente es que el snooping no es escalable. Cada solicitud debe transmitirse a todos los nodos de un sistema, lo que significa que 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, por otro lado, tienden a 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 transmiten. Por esta razón, muchos de los sistemas más grandes (>64 procesadores) utilizan este tipo de coherencia de caché.

Fisgón

Introducido por primera vez en 1983, [9] el snooping es un proceso en el que los cachés individuales monitorean las líneas de dirección en busca de accesos a ubicaciones de memoria que han almacenado en caché. [5] Los protocolos de invalidación de escritura y los protocolos de actualización de escritura hacen uso de este mecanismo.
Para el mecanismo de espionaje, un filtro de espionaje reduce el tráfico de espionaje manteniendo una pluralidad de entradas, cada una de las cuales representa una línea de caché que puede ser propiedad de uno o más nodos. Cuando se requiere el reemplazo de una de las entradas, el filtro de espionaje selecciona el reemplazo de la entrada que representa la línea o líneas de caché propiedad de la menor cantidad de nodos, según se determina a partir de un vector de presencia en cada una de las entradas. Se utiliza un algoritmo temporal o de otro tipo para refinar la selección si más de una línea de caché es propiedad de la menor cantidad de nodos. [10]

Basado en directorio

En un sistema basado en directorios, los datos que se comparten se colocan en un directorio común que mantiene la coherencia entre las cachés. El directorio actúa como un filtro a través del cual el procesador debe solicitar permiso para cargar una entrada de la memoria principal a su caché. Cuando se modifica una entrada, el directorio actualiza o invalida las demás cachés con esa entrada.

Los sistemas de memoria compartida distribuida imitan estos mecanismos en un intento de mantener la consistencia entre bloques de memoria en sistemas débilmente acoplados. [11]

Protocolos de coherencia

Los protocolos de coherencia aplican la coherencia de caché en sistemas multiprocesador. La intención es que dos clientes nunca vean valores diferentes para los mismos datos compartidos.

El protocolo debe cumplir los requisitos básicos de coherencia y puede ser personalizado para el sistema o la aplicación de destino.

Los protocolos también se pueden clasificar como de espionaje o basados ​​en directorios. Por lo general, los primeros sistemas utilizaban protocolos basados ​​en directorios, en los que un directorio mantenía un registro de los datos que se compartían y de los usuarios que los compartían. En los protocolos de espionaje, las solicitudes de transacción (de lectura, escritura o actualización) se envían a todos los procesadores. Todos los procesadores espían la solicitud y responden de forma adecuada.

La propagación de escritura en protocolos snoopy se puede implementar mediante cualquiera de los siguientes métodos:

Invalidar escritura
Cuando se observa una operación de escritura en una ubicación de la cual un caché tiene una copia, el controlador de caché invalida su propia copia de la ubicación de memoria observada, lo que fuerza una lectura desde la memoria principal del nuevo valor en su próximo acceso. [5]
Actualización de escritura
Cuando se observa una operación de escritura en una ubicación de la cual un caché tiene una copia, el controlador de caché actualiza su propia copia de la ubicación de memoria observada con los nuevos datos.

Si el diseño del protocolo establece que siempre que se modifique una copia de los datos compartidos, todas las demás copias deben "actualizarse" para reflejar el cambio, entonces se trata de un protocolo de escritura y actualización. Si el diseño establece que una escritura en una copia almacenada en caché por parte de cualquier procesador requiere que otros procesadores descarten o invaliden sus copias almacenadas en caché, entonces se trata de un protocolo de escritura e invalidación.

Sin embargo, la escalabilidad es una deficiencia de los protocolos de transmisión.

Se han ideado varios modelos y protocolos para mantener la coherencia, como MSI , MESI (también conocido como Illinois), MOSI , MOESI , MERSI , MESIF , write-once , Synapse, Berkeley, Firefly y el protocolo Dragon . [2] En 2011, ARM Ltd propuso AMBA 4 ACE [12] para gestionar la coherencia en SoC . La especificación AMBA CHI (Coherent Hub Interface) [13] de ARM Ltd , que pertenece al grupo de especificaciones AMBA5, define las interfaces para la conexión de procesadores totalmente coherentes.

Véase también

Referencias

  1. ^ Marowka, Ami (1 de enero de 2010). "Capítulo 2: Dificultades y problemas de la programación multinúcleo". Advances in Computers. Vol. 79. Elsevier. págs. 71–117. doi :10.1016/s0065-2458(10)79002-1.
  2. ^ ab E. Thomadakis, Michael (2011). La arquitectura del procesador Nehalem y las plataformas SMP Nehalem-EP (PDF) . Universidad Texas A&M. p. 30. Archivado desde el original (PDF) el 11 de agosto de 2014.
  3. ^ ab Yan, Solihin. Fundamentos de la arquitectura multinúcleo paralela . OCLC  884540034.
  4. ^ ab Sorin, Daniel J.; Hill, Mark D.; Wood, David Allen (1 de enero de 2011). Introducción a la coherencia de la memoria y la caché . Morgan & Claypool Publishers. OCLC  726930429.
  5. ^ abc Patterson y Hennessy. Organización y diseño de computadoras - 4.ª edición . ISBN 978-0-12-374493-7.
  6. ^ Neupane, Mahesh (16 de abril de 2004). "Coherencia de caché" (PDF). Archivado desde el original (PDF) el 20 de junio de 2010.
  7. ^ Steinke, Robert C.; Nutt, Gary J. (1 de septiembre de 2004). "Una teoría unificada de la consistencia de la memoria compartida". J. ACM . 51 (5): 800–849. arXiv : cs/0208027 . doi :10.1145/1017460.1017464. ISSN  0004-5411. S2CID  3206071.
  8. ^ Patterson, David A.; Hennessy, John L. (1990). Arquitectura informática: un enfoque cuantitativo . Morgan Kaufmann Publishers. págs. 467–468. ISBN 1-55860-069-8.
  9. ^ "Ravishankar, Chinya; Goodman, James (28 de febrero de 1983). "Implementación de caché para múltiples microprocesadores"" (PDF) . Actas de IEEE COMPCON: 346–350 .
  10. ^ Rasmus Ulfsnes (junio de 2013). "Diseño de un filtro de espionaje para protocolos de coherencia de caché basados ​​en espionaje". Archivado el 1 de febrero de 2014 en Wayback Machine (PDF). diva-portal.org . Universidad Noruega de Ciencia y Tecnología. Consultado el 20 de enero de 2014.
  11. ^ "Conferencia 18: Espionaje frente a coherencia basada en directorios" (PDF) . Berkeley.edu . Consultado el 14 de mayo de 2023 .
  12. ^ Kriouile (16 de septiembre de 2013). Análisis formal de la especificación ACE para sistemas coherentes de caché en chip. En Métodos formales para sistemas críticos industriales . Springer Berlin Heidelberg. ISBN 978-3-642-41010-9.
  13. ^ Ltd, Arm. "AMBA | AMBA 5". Desarrollador Arm . Consultado el 27 de abril de 2021 .

Lectura adicional