Reducción de la penalización por fallo Técnica: Dar prioridad a los fallos de lectura sobre la escritura (I) Dar prioridad a los fallos de lectura sobre la escritura: En la caches WT el buffer de post-escritura mejora el rendimiento pero también complica los accesos a memoria cuando el bloque buscado se encuentra en el buffer (aún no ha sido escrito en memoria) y se produce un fallo en lectura de dicho bloque. Qué hacer? Ejemplo: Una cache de correspondencia directa WT con buffer de post-escritura (conflicto entre las posiciones 512 y 1024) El contenido de R2 y R3 es igual? M[512] R3 -- escritura en buffer R1 M[1024] -- fallo en lectura R2 M[512] -- fallo en lectura (aún no se ha copiado el bloque) -- El fallo en lectura debe esperar a que finalice la escritura Arquitectura de Sistemas Paralelos (50) Reducción de la penalización por fallo Técnica: Dar prioridad a los fallos de lectura sobre la escritura (II) Solución: Para evitar que los fallos en lectura esperen siempre a que el buffer se vacíe (en un buffer de cuatro palabras supone un incremento de la penalización de un 50%) se puede comprobar el contenido del buffer y si no hay conflicto permitir que el fallo en lectura continúe Esta técnica también permite reducir la penalización por fallo en caso de caches CB (escritura del bloque sucio) Arquitectura de Sistemas Paralelos (51) 1
Reducción de la penalización por fallo Técnica: Uso de Sub-bloques Uso de sub-bloques: Cuando las etiquetas son demasiado grandes (ocupan mucho y su comparación es costosa) pueden reducirse haciendo bloques más grandes pero eso aumenta la penalización por fallo (tiempo de transferencia) Para evitarlo pueden dividirse los bloques en sub-bloques y utilizar en vez de un bit de válido tantos como sub-bloques tengamos. Las transferencias son a nivel de sub-bloques Caché de correspondencia directa - Cache por bloques: 16 etiquetas 16 bits de válido - Caches con sub-bloques: 4 etiquetas 16 bits de válido Arquitectura de Sistemas Paralelos (52) Reducción de la penalización por fallo Técnica: Re-arranque rápido y primera palabra crítica Re-arranque rápido y primera palabra crítica: Estas técnicas se basan en el hecho de que en un momento dado la CPU sólo necesita una palabra del bloque para continuar la ejecución Re-arranque rápido (Early restart): Consiste en no esperar a leer todo el bloque sino que en cuanto se haya transferido la palabra solicitada enviarla a la CPU y luego continuar trayendo el bloque Primera palabra crítica (Critical word first): Consiste en solicitar a la memoria sólo la palabra que falló y enviarla tan pronto como llegue a la CPU. Mientras ésta continua con la ejecución, se rellena el resto de palabras del bloque Arquitectura de Sistemas Paralelos (53) 2
Reducción de la penalización por fallo Técnica: Caches no bloqueantes Caches no bloqueantes: Esta técnica se utiliza en máquinas con pipeline ( se verán en el tema de Introducción al Paralelismo). Por ejemplo, es posible continuar la búsqueda de una instrucción en la cache de instrucciones mientras se espera que se traiga un bloque fallido en la cache de datos Arquitectura de Sistemas Paralelos (54) Reducción de la penalización por fallo Técnica: Caches de segundo nivel (I) Caches de segundo nivel: Añadiendo un nivel más en la jerarquía de memoria (L1 y L2) Rendimiento (tiempo medio de acceso a memoria, tmam) tmam=t_acierto L1 +f_fallo L1 *(t_acierto L2 +f_fallo L2 *p_fallo L2 ) Frecuencia de fallos local: número de fallos en la cache dividido por el número total de accesos a esa cache (en L2 es f_ fallo L2 ) Frecuencia de fallos global: número de fallos en la cache dividido por el número total de accesos a memoria generados por la CPU (en L2 es f_fallo L1 *f_fallo L2 ) Ejemplo: 1000 referencias a memoria, 40 fallos en la cache L1 y 20 en la cache L2 Frecuencia de fallos en L1 (tanto local como global) = 40/1000 =4% Frecuencia de fallos local para L2 = 20/40 =50% Frecuencia de fallos global para L2= 20/1000=2% (4%*50%) Arquitectura de Sistemas Paralelos (55) 3
Reducción de la penalización por fallo Técnica: Caches de segundo nivel (II) Frecuencia de fallo vs. Tamaño de cache (escalas lineal y logarítmica) Cache de un único nivel: single cache miss rate Cache de dos niveles: (primer nivel: 32Kb) local miss rate global miss rate Arquitectura de Sistemas Paralelos (56) Reducción de la penalización por fallo Técnica: Caches de segundo nivel (III) Ejemplo Cuál es el impacto de la asociatividad de la cache de segundo nivel sobre la penalización? Datos: Un grado de asociatividad 2 incrementa el tiempo de acierto en un 1% Tiempo de acierto de L2 para cache de mapeado directo = 10 ciclos Frecuencia de fallos local de L2 para cache de mapeado directo = 25% Frecuencia de fallos local de L2 para cache asociativa de 2 vías = 20% Penalización por fallo de L2 = 50 ciclos Solución P_fallo 1-vía-L1 =10+25%*50=22,5 ciclos P_fallo 2-vías-L1 =10.1+20%*50=20.1 ciclos El segundo nivel de cache debe estar sincronizado con el primero (t_acierto=10 o 11 ciclos) Arquitectura de Sistemas Paralelos (57) 4
Reducción del tiempo acierto Técnica: caches pequeñas y simples Caches pequeñas y simples: Buena parte del tiempo de acierto se dedica a leer y comparar las etiquetas Las caches pequeñas (on-chip) permiten tiempos de acierto reducidos pero poca capacidad. Una posible solución: etiquetas onchip y datos off-chip En las caches de correspondencia directa (simples) la comprobación de la etiqueta y el acceso al dato se hace a la vez En el primer nivel de cache se utilizan caches pequeñas y simples Arquitectura de Sistemas Paralelos (58) Reducción del tiempo acierto Técnica: Evitar la traducción de direcciones Evitar la traducción de direcciones durante la indexación de la cache: Consiste en almacenar direcciones virtuales ( se verá en el apartado de Memoria Virtual) en la cache, evitando así la traducción de direcciones virtuales a físicas en caso de acierto (Caches virtuales vs. Caches físicas) Arquitectura de Sistemas Paralelos (59) 5
Reducción del tiempo acierto Técnica: Escrituras en pipeline para aciertos en escritura rápidos Escrituras en pipeline para aciertos en escritura rápidos: Consiste en crear un pipeline ( se verán en el tema de Introducción al Paralelismo) para las operaciones de escritura, de manera que la escritura actual se hace solapada en el tiempo con la comparación de etiquetas de la escritura siguiente. Las operaciones de lectura no son parte de este pipeline pues la comparación de etiquetas y la lectura del bloque se hacen siempre en paralelo Arquitectura de Sistemas Paralelos (60) Objetivos Los objetivos de la memoria virtual son: Permitir a los programas usar más memoria de la disponible físicamente. Se gestiona automáticamente los dos niveles de la jerarquía de memoria representada por la memoria principal y la secundaria, liberando al programador de esta tarea (origen histórico)... se ha inventado un sistema para hacer que la combinación de tambores de núcleos magnéticos parezca al programador como un simple nivel de almacenamiento, realizando automáticamente las transferencias precisas Kilburn y cols. [1962] Compartir una misma memoria física entre diferentes procesos con su propio espacio de direcciones (sistemas multitarea). Sería muy costoso dedicar una memoria de tamaño igual al espacio total de direcciones a cada proceso. Se requiere un esquema de protección Arquitectura de Sistemas Paralelos (61) 6
Definiciones (I) Página/Marco (page) o segmento (segment): en los términos definidos para la jerarquía de memoria es un bloque Fallo de página (page fault) o de dirección (address fault): en los términos definidos para la jerarquía de memoria es un fallo Direcciones virtuales: son las direcciones que genera la CPU Direcciones físicas: son las direcciones que atacan a la memoria principal Correspondencia de memoria (memory mapping) o traducción de direcciones (address translation): el proceso (software/hardware) para traducir las direcciones virtuales a direcciones físicas Niveles de la jerarquía controlados por la memoria virtual: Memoria RAM y disco duro Arquitectura de Sistemas Paralelos (62) Definiciones (II) Direcciones virtuales 0 4K 8K 12K Traducción de direcciones A B C C D A B 24K 28K Memoria principal Direcciones físicas 0 4K 8K 12K 16K 20K Página Fallo de página Arquitectura de Sistemas Paralelos (63) D Disco 7
Diferencias entre cache y memoria virtual (I) El reemplazo en los fallos de cache está controlado principalmente por hardware, mientras que el reemplazo en memoria virtual está controlado principalmente por el sistema operativo El tamaño de la dirección del procesador determina el tamaño de la memoria virtual, pero el tamaño de la cache es normalmente independiente de la dirección del procesador Además de actuar como memoria de más bajo nivel para la memoria principal en la jerarquía, la memoria secundaria se utiliza para el sistema de ficheros que normalmente no es parte del espacio de direcciones Arquitectura de Sistemas Paralelos (64) Diferencias entre cache y memoria virtual (II) Parámetro Primer nivel de cache Tamaño de bloque Tiempo de acierto Penalización por fallo: Tiempo de acceso Tiempo de transferencia Frecuencia de fallo Tamaño de la memoria 16-128 bytes 1-2 ciclos de reloj 8-100 ciclos de reloj 2-60 ciclos de reloj 2-40 ciclos de reloj 0.5-10% 0,0016-1Mb 4096-65536 40-100 ciclos de reloj 700000-6000000 ciclos de reloj 500000-4000000 ciclos de reloj 200000-2000000 ciclos de reloj 0.00001-0.001% 16-8192Mb Arquitectura de Sistemas Paralelos (65) 8
Paginación vs. Segmentación (I) En los sistemas de memoria virtual los bloques pueden ser: de tamaño fijo: página (ligado al hardware) de tamaño variable: segmento (ligado al proceso) Cuando el bloque es de tamaño fijo se habla de paginación y cuando es variable de segmentación Lo más habitual es utilizar la paginación pues es más sencilla de implementar (direccionamiento, política de reemplazo, etc.) Hay soluciones híbridas: segmentación paginada en la que un segmento es un número entero de páginas (la política de reemplazo es más sencilla, pues no se necesita que la memoria sea contigua ni que los segmentos completos estén en memoria principal) Arquitectura de Sistemas Paralelos (66) Paginación vs. Segmentación (II) Arquitectura de Sistemas Paralelos (67) 9
Paginación vs. Segmentación (III) Fragmentación Fragmentación externa (Segmentación) Proceso1 Proceso1 Proceso2 Fragmentación interna (Paginación) Página Fragmentación interna Proceso1 Proceso2 Proceso3 Proceso1 Proceso3 Arquitectura de Sistemas Paralelos (68)... Marco1 Marco2... Proceso1 Proceso4 Proceso3 Fragmentación externa Solución: Compresión (muy costosa) Tiempo Influencia del tamaño de página a) Pagina grande: Mayor eficiencia en la transferencia b) Página pequeña: Menor fragmentación y menor tiempo de arranque 10