stringtranslate.com

protocolo MOESI

(Para obtener una descripción detallada, consulte Protocolos de coherencia de caché (ejemplos) )

En informática, MOESI ("Modified Owned Exclusive Shared Invalid") es un protocolo de coherencia de caché completo que abarca todos los estados posibles comúnmente utilizados en otros protocolos. Además de los cuatro estados comunes del protocolo MESI , existe un quinto estado "Propiedad" que representa datos modificados y compartidos. Esto evita la necesidad de escribir datos modificados en la memoria principal antes de compartirlos. Si bien los datos aún deben reescribirse eventualmente, la reescritura puede diferirse.

Para que esto sea posible, deben ser posibles las transferencias directas de datos de caché a caché, de modo que una caché con los datos en el estado modificado pueda suministrar esos datos a otro lector sin transferirlos a la memoria.

Como se analiza en el Manual del programador de arquitectura AMD64 vol. 2 ' Programación del sistema ' , [1] cada línea de caché se encuentra en uno de cinco estados:

Modificado
Este caché tiene la única copia válida de la línea de caché y ha realizado cambios en esa copia. La copia almacenada en caché se puede modificar libremente.
Propiedad
Esta línea es una de varias copias en el sistema. Este caché no tiene permiso para modificar la copia, pero la línea se modifica (sucia) en relación con la memoria principal, y este caché tiene la responsabilidad exclusiva de garantizar que la memoria principal se actualice eventualmente. La línea de caché se puede cambiar al estado Modificado después de invalidar todas las copias compartidas, o cambiar al estado Compartido escribiendo las modificaciones nuevamente en la memoria principal. Las líneas de caché de propiedad deben responder a una solicitud de snoop con datos para garantizar que no se utilice la copia obsoleta en la memoria principal.
Exclusivo
Este caché tiene la única copia de la línea, pero la línea está limpia (sin modificar). Se puede escribir en él, cambiando al estado Modificado.
Compartido
Esta línea es una de varias copias en el sistema. Este caché no tiene permiso para modificar la copia. A diferencia del protocolo MESI, una línea de caché compartida puede estar sucia con respecto a la memoria; si es así, un caché tiene una copia en estado Propiedad y ese caché es responsable de actualizar eventualmente la memoria principal. Si ningún caché mantiene la línea en el estado Propiedad, la copia de la memoria está actualizada. Es posible que la línea de caché no se escriba, pero primero se debe cambiar al estado Exclusivo o Modificado, invalidando todas las demás copias almacenadas en caché. (Si la línea de caché era de propiedad antes, la respuesta de invalidación lo indicará y el estado pasará a ser Modificado, por lo que no se olvida la obligación de volver a escribir los datos en la memoria). También se puede descartar (cambiar al estado no válido). ) en cualquier momento.
Inválido
Este bloque no es válido; debe recuperarse para satisfacer cualquier intento de acceso.

Para cualquier par de cachés determinado, los estados permitidos de una línea de caché determinada son los siguientes:

(El orden en que normalmente se enumeran los estados sirve sólo para que el acrónimo "MOESI" sea pronunciable).

Este protocolo, una versión más elaborada del protocolo MESI más simple , evita la necesidad de escribir una línea de caché sucia en la memoria principal cuando otro procesador intenta leerla. En cambio, el estado Propiedad permite que un procesador suministre los datos modificados directamente al otro procesador. Esto resulta beneficioso cuando la comunicación entre dos CPU es significativamente mejor que con la memoria principal. Un ejemplo serían las CPU multinúcleo con cachés L2 por núcleo.

Si bien MOESI puede compartir rápidamente líneas de caché sucias del caché, puede tener dificultades para compartir rápidamente líneas limpias del caché. Si una línea de caché está limpia con respecto a la memoria y en el estado compartido, entonces no hay un caché candidato único obvio para responder a una solicitud de lectura, por lo que es normal dejar que la solicitud de lectura se complete desde la memoria. (Esto se resuelve mediante el protocolo MESIF , que se puede combinar con MOESI para crear MOESIF).

Si un procesador desea escribir en una línea de caché de propiedad, debe notificar a los demás procesadores que comparten esa línea de caché. La implementación estándar simplemente les dice que invaliden sus copias, moviendo su propia copia al estado Modificado cuando esto esté completo, pero alternativamente puede usar una política de escritura directa , diciéndoles que actualicen sus copias con el nuevo contenido. Se trata de una escritura parcial que no llega hasta la memoria principal; la copia del procesador permanece en el estado Propiedad.

Esto último reduce el tráfico de caché si hay múltiples lectores activos de, por ejemplo, un bloqueo muy disputado ; una escritura transmitida es menos comunicativa que respuestas separadas a una multitud atronadora de solicitudes de lectura. Debido a que estas dos variantes son totalmente compatibles, ambas pueden usarse en el mismo sistema basándose en heurísticas como la estimación del caché del número de lectores activos de esta línea de caché.

Ver también

Referencias

  1. ^ "Manual del programador de arquitectura AMD64 Vol 2 'Programación del sistema'" (PDF) . págs. 169-172. Archivado desde el original (PDF) el 19 de junio de 2017 . Consultado el 28 de agosto de 2015 .