stringtranslate.com

coherencia de caché

Una ilustración que muestra múltiples cachés de cierta memoria, que actúa como un recurso compartido.
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 la caché es la uniformidad de los datos de recursos compartidos que terminan almacenados en múltiples cachés locales . Cuando los clientes de un sistema mantienen cachés de un recurso de memoria común, pueden surgir problemas con datos incoherentes, como es particularmente el caso de las CPU en un sistema multiprocesamiento .

En la ilustración de la derecha, considere que ambos clientes tienen una copia en caché de un bloque de memoria particular de una lectura anterior. Supongamos que el cliente en la parte inferior actualiza/cambia ese bloque de memoria, el cliente en la parte superior podría quedarse con un caché de memoria no válido sin ninguna notificación del cambio. La coherencia de la caché tiene como objetivo gestionar dichos conflictos manteniendo una vista coherente de los valores de datos en múltiples cachés.

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 se cambia una de las copias de datos, 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 (datos) compartidos se propaguen por todo el sistema de manera oportuna. [1]

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

Escritura de propagación
Los cambios en los datos de cualquier caché deben propagarse a otras copias (de esa línea de caché) en las cachés de pares.
Serialización de transacciones
Todos los procesadores deben ver las lecturas/escrituras en una única ubicación de memoria en el mismo orden.

Teóricamente, 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é. [3]

Definición

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

Un tipo de datos que ocurren simultáneamente en diferentes memorias caché se llama 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é: [4]

  1. En una lectura realizada por un procesador P en una ubicación X que sigue a una escritura realizada por el mismo procesador P en X, sin que se produzcan escrituras en X por parte de otro procesador 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 ubicación X que sigue a una escritura realizada por otro procesador P2 en X, sin que ningún procesador realice otras escrituras en X entre los dos accesos y con la lectura y la escritura suficientemente separadas, X siempre debe devuelve 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 ubicación de la memoria compartida garantiza que todos los cachés tengan una vista coherente de la memoria. Si el procesador P1 lee el antiguo valor 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 los cuales contienen 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 almacenada en caché a 20. Si garantizamos solo la propagación de escritura, entonces P3 y P4 ciertamente verán los cambios realizados en 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 realizaron 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 la 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 en caché debe parecer ejecutar todas las cargas y almacenes de todos los subprocesos en una única ubicación de memoria en un orden total que respete el orden del programa de cada subproceso". . [3] Por lo tanto, la única diferencia entre el sistema coherente en caché y el sistema coherente secuencialmente está en el número de ubicaciones de direcciones de las que habla la definición (ubicación de memoria única para un sistema coherente en caché y todas las ubicaciones de memoria para un sistema consistente secuencialmente).

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

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 a los procesadores se les permite actualizar sus propias copias libremente, puede resultar en una vista inconsistente de la memoria.

Mecanismos de coherencia

Los dos mecanismos más comunes para garantizar la coherencia son el espionaje y el basado en directorios , y cada uno tiene sus propias ventajas e inconvenientes. [7] Los protocolos basados ​​en espionaje 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 espionaje no es escalable. Cada solicitud debe transmitirse a todos los nodos de un sistema, lo que significa que a medida que el sistema crece, 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 este motivo, muchos de los sistemas más grandes (>64 procesadores) utilizan este tipo de coherencia de caché.

Fisgón

Introducido por primera vez en 1983, [8] el espionaje es un proceso en el que los cachés individuales monitorean las líneas de direcciones en busca de accesos a ubicaciones de memoria que han almacenado en caché. [4] Los protocolos de invalidación de escritura y los protocolos de actualización de escritura utilizan 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 snoop 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 lo determinado 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é pertenece a la menor cantidad de nodos. [9]

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 pedir permiso para cargar una entrada desde la memoria primaria a su caché. Cuando se cambia una entrada, el directorio actualiza o invalida las otras cachés con esa entrada.

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

