Documento de Universidad Europea sobre la coherencia de cachés en la arquitectura de computadores. El Pdf, óptimo para estudiantes universitarios de Informática, aborda la migración y replicación de datos, así como protocolos de snooping y basados en directorios, con ejemplos y tablas.
Ver más18 páginas


Visualiza gratis el PDF completo
Regístrate para acceder al documento completo y transformarlo con la IA.
ue Universidad Europea
@ Copyright Universidad Europea. Todos los derechos reservados. 2
Los objetivos que se pretenden alcanzar en este recurso son los siguientes:
501 CD L CD38 IC RSS CO
En este recurso veremos cómo solucionar el problema de la coherencia de caché cuando hay múltiples procesadores, tanto en sistemas mono procesador con varios núcleos de procesamiento, como en sistemas con varios procesadores distribuidos. Analizaremos cuáles son los problemas de la jerarquía de caché en sistemas multiprocesadores y cuáles son los métodos para evitar errores de caché, que se clasifican en:
ue Universidad Europea
@ Copyright Universidad Europea. Todos los derechos reservados. 3
Ya hemos visto que la caché contiene una copia de algunos datos contenidos en la memoria. Nunca datos propios. Un acierto de caché se considera cuando el procesador intenta acceder a un dato, dato que siempre está en memoria, pero que a veces este dato está replicado en memoria caché.
Y aquí es donde está la ventaja de la caché, si este dato se encuentra en caché, es la caché la que responde al procesador simulando que ya se ha producido el acceso al dato en memoria, con una gran ventaja, el tiempo de espera que el procesador ha tenido que emplear para recibir el dato solicitado es muy inferior al tiempo que emplearía si el dato no se encontrara en caché.
Si los accesos son de tipo lectura, todo es perfecto, pero, ¿qué pasa cuando un acceso a un dato es de tipo escritura y la caché tiene una réplica del mismo? El acceso otra vez más se para en la caché, por lo que la memoria nunca se entera de que ha habido una modificación del dato. Consecuencia, el dato almacenado en caché y el dato almacenado en memoria no son los mismos. Esto se conoce como incoherencia de caché.
La incoherencia de caché tiene dos posibles soluciones en función de la política de escritura que empleemos:
Ambos métodos funcionan bien, pero, como siempre, no son perfectos.
ue Universidad Europea
@ Copyright Universidad Europea. Todos los derechos reservados. 4
La escritura inmediata es segura, pero poco eficiente, la escritura retardada, por el contrario, penaliza más los fallos de caché.
Todos los accesos a memoria en escritura provocan fallo de caché, lo que reduce a la mitad el índice de aciertos por parte de la caché. Hay técnicas que mejoran este problema, dejando la responsabilidad a la cache de actualizar el dato en memoria y que el procesador continue con la ejecución de código antes de que la memoria se actualice por completo. El inconveniente es que carga de trabajo a la caché, haciéndola sustancialmente más lenta.
Si hay un fallo de caché y hay que reemplazar un bloque de datos de la misma cuando el bloque tiene activada la señal de bloque modificado, antes de proceder al reemplazo, hay que escribir el bloque en memoria y después proceder a la carga del nuevo bloque. Esto añade retrasos en la caché, cada vez que hay que reemplazar un bloque que esta modificado. Al igual que en el caso anterior, hay técnicas que mejoran este comportamiento. Una de ellas es hacer que la caché, en sus momentos ociosos y de manera autónoma, revise qué bloques se han modificado y vaya actualizando la memoria, para que si hay reemplazo sobre ellos, ya se haya realizado la mitad del trabajo.
En la actualidad, la mayoría de las computadoras que se comercializan incluyen un sistema multiprocesador o multinúcleo. A la hora de diseñar estos sistemas hay que pensar cómo se organiza la jerarquía de memoria. Es especialmente crítico el uso de las memorias cachés y el establecimiento de las políticas de ubicación y escritura más óptimas.
Diferenciemos multiprocesadores y multinúcleos:
ue Universidad Europea
@ Copyright Universidad Europea. Todos los derechos reservados. 5
En ambas maquinas, la jerarquía de memoria es muy diferente, pero ambas tienen un problema, aunque sea a niveles diferentes.
Además, está replicada en cada una de las memorias locales ya que el acceso a los datos debe ser lo más rápido posible, consiguiendo reducir latencia (tiempo de lectura) en los accesos.
Supongamos una máquina con dos procesadores. Cada procesador tiene una memoria caché local y una memoria compartida a los dos procesadores para el intercambio de información. Supongamos que ambos procesadores acceden al dato compartido "i" donde guardan información de sincronización sobre la tarea que están ejecutando conjuntamente. Supongamos la secuencia de accesos a la variable "i" tal como sigue:
Tabla 1. Secuencia de accesos a la variable "i".
Paso Procesador Acción Memoria compartida Memoria caché procesador 1 Memoria caché procesador 2 Valor inicial 5 ¿? ¿? 1º P.1 Lee i 5 5 ¿? 2° P.2 Lee i 5 5 5 3º P.1 Incrementa i en 3 8 8 5 4º p.2 Incrementa i en 1 6 8 6
Interpretación: cuando los procesadores en los pasos 1 y 2 leen la variable compartida, todo va bien. En el paso 3, el procesador 1 accede a la variable en escritura, guardando un 8 (5+3), por lo que su copia local almacena un 8 y pospone la actualización de la copia en memoria compartida para futuros accesos. Pero la copia local del procesador 2 no se actualiza. De aquí el problema, cuando esta guarda un 6 en la misma variable después de calcular (5+1), en su copia local queda una 6, en memoria compartida otra
ue Universidad Europea
@ Copyright Universidad Europea. Todos los derechos reservados. 6
6. Pero, ¿quién tiene el valor correcto de la variable "i"? Nadie. El valor correcto debería ser 9 (5+3+1), valor que no está almacenado en ninguna de las memorias. Este problema ocurre siempre que haya una memoria más rápida enmascarando a una memoria mayor y compartida, pero lenta, y haya datos compartidos entre todos los procesos. Si analizamos la idea que acabamos de ver, significa que cuando hay una memoria caché local y hay datos compartidos, los datos entre ellas pueden no ser coherentes. Por eso se le llama incoherencia de caché. Y esta incoherencia de caché sí es complicada de solucionar (pero no imposible) y solo se da en sistemas multiprocesador o multinúcleo.
Hoy en día el problema de la incoherencia de caché está prácticamente a todos los niveles, ya que son muy pocos lo procesadores que se comercializan que no son multinúcleos. Además, seguro que hemos escuchado hablar de que nuestro sistema tiene cache L1, L2 e incluso L3.
S
Ya hemos hablado de que cada nivel de caché es una caché de la caché anterior. Por lo tanto, estas cachés las podemos incluir como etapas en nuestra jerarquía de memoria o podemos hablar de que la caché está a su vez jerarquizada dentro de la jerarquía de memoria. Es ambos casos, la idea es la misma.
El problema es como se organiza esta cache en los procesadores actuales. Tomemos como ejemplo dos procesadores actuales:
Esto es lo que pone Intel (Intel, 2016) en la hoja de características de uno de los microprocesadores Intel Core i7 (Legit Reviews, 2016) con respecto a su caché:
Resumiendo: caché L1 dedicada a cada núcleo, además dividida en datos e instrucciones. La L2, caché clásica, una caché local para cada procesador. Y, por último, la caché L3, compartida para los todos los núcleos.
ue Universidad Europea
@ Copyright Universidad Europea. Todos los derechos reservados. 7