El protocolo de coherencia de caché de Firefly es el esquema utilizado en la estación de trabajo multiprocesador DEC Firefly , desarrollado por DEC Systems Research Center . Este protocolo es un protocolo de coherencia de caché de actualización de escritura de 3 estados. A diferencia del protocolo Dragon , el protocolo Firefly actualiza la memoria principal, así como los cachés locales en la transición del bus de actualización de escritura. Por lo tanto, los estados Shared Clean y Shared Modified presentes en el caso del Protocolo Dragon, no se distinguen en el caso del Protocolo Firefly.
Estados
En este protocolo, se pueden asignar los siguientes estados a cada bloque:
- Válido-Exclusivo (V) : El bloque de caché es válido, limpio y solo reside en un caché.
- Compartido (S) : el bloque de caché es válido, limpio y puede residir en múltiples cachés.
- Sucio (D) : El bloque es la única copia de la memoria y está sucio, es decir, su valor ha sido modificado desde que fue sacado de la memoria. Este es el único estado que genera una escritura diferida cuando el bloque se reemplaza en la caché.
Estos estados corresponden a los estados exclusivo , compartido y modificado del protocolo MESI . Este protocolo nunca causa invalidación, por lo que el estado no válido no se enumera aquí.
Solicitudes del lado del procesador
Las solicitudes del lado del procesador o las solicitudes de la CPU son los accesos que el procesador realiza a sus propios cachés. Estos pueden clasificarse en 4 tipos de solicitudes, a saber:
- PrRdMiss : solicitud del lado del procesador para leer un bloque de caché que no reside en el caché.
- PrRdHit : solicitud del lado del procesador para leer un bloque de caché que ya reside en el caché.
- PrWtHit : solicitud del lado del procesador para escribir en un bloque de caché que ya reside en el caché.
- PrWtMiss : solicitud del lado del procesador para escribir en un bloque de caché que no reside en el caché.
Solicitudes del lado del autobús
Las solicitudes del lado del bus son las solicitudes generadas en respuesta a las solicitudes del lado del procesador para mantener la coherencia de la caché. Estos son fisgoneados por el fisgón de los cachés y la memoria y se toman las medidas adecuadas. Estos se clasifican en dos tipos en el protocolo Firefly, a saber:
1. BusRd : Solicitud que indica que hay una solicitud de lectura a un bloque de caché realizada por otro procesador y que el procesador no tiene los datos.
2. BusWr / BusUpdt : Solicitud que indica que hay una solicitud de escritura en un bloque de caché realizada por otro procesador y todos los demás cachés deben actualizar sus copias del bloque.
Transiciones
Para identificar qué transiciones deben realizarse, el protocolo detecta el uso compartido mediante una línea de bus especial denominada CopiesExist . Todos los demás cachés espían todas las operaciones de memoria y aumentan CopiesExist (C) si detectan un "golpe de espionaje", es decir, si tienen una copia de los datos en su propio caché.
Una flecha que va de la nada a un estado representa un bloque recién cargado.
Transiciones iniciadas por el procesador
En caso de que la lectura del procesador se pierda en un bloque, y si no hay copia del bloque en ningún otro caché, la línea CopiesExist (C) está marcada y C es BAJA, entonces el bloque se coloca en el caché y el estado se establece como Válido . Si ya hay una copia en algunos cachés (C es ALTO), entonces el bloque se coloca en el caché en el estado Compartido .
En un error de escritura en un bloque, si no hay copia del bloque en ningún caché (C es BAJO), el bloque se coloca en el caché en el estado sucio . Si ya hay una copia del bloque en algunos cachés (C es ALTO), entonces el bloque se coloca en el caché en el estado Compartido y los cambios se reflejan en la memoria.
Si un bloque ya está almacenado en caché en estado válido , un acierto de escritura del procesador cambia el estado a estado sucio , ya que ningún otro caché tiene la copia de datos. Esta escritura no se escribe en la memoria.
Si un bloque se almacena en caché en estado sucio y se produce un éxito de escritura en el procesador, el estado permanece como estado sucio .
Si el bloque está en estado Compartido y hay un golpe de escritura del procesador, y si ya hay una copia en algunas cachés (C), el bloque permanece en estado Compartido . Si no hay una copia del bloque en ninguna caché (! C), el bloque se escribe en estado válido ya que es la única copia "válida" presente en las cachés.
Si hay un error de lectura de la CPU, el bloque permanece en el estado en el que ya se encuentra, como en el protocolo Dragon.
Transiciones iniciadas por bus
Si el bloque está en estado compartido y hay una solicitud BusRd o BusWr, el bloque permanece en estado compartido.
Si el bloque está en estado sucio y otro procesador lo lee o escribe, lo solicita a otro procesador, pasa al estado compartido y los cambios se reflejan en la memoria principal.
Si el bloque está en estado válido y otro procesador lo lee, pasa al estado compartido. Si se fisgonea otra solicitud de escritura del procesador, el bloque se actualizará y, dado que ahora se está compartiendo, también pasa al estado Compartido.
A diferencia de MESI, en el protocolo de actualización de Firefly, la propagación de escritura se asegura actualizando directamente todas las demás copias en una solicitud de escritura por parte de los procesadores (PrWr).
Comparación con otras políticas
1. Debido al hecho de que existen copias actualizadas de los datos en las cachés, hay menos errores de coherencia que en las políticas de escritura e invalidación.
2. Se requiere un ancho de banda de bus más alto que en los protocolos invalidados porque los protocolos invalidados simplemente envían una señal / comando en el bus que es espiado en otros procesadores, provocando que invaliden sus propias copias de los datos. En los protocolos de actualización, por el contrario, el nuevo valor de datos debe enviarse junto con la señal BusUpdate para permitir que la memoria y otras cachés espíen y actualicen sus datos.
3. La actualización de los datos en cada escritura provoca que algunos datos que ya no se necesitan permanezcan en la caché, lo que puede provocar que se eliminen algunos datos "útiles".
Ver también
Referencias
- Hashemi, B. (1 de mayo de 2011). Simulación y evaluación de protocolos de coherencia de caché Snoopy con estrategia de actualización en sistemas multiprocesador de memoria compartida . 2011 Noveno Simposio Internacional IEEE sobre Procesamiento en Paralelo y Distribuido con Talleres de Aplicaciones (ISPAW) . págs. 256-259. doi : 10.1109 / ISPAW.2011.68 . ISBN 978-1-4577-0524-3.
- Eggers, SJ; Katz, RH (1 de enero de 1988). Una caracterización de la compartición en programas paralelos y su aplicación a la evaluación del protocolo de coherencia . Actas del 15º Simposio Internacional Anual sobre Arquitectura de Computadoras . ISCA '88. Los Alamitos, CA, EE.UU .: IEEE Computer Society Press. págs. 373–382. doi : 10.1145 / 633625.52442 . ISBN 978-0818608612.
- Archibald, James; Baer, Jean-Loup (1 de septiembre de 1986). "Protocolos de coherencia de caché: evaluación mediante un modelo de simulación multiprocesador". ACM Trans. Computación. Syst . 4 (4): 273-298. doi : 10.1145 / 6513.6514 . ISSN 0734-2071 .
- Solihin, Yan (9 de octubre de 2015). Fundamentos de la arquitectura multinúcleo paralela. Raleigh, Carolina del Norte: Solihin Publishing and Consulting, LLC. ISBN 978-1-4822-1118-4 .