Protocolos de coherencia

Los protocolos de coherencia aplican 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 implementar los requisitos básicos de coherencia. Puede personalizarse para el sistema o la aplicación de destino.

Los protocolos también se pueden clasificar como espías o basados ​​en directorios. Normalmente, los primeros sistemas utilizaban protocolos basados ​​en directorios en los que un directorio mantendría un seguimiento de los datos que se compartían y de quienes los compartían. En los protocolos snoopy, las solicitudes de transacción (para leer, escribir o actualizar) se envían a todos los procesadores. Todos los procesadores espían la solicitud y responden adecuadamente.

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 que un caché tiene una copia, el controlador de caché invalida su propia copia de la ubicación de memoria espiada, lo que fuerza una lectura desde la memoria principal del nuevo valor en su próximo acceso. [4]
Actualización de escritura
Cuando se observa una operación de escritura en una ubicación de la que un caché tiene una copia, el controlador de caché actualiza su propia copia de la ubicación de memoria espiada con los nuevos datos.

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

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 Dragon . [1] En 2011, ARM Ltd propuso AMBA 4 ACE [11] para manejar la coherencia en SoC . La especificación AMBA CHI (Coherent Hub Interface) [12] de ARM Ltd , que pertenece al grupo de especificaciones AMBA5, define las interfaces para la conexión de procesadores totalmente coherentes.

Ver también

Referencias

  1. ^ ab E. Thomadakis, Michael (2011). La arquitectura del procesador Nehalem y las plataformas SMP Nehalem-EP (PDF) . Universidad Texas A & M. pag. 30. Archivado desde el original (PDF) el 11 de agosto de 2014.
  2. ^ ab Yan, Solihin. Fundamentos de la arquitectura multinúcleo paralela . OCLC  884540034.
  3. ^ ab Sorín, Daniel J.; Colina, Mark D.; Madera, David Allen (1 de enero de 2011). "Una introducción a la coherencia de la memoria y la coherencia de la caché ". Editores Morgan y Claypool. OCLC  726930429.
  4. ^ abc Patterson y Hennessy. Organización y diseño de computadoras - 4ta edición . ISBN 978-0-12-374493-7.
  5. ^ Neupane, Mahesh (16 de abril de 2004). "Coherencia de caché" (PDF). Archivado desde el original (PDF) el 20 de junio de 2010.
  6. ^ Steinke, Robert C.; Nutt, Gary J. (1 de septiembre de 2004). "Una teoría unificada de la coherencia de la memoria compartida". J. ACM . 51 (5): 800–849. arXiv : cs/0208027 . doi :10.1145/1017460.1017464. ISSN  0004-5411. S2CID  3206071.
  7. ^ Patterson, David A.; Hennessy, John L. (1990). Arquitectura informática: un enfoque cuantitativo . Editores Morgan Kaufmann. págs. 467–468. ISBN 1-55860-069-8.
  8. ^ "Ravishankar, Chinya; Goodman, James (28 de febrero de 1983). "Implementación de caché para múltiples microprocesadores"" (PDF) . Actas de IEEE COMPCON: 346–350 .
  9. ^ Rasmus Ulfsnes (junio de 2013). "Diseño de un filtro Snoop para protocolos de coherencia de caché basados ​​en Snoop" 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.
  10. ^ "Conferencia 18: Espionaje frente a coherencia basada en directorios" (PDF) . Berkeley.edu . Consultado el 14 de mayo de 2023 .
  11. ^ Kriouile (16 de septiembre de 2013). Análisis formal de la especificación ACE para sistemas en chip coherentes de caché. En Métodos formales para sistemas críticos industriales . Springer Berlín Heidelberg. ISBN 978-3-642-41010-9.
  12. ^ Ltd, brazo. "AMBA | AMBA 5". Desarrollador de brazo . Consultado el 27 de abril de 2021 .

Otras lecturas