Download Gestión de memoria - Departamento de Arquitectura y Tecnología

Document related concepts
no text concepts found
Transcript
Gestión de memoria
Arquitectura de Sistemas Paralelos (1)
Gestión de memoria
Índice y bibliografía
• Índice
– Jerarquía de memoria
– Memorias cache
• Organización física
• Organización lógica
• Optimización
– Memoria virtual
• Bibliografía
– Arquitectura de computadores: Un enfoque cuantitativo, John L.
Hennessy y David A. Patterson
– Organización y arquitectura de computadores, W. Stalling.
Arquitectura de Sistemas Paralelos (2)
Jerarquía de memoria
Introducción
• Necesidad de grandes cantidades de memoria rápida
• Diferentes tipos de memorias según los criterios de tamaño,
velocidad y coste (tecnología)
• Principio de localidad: los programas favorecen una parte de su
espacio de direcciones
Idealmente sería deseable una capacidad indefinidamente grande de memoria
tal que cualquier particular…palabra estuviese inmediatamente disponible…
Estamos… forzados a reconocer la posibilidad de construir una jerarquía de
memorias, cada una de las cuales tenga mayor capacidad que la precedente
pero que sea menos rápidamente accesible
A.W. Burks, H.H. Goldstine y J. von Neumann,
Discusión preliminar del diseño lógico de un instrumento de cálculo electrónico (1946)
Arquitectura de Sistemas Paralelos (3)
Jerarquía de memoria
Principio de localidad
• Localidad temporal
– Si se referencia un elemento, éste tenderá a ser
referenciado pronto (p.e. bucles)
• Localidad espacial
– Si se referencia un elemento, los elementos
cercanos a él tenderán a ser referenciado
pronto (p.e. tablas)
Arquitectura de Sistemas Paralelos (4)
Jerarquía de memoria
Definición
• Una jerarquía de memoria es una reacción natural a la
localidad y tecnología
• Una jerarquía en memoria está organizada en varios
niveles, cada uno más pequeño, más rápido y más
caro por byte que el siguiente
• Los niveles de la jerarquía están contenidos en el
siguiente: todos los datos de un nivel se encuentran
también en el nivel siguiente y así sucesivamente
hasta que alcancemos el extremo inferior de la
jerarquía
Arquitectura de Sistemas Paralelos (5)
Jerarquía de memoria
Conceptos básicos
•
•
•
•
•
•
Nivel (level)
Bloque o línea (block or line): mínima unidad de
información que puede estar presente o no en la
jerarquía de dos niveles (tamaño fijo o variable)
Acierto/Fallo (hit/miss)
Frecuencia de aciertos/fallos (hit rate/miss rate)
Tiempo de acierto (hit time)
Penalización por fallo (miss penalty)
– Tiempo de acceso (access time): tiempo para
acceder a la primera palabra de un bloque en un
fallo
– Tiempo de transferencia (transfer time):
tiempo adicional para transferir las restantes
palabras del bloque
Arquitectura de Sistemas Paralelos (6)
Nivel superior
Bloques
Nivel inferior
Jerarquía de memoria
Ejemplo
Coste/bit (+)
Capacidad (-)
Velocidad (+)
Frecuencia
de accesos (+)
Registros
procesador
Cache
Memoria principal
Cache de disco
Disco magnético
CD-DVD
Arquitectura de Sistemas Paralelos (7)
Jerarquía de memoria
Evaluación del rendimiento
• Tiempo medio de acceso a memoria
Tiempo de acceso medio a memoria = Tiempo de acierto +
+ Frecuencia de fallos*Penalización por fallo
• Influencia de parámetros
– El tamaño de bloque influye sobre:
• Penalización por fallo
→ Tiempo de acceso medio a memoria
• Frecuencia de fallos
Arquitectura de Sistemas Paralelos (8)
Evaluación del rendimiento
Relación entre parámetros
Tiempo medio
de acceso
Tamaño del bloque
Penalización
por fallo
Tiempo de
transferencia
Frecuencia
por fallo
Tiempo de acceso
Tamaño del bloque
Tamaño del bloque
Arquitectura de Sistemas Paralelos (9)
Jerarquía de memoria
Criterios para clasificar los niveles
• Ubicación de bloque
¿Dónde puede ubicarse un bloque en el nivel superior?
• Identificación de bloque
¿Cómo se encuentra un bloque si está en el nivel
superior?
• Sustitución de bloque
¿Qué bloque debe reemplazarse en caso de fallo?
• Estrategia de escritura
¿Qué ocurre en una escritura?
Arquitectura de Sistemas Paralelos (10)
Memorias cache
Introducción
• Representa el nivel de jerarquía de memoria entre la CPU y la
memoria principal
• Se le pueden aplicar todos los conceptos vistos para la jerarquía
de memoria (principio de localidad, terminología, etc.)
• Algunos datos (década del 90)
Arquitectura de Sistemas Paralelos (11)
Memorias cache
Arquitecturas
• Organización física
• Según su ubicación dentro o fuera del chip
procesador: internas o externas
• Según su ubicación con respecto al resto de
dispositivos (configuración)
• Organización lógica
• Según su estructura interna y funcionamiento:
ubicación, identificación, sustitución y escritura
• Según el tipo de información que contienen:
unificadas o separadas
Arquitectura de Sistemas Paralelos (12)
Arquitecturas de memorias cache
Organización física
• Según su ubicación
– Caches externas: No se encuentran en el interior del chip
del procesador (cache-off-chip)
– Caches internas: Se encuentran en el propio chip del
proceador (cache-on-chip)
• Según la configuración
– Configuración en serie (Look-Through Architecutre)
– Configuración en paralelo (Look-Aside Architecture)
Arquitectura de Sistemas Paralelos (13)
Organización física según la configuración
Configuración en serie
CPU
Bus local
Cache
DMA
I/O
Memoria
Bus
– Ventajas: Si el dato se encuentra en la cache no hay acceso
a memoria y no se ocupa el bus
– Inconvenientes: La cache debe tener 2 interfaces de buses
diferentes y el tiempo de acceso es mayor (igual al tiempo de
acceso a cache más el tiempo de acceso a memoria principal)
Arquitectura de Sistemas Paralelos (14)
Organización física según la configuración
Configuración en paralelo
Cache
DMA
I/O
Memoria
Bus
CPU
– Ventajas: Sólo hay una interfaz con el bus y el tiempo de acceso
es menor (igual al tiempo de acceso a memoria principal)
– Inconvenientes: El bus se ocupa en cualquier acceso a memoria,
evitando que otros dispositivos puedan acceder a él
Arquitectura de Sistemas Paralelos (15)
Organización física
Ejemplo: Pentium II
Arquitectura de Sistemas Paralelos (16)
Organización lógica
Ubicación de bloque
• ¿Dónde puede ubicarse un bloque en una cache?
– Caches de mapeado o correspondencia directa: si cada bloque
sólo tiene un lugar donde puede aparecer en la cache
(dirección del bloque) MOD (número de bloques en cache)
– Caches totalmente o completamente asociativas: si cada bloque
se puede colocar en cualquier parte de la cache
– Caches asociativas por conjuntos (asociativas por conjuntos de
n vías): si cada bloque se puede colocar en un subconjunto
restringido de lugares de la cache (conjunto). Un conjunto es un
grupo de dos o más bloques de la cache
(dirección del bloque) MOD (número de conjuntos en cache)
Arquitectura de Sistemas Paralelos (17)
Ubicación de bloque
Memoria: 32 bloques
Caches: 8 bloques
Tres tipos:
- Completamente
asociativas
- De correspondencia
directa
- Asociativa por
conjuntos de 2 vías
Arquitectura de Sistemas Paralelos (18)
Organización lógica
Identificación de bloque
• ¿Cómo se encuentra un bloque si está en el nivel superior? La
dirección se descompone en varios campos:
– Etiqueta (tag): se utiliza para comparar la dirección requerida por la
CPU con aquellos bloques que pueden contener la información deseada
(búsqueda en paralelo de etiquetas)
– Índice (index): se usa para seleccionar el conjunto en el caso de las
asociativas por conjunto o el bloque en las de mapeado directo
(conjuntos de una vía). No existe para las completamente asociativas
– Desplazamiento de bloque (block offset): selecciona el dato deseado
dentro del bloque
• ¿Cómo se sabe que un bloque contiene información válida? Mediante
el bit de válido (valid bit)
• Al calcular el coste de las caches hay que incluir el coste debido al
almacenamiento de las etiquetas y el de los bits necesarios
Arquitectura de Sistemas Paralelos (19)
Identificación de bloque
Según el tipo de cache (I)
• En caches de mapeado directo:
Etiqueta
Índice
Desplazamiento
(Bloque)
• En caches asociativas por conjunto:
Etiqueta
Índice
Desplazamiento
(Conjunto)
• En caches completamente asociativas:
Etiqueta
Arquitectura de Sistemas Paralelos (20)
Desplazamiento
Identificación de bloque
Según el tipo de cache (II)
Memoria: 32 bloques
Caches: 8 bloques
Tres tipos:
- Completamente
asociativas
- De correspondencia
directa
- Asociativa por
conjuntos de 2 vías
Arquitectura de Sistemas Paralelos (21)
Identificación de bloque
Ejemplos
•
•
•
1
2
3
Procesador de 16 bits de datos y 24 de direcciones
Tamaño de la cache: 8Kb
Tamaño de la línea: 8 bytes
1. Cache completamente asociativa
2. Cache asociativa por conjuntos de 4 vías
3. Cache de mapeado directo
Etiqueta: 21bits
Desplazamiento: 3bits
Palabra: 2bits
Etiqueta: 13bits
Conjunto: 8bits
Desplazamiento: 3bits
Palabra: 2bits
Etiqueta: 11bits
Bloque: 10bits
Byte:1bit
Desplazamiento: 3bits
Palabra: 2bits
Arquitectura de Sistemas Paralelos (22)
Byte:1bit
Byte:1bit
Identificación de bloque
Implementación de caches de mapeado directo
Arquitectura de Sistemas Paralelos (23)
Identificación de bloque
Implementación de caches totalmente asociativas
Arquitectura de Sistemas Paralelos (24)
Identificación de bloque
Implementación de caches asociativas por conjuntos
Arquitectura de Sistemas Paralelos (25)
Identificación de bloque
Ejemplo: VAX-11/780
- Cache asociativa por
conjunto de 2 vías
- Capacidad de datos: 8Kb
- Tamaño de bloque: 8 bytes
- Número de conjuntos: 512
Pasos de un acierto:
1) División de la dirección
2) Acceso a ambos bancos
3) Comparación de etiquetas
4) Multiplexación
5) Envío a la CPU
Arquitectura de Sistemas Paralelos (26)
Organización lógica
Políticas de sustitución de bloque (I)
• ¿Qué bloque debe reemplazarse en caso de fallo? Se pueden
seguir diferentes estrategias:
– Aleatoria (Random): Se elige un bloque al azar
– FIFO (First Input First Out): Se sustituye el bloque que más tiempo
ha estado en la cache
– LRU (Least Recently Used): Se sustituye el bloque que más tiempo
ha estado en la cache sin ser referenciado
– LFU (Least Frecuently Used): Se sustituye el bloque que menos
referencias ha tenido
• Se tienen en cuenta criterios de coste y eficiencia
• Los esquemas más utilizados son el aleatorio y el LRU
Arquitectura de Sistemas Paralelos (27)
Organización lógica
Políticas de sustitución de bloque (II)
Ejemplo de política LRU (cache de 4 bloques)
Dirección
Bloque LRU
0
3
2
1
0
0
2
3
1
3
0
0
0
0
3
3
3
1
0
0
2
Comparativa de frecuencias de fallos (VAX, 16bytes/bloque)
Arquitectura de Sistemas Paralelos (28)
Organización lógica
Políticas de escritura (I)
• ¿Qué ocurre en una escritura? Opciones a la hora de escribir en la cache:
– Escritura directa (Write through): La información se escribe en el bloque de
la cache y en el bloque de la memoria de nivel inferior
– Postescritura (Copy Back): La información se escribe sólo en el bloque de la
cache. El bloque modificado de la cache se escribe en la memoria de nivel
inferior sólo cuando es reemplazado
• Los bloques de las caches copy back se denominan sucios o modificados
cuando la información de la cache difiere de la memoria de nivel inferior
• Para reducir la frecuencia de postescrituras en el reemplazo se usa el bit de
modificación o sucio (dirty bit): si el bloque está limpio no se escribe en el
nivel inferior
• Cuando una cache es write through, la CPU debe esperar la finalización de
cada escritura antes de proceder con la siguiente operación. Para evitarlo
se utiliza un buffer de escritura que permite al procesador continuar
mientras se actualiza la memoria
Arquitectura de Sistemas Paralelos (29)
Organización lógica
Políticas de escritura (II)
• Ventajas de las caches copy back:
– En las caches copy back, las escrituras se realizan a la velocidad de la
memoria cache, y múltiples escrituras en un bloque requieren sólo una
escritura en la memoria de nivel inferior
– Como cada escritura no va a memoria, la postescritura utiliza menos
ancho de banda (multiprocesadores)
• Ventajas de las caches write through:
– En las caches write through, los fallos de lectura no ocasionan
escrituras en el nivel inferior
– Las caches write through son más fáciles de implementar
– La escritura directa tiene la ventaja también de que la memoria
principal tiene la copia más reciente de los datos (coherencia de cache,
multiprocesadores y E/S)
Arquitectura de Sistemas Paralelos (30)
Organización lógica
Políticas de escritura (III)
• ¿Qué ocurre en una escritura? Opciones cuando se produce un
fallo de escritura:
– Ubicar en escritura (Write allocation): El bloque se carga en la
cache y a continuación se escribe sobre él (similar a un fallo en
lectura)
– No ubicar en escritura (No write allocatation): El bloque se
modifica en el nivel inferior y no se carga en la cache
• Aunque cualquier política de fallo de escritura puede utilizarse con
la escritura directa o con la postescritura, las caches copy back
utilizan write allocation (CB-WA) y las write through usan no
write allocation (WT-NWA)
Arquitectura de Sistemas Paralelos (31)
Organización lógica
Caches unificadas vs. Caches separadas
•
•
Caches unificadas o mixtas (unified or mixed): Contienen tanto datos como
instrucciones
Caches separadas (separated): Existe una cache para datos y otra para
instrucciones
Ventajas
– No hay competencia entre el procesador de instrucciones y la unidad de
ejecución
– Duplicación del ancho de bus (puertos separados)
– Parámetros de diseño (capacidad, tamaños de bloque, asociatividad, etc.)
diferentes para instrucciones y datos (optimización)
Inconvenientes
– En general la tasa de fallos global es algo mayor (próxima transparencia):
• la caches de instrucciones tienen menor frecuencia de fallos que las de datos (localidad)
• la separación de instrucciones y datos elimina fallos debidos a conflictos pero al dividir
también se fija el espacio de cache dedicado a cada tipo
– No se equilibra la carga de trabajo de forma automática
Arquitectura de Sistemas Paralelos (32)
Caches unificadas vs. Caches separadas
Comparativa (I)
Comparativa de frecuencias de fallos (VAX, 16 bytes/bloque, LRU, 2 vías)
Ejemplo: Frecuencia de fallos (53% de referencias son instrucciones)
– En cache unificada de 32Kb: 4.3%
– En caches separadas de 16Kb: 53%*3.6%+47%*5.3%=4.4%
Arquitectura de Sistemas Paralelos (33)
Caches unificadas vs. Caches separadas
Comparativa (II)
•
Ejemplo: (75% de accesos a instrucción)
a)
b)
Cache unificada de 32Kb. Penalización: 50 ciclos, Tiempo de
acierto para instrucción: 1 ciclo, para datos: 2 ciclos (un solo
puerto)
Caches separadas de 16Kb. Penalización: 50 ciclos, Tiempo de
acierto: 1 ciclo
Solución:
a)
b)
Tacceso medio =75%*(1+4.3%*50)+25%*(2+4.3*50)= 3.4 ciclos
Tacceso medio=75%*(1+3.6%*50)+25%*(1+5.3%*50)= 2.6 ciclos
Arquitectura de Sistemas Paralelos (34)
Optimización
Cómo mejorar el rendimiento de las caches
• El objetivo es reducir el tiempo medio de acceso a memoria:
Tiempo de acceso medio a memoria = Tiempo de acierto +
+ Frecuencia de fallos*Penalización por fallo
• Existen tres formas de reducir el tiempo medio de acceso a
memoria:
– Reducir los fallos de la cache (miss rate)
– Reducir las penalizaciones por fallo (miss penalty)
– Reducir el tiempo de acceso en caso de acierto (hit time)
Arquitectura de Sistemas Paralelos (35)
Optimización
Reducción de fallos en las caches
• Existen tres tipos de fallos en una memoria cache:
– Forzosos (Compulsory): En el primer acceso a un bloque éste no
se encuentra en la cache (fallos de arranque en frío o de primera
referencia)
– Capacidad (Capacity): La cache no puede contener todos los
bloques necesarios durante la ejecución de un programa
– Conflicto (Conflict): Diferentes bloques deben ir necesariamente
al mismo conjunto o línea cuando la estrategia es asociativa por
conjuntos o de correspondencia directa (fallos de colisión)
Arquitectura de Sistemas Paralelos (36)
Reducción de fallos en las caches
Tipos de fallos (I)
Arquitectura de Sistemas Paralelos (37)
Reducción de fallos en las caches
Tipos de fallos (II)
Arquitectura de Sistemas Paralelos (38)
Reducción de fallos de la cache
Técnica: Incremento del tamaño de bloque (I)
• Incrementar el tamaño de bloque
– Ventajas: Se reducen los fallos forzosos como sugiere
el principio de localidad espacial
– Inconvenientes: Aumentan los fallos por conflicto al
reducirse el número de bloques de la cache y los fallos
de capacidad si la cache es pequeña. La penalización
por fallo aumenta al incrementarse el tiempo de
transferencia del bloque
Penalización
por fallo
Tiempo de
transferencia
Tiempo de acceso
Frecuencia
por fallo
Tamaño del bloque
Tamaño del bloque
Arquitectura de Sistemas Paralelos (39)
Reducción de fallos de la cache
Técnica: Incremento del tamaño de bloque (II)
Arquitectura de Sistemas Paralelos (40)
Reducción de fallos de la cache
Técnica: Incremento del tamaño de bloque (III)
Ejemplo:
Tiempo de búsqueda = 40CLK
Tasa de transferencia= 8bytes/CLK
Tiempo de acierto= 1CLK
a) Cache de 1Kb con línea de 16bytes
b) Cache de 256Kb con línea de 256bytes
Solución:
a) Tiempo de acceso medio a memoria = 1+15.05%*(40+2)=7.321 ciclos
b) Tiempo de acceso medio a memoria = 1+0.49%*(40+32)=1.353 ciclos
Arquitectura de Sistemas Paralelos (41)
Reducción de fallos de la cache
Técnica: Incremento de la asociatividad
• Aumentar la asociatividad
– Ventajas: Se reducen los fallos por conflicto
– Inconveniente: Aumenta el tiempo de acceso medio al
incrementarse el tiempo de acierto (multiplexión). También
aumenta el coste debidos a los comparadores
Cache de mapeado directo (1Kb):
tamm= 1+(0.133*50)=7.65 ciclos
Cache asociativa por conjuntos
de 8 vías (128Kb):
tamm= 1.14+(0.006*50)=1.44 ciclos
Tiempo medio de acceso a memoria (ciclos)
Arquitectura de Sistemas Paralelos (42)
Reducción de fallos de la cache
Técnica: Cache victima (I)
• Caches víctimas: Consiste en añadir una pequeña
cache totalmente asociativa (1-5 bloques) para
almacenar bloques descartados por fallos de
capacidad o conflicto. En caso de fallo, antes de
acceder a la memoria principal se accede a esta
cache. Si el bloque buscado se encuentra en ella se
intercambian los bloques de ambas caches
– Cache víctima de 4 bloques reduce del 20% al 95% los
fallos de conflicto en una cache de correspondencia
directa de 4Kb (Jouppi 1990)
Arquitectura de Sistemas Paralelos (43)
Reducción de fallos de la cache
Técnica: Cache victima (II)
Arquitectura de Sistemas Paralelos (44)
Reducción de fallos de la cache
Técnica: Cache pseudo-asociativa
• Caches pseudo-asociativas (o columna asociativa):
Consiste en utilizar toda la capacidad de la cache para
reubicar algunos bloques extra en bloques que en
principio no les pertenece
– Implementación: Cuando en una cache de correspondencia
directa se falla, antes de ir a buscar en la memoria principal
puede intentarse en otro bloque (el correspondiente al índice
pero con el bit más significativo invertido) del “pseudo
conjunto”
Tiempo de acierto
Tiempo de pseudo-acierto
Tiempo de fallo
Arquitectura de Sistemas Paralelos (45)
Reducción de fallos de la cache
Técnica: Pre-búsqueda hardware de instrucciones y datos
• Pre-búsqueda hardware de instrucciones y dato: Consiste
en que cuando se accede a memoria en caso de fallo no sólo
se trae el bloque solicitado sino también los consecutivos,
almacenándolos en un buffer. Si en el próximo acceso el
bloque se encuentra en el buffer, se cancela el acceso en
curso a la cache, se lee el bloque del buffer y comienza una
nueva solicitud de pre-búsqueda.
– En un sistema con caches de datos e instrucciones separadas de 64Kb
asociativas de 4 vías, un buffer de 8 bloques eliminan del 50% al 70%
de los fallos (Palacharna and Kessler 1994)
Arquitectura de Sistemas Paralelos (46)
Reducción de fallos de la cache
Técnica: Pre-búsqueda controlada por el compilador (I)
• Pre-búsqueda controlada por el compilador: Otra
alternativa consiste en que es el propio compilador el
que inserta instrucciones de pre-búsqueda, solicitando
datos cuando aún no son necesarios
– Pre-búsqueda en registro: El valor se almacena en un
registro
– Pre-búsqueda en cache: El valor se almacena en la
cache
Arquitectura de Sistemas Paralelos (47)
Reducción de fallos de la cache
Técnica: Pre-búsqueda controlada por el compilador (II)
for(i=0;i<3;i++)
for(j=0;j<100;j++)
a[i][j]=b[j][0]*b[j+1][0];
Fallos de cache = (3*100)/2 + 101 = 251
for(j=0;j<100;j++){
prefetch(b[j+7][0]);
prefetch(a[0][j+7]);
a[0][j]=b[j][0]*b[j+1][0];}
for(i=1;i<3;i++)
for(j=0;j<100;j++){
prefetch(a[i][j+7]);
a[i][j]=b[j][0]*b[j+1][0];
a[i][7] ... a[i][99] y b[7][0] ... b[99][0] pre-buscados
Fallos de cache = (3*7)/2 + 8 = 19
(se evitan 232 fallos con 400 instrucciones prefetch)
Arquitectura de Sistemas Paralelos (48)
Reducción de fallos de la cache
Técnica: Optimización del compilador
• Optimización del compilador: El compilador reordena el
código de manera que por la forma en como se hacen los
accesos se reducen los fallos de cache
– Detectando conflictos y reordenando las instrucciones se han
reducido los fallos un 50% en una cache de correspondencia
directa de 2Kb con bloques de 4 bytes y 75% en una de 8Kb
(McFarling 1989)
– Técnicas:
• Mejora de la localidad espacial: Mezcla de arrays e Intercambio
de bucles
• Mejora de la localidad temporal: Fusión de bucles y Bloqueado
Arquitectura de Sistemas Paralelos (49)
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)
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
Arquitectura de Sistemas Paralelos (52)
-
Cache por bloques:
16 etiquetas
16 bits de válido
-
Caches con sub-bloques:
4 etiquetas
16 bits de válido
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)
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_aciertoL1+f_falloL1*(t_aciertoL2+f_falloL2*p_falloL2)
– 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_ falloL2)
– 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_falloL1*f_falloL2)
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)
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 10%
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_fallo1-vía-L1=10+25%*50=22,5 ciclos
P_fallo2-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)
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)
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)
Memoria virtual
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)
Memoria virtual
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)
Memoria virtual
Definiciones (II)
Traducción de direcciones
Direcciones virtuales
Direcciones físicas
0
A
4K
B
8K
C
8K
12K
D
12K
0
C
A
Memoria virtual
4K
Página
16K
20K
B
24K
28K
Memoria principal
D
Fallo de página
Arquitectura de Sistemas Paralelos (63)
Disco
Memoria virtual
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á controlador 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)
Memoria virtual
Diferencias entre cache y memoria virtual (II)
Parámetro
Primer nivel de cache
Memoria virtual
Tamaño de bloque
16-128 bytes
4096-65536
Tiempo de acierto
1-2 ciclos de reloj
40-100 ciclos de reloj
Penalización por fallo:
Tiempo de acceso
Tiempo de transferencia
8-100 ciclos de reloj
2-60 ciclos de reloj
2-40 ciclos de reloj
700000-6000000 ciclos de reloj
500000-4000000 ciclos de reloj
200000-2000000 ciclos de reloj
Frecuencia de fallo
0.5-10%
0.00001-0.001%
Tamaño de la memoria
0,0016-1Mb
16-8192Mb
Arquitectura de Sistemas Paralelos (65)
Memoria virtual
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)
Memoria virtual
Paginación vs. Segmentación (II)
Arquitectura de Sistemas Paralelos (67)
Paginación vs. Segmentación (III)
Fragmentación
• Fragmentación externa (Segmentación)
Fragmentación externa
Proceso1
Proceso1
Proceso1
Proceso2
Proceso2
Proceso1
Proceso3
Proceso3
Proceso1
Proceso4
Solución: Compresión
(muy costosa)
Proceso3
Tiempo
• Fragmentación externa (Paginación)
...
Página
Marco1
Marco2
Fragmentación interna
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
...
Arquitectura de Sistemas Paralelos (68)
Memoria virtual
Ubicación de bloque en paginación
• ¿Dónde puede ubicarse un bloque en memoria principal?
– Los sistemas operativos permiten que los bloques se
coloquen en cualquier parte de la memoria principal
(totalmente asociativa)
– Al ser muy alta la penalización por fallo en la memoria
virtual, los diseñadores de S.O. optan por reducir la
frecuencia de fallos en vez de utilizar un algoritmo de
ubicación más sencillo
Arquitectura de Sistemas Paralelos (69)
Memoria virtual
Identificación de bloque en paginación
• ¿Cómo se encuentra un bloque si está en memoria principal?
– La dirección virtual se descompone en dos campos: número de
página virtual y desplazamiento de página
– La dirección física se obtiene concatenando simplemente la
dirección física de la página con el desplazamiento de página
– Se utiliza una estructura de datos (tabla de páginas) que contiene
la dirección física de la página y es indexada por la dirección
virtual
Arquitectura de Sistemas Paralelos (70)
Identificación de bloque en paginación
Correspondencia entre dirección virtual y física
Arquitectura de Sistemas Paralelos (71)
Memoria virtual
Sustitución de bloque en paginación
• ¿Qué bloque debería sustituirse en un fallo de memoria
virtual?
– Con objeto de minimizar los fallos de página, se intenta sustituir
la página que menos recientemente ha sido usada (LRU)
– Implementación de una política LRU: Muchas máquinas
proporcionan un bit de uso o bit de referencia para cada
página, que se pone a uno siempre que dicha página es
accedida. El S.O. borra periódicamente los bits de uso y más
tarde los registra para poder determinar qué páginas fueron
accedidas durante un periodo de tiempo determinado. De esta
manera, el S.O. puede seleccionar una página que se encuentre
entre la menos recientemente referenciadas
Arquitectura de Sistemas Paralelos (72)
Memoria virtual
Política de escritura en paginación
• ¿Qué ocurre en una escritura?
– La estrategia de escritura es siempre la post-escritura
(write back) debido a la gran diferencia que existe entre
los tiempos de acceso en uno y otro nivel
– Los sistemas de memoria virtual incluyen un bit de
modificado o sucio (dirty) para que sólo los bloques
que han sido alterados desde que se cargaron sean
escritos en la memoria secundaria
Arquitectura de Sistemas Paralelos (73)
Memoria virtual
Tabla de páginas (I)
•
•
•
•
•
•
Permite traducir direcciones virtuales a direcciones físicas
Está indexada por el número de página virtual y contiene la dirección física de
la página. Se requiere un bit de válido para indicar que la entrada contiene un
página física válida (se encuentra en memoria principal y no se produce fallo de
página)
El tamaño de la tabla de páginas es inversamente proporcional al tamaño de
página
Las tablas de páginas son habitualmente tan grandes que se almacenan en
memoria principal y, con frecuencia, paginadas ellas mismas: se requiere un
acceso a memoria para obtener la dirección física y otro para obtener el dato
Bits de control: válido, uso, sucio, permiso lectura y permiso escritura
Optimización: Jerarquía de tablas de página, técnicas hashing (tablas de páginas
invertidas) y Buffer de Traducción Anticipada (TLB)
Arquitectura de Sistemas Paralelos (74)
Memoria virtual
Tabla de páginas (II)
Ejemplo:
Dirección virtual de 28 bits, páginas de 4Kb y 4 bytes/entrada
(256Mb/4Kb)*4 = 256Kb
Arquitectura de Sistemas Paralelos (75)
Memoria virtual
Buffer de traducción anticipada o TLB (I)
•
•
•
•
De nuevo el principio de localidad: Si las referencias tienen localidad entonces
la traducción de direcciones también debe tener localidad
El buffer de traducción anticipada (translation-lookaside buffer) o TLB es una
cache, habitualmente totalmente asociativa o asociativa por conjuntos, cuyas
entradas contienen: en la parte de la etiqueta, el número de página virtual (o
parte) y en la parte del dato, el número de página física y los bits de control
Un tamaño de página mayor hace que más memoria pueda estar mapeada con
una entrada, por lo que se reduce el numero de fallos en la TLB
Hay TLBs unificadas y separadas (datos e instrucciones)
Tamaño de bloque
4-8 bytes (una entrada de tabla de página)
Tiempo de acierto
1 ciclo de reloj
Penalización de fallos 10-30 ciclos de reloj
Frecuencia de fallos
0.1%-0.2%
Tamaño TLB
32-8192
Arquitectura de Sistemas Paralelos (76)
Valores típicos
de parámetros
Memoria virtual
Buffer de traducción anticipada o TLB (II)
Arquitectura de Sistemas Paralelos (77)
Buffer de traducción anticipada o TLB (III)
Ejemplo: TLB del VAX-11/780
Tamaño de página de 512bytes
Entrada de TP de 4bytes
TLB de 512bytes asociativa por
conjuntos de 2 vías
Pasos:
1: Envío del índice de la
dirección virtual
2: Comprobación de válido y
tipo de acceso a memoria
3: Comparación de etiquetas
4: Envío de la dirección física a
través del multiplexor
5: Combinación del número
y desplazamiento de página
Arquitectura de Sistemas Paralelos (78)
Buffer de traducción anticipada o TLB (IV)
TLB y cache
• Cuando se combinan caches y memoria virtual, la dirección virtual debe ser
traducida a una dirección física mediante la TLB antes de que pueda acceder a
la cache (elevado tiempo de acierto)
• Una forma de reducir el tiempo de acierto es:
– acceder a la cache únicamente con el desplazamiento de página (no necesita
ser traducido) y mientras se están leyendo las etiquetas de dirección de la
cache, el número de página virtual es enviado a la TLB para ser traducido
– como la TLB es habitualmente más pequeña y rápida que la memoria de
etiquetas de la cache, la lectura de la TLB puede hacerse de forma simultánea
a la lectura de la memoria de etiquetas sin ralentizar los tiempos de acierto de
la cache
– después la comparación de direcciones se realiza entre la dirección física de la
TLB y la etiqueta de la cache
• Inconveniente: una cache de correspondencia directa no puede ser mayor que
una página
• Otra alternativa es utilizar caches virtuales (transparencia 59)
Arquitectura de Sistemas Paralelos (79)