Memoria I I
-
Upload
stefano-salvatori -
Category
Education
-
view
5.035 -
download
4
Transcript of Memoria I I
Sistemas de Memoria (II)
Cecilia Hernández
Algunas preguntasAlternativas de diseño
Cómo sabemos si está en cache?
Identificación del bloque
Dónde lo ponemos en cache?
Ubicación del bloque Qué ocurre si cache está llena y queremos traer algo
nuevo?
Reemplazo del bloque Qué ocurre si queremos traer algo nuevo y el
lugar donde queremos ponerlo ya está ocupado? estrategia de escritura
Reemplazo de bloque
Cache de traducción directa No hay elección: sólo una línea disponible
Cache completamente asociativo Todas las líneas disponibles, elegir la mejor
Cache asociativo por conjuntos Todas las líneas dentro del conjunto
disponibles, elegir la mejor
Elección de la línea a reemplazar
Objetivo Reemplazar la línea que va a ser utilizada más lejos en el
futuro Algoritmos de reemplazo
Random: elegir línea al azar LRU (least recently used): elegir línea menos
recientemente utilizada
1.12%1.12%1.13%1.13%1.17%1.15%256KB
1.5%1.4%1.7%1.5%2.0%1.9%64KB
5.0%4.4%5.3%4.7%5.7%5.2%16KB
RandomLRURandomLRURandomLRUTamaño
Asociatividad 2-way 4-way 8-way
Ejemplo: Tasas de fallo medidas en un benchmark
Algunas preguntasAlternativas de diseño
Cómo sabemos si está en cache?
Identificación del bloque
Dónde lo ponemos en cache?
Ubicación del bloque Qué ocurre si cache está llena y queremos traer algo
nuevo?
Reemplazo del bloque Qué ocurre si queremos traer algo nuevo y el
lugar donde queremos ponerlo ya está ocupado? estrategia de escritura
Estrategia de escritura
Escritura sincrónica (write-through) Escribir en el cache y en el nivel siguiente de la jerarquía
Escritura asincrónica (write-back) Escribir sólo en el cache, escribir en nivel siguiente sólo al
reemplazar el bloque Requiere un bit de estado adicional en el cache para
indicar que bloque ha sido modificado (bit M) Comparación
WT Pro: fallo de lectura no produce escrituras Con: alto costo de escritura a menos que se use un buffer
Buffer siempre se usa para no esperar por DRAM
WB Pro: evitar escrituras múltiples del mismo bloque a DRAM Con: Más complejo, fallo de lectura puede producir escritura
Buffer de escritura para write-through
Buffer almacena escrituras pendientes Procesador escribe en buffer y cache Controlador de memoria escribe contenidos del bloque a memoria
Buffer de escritura es FIFO Número típico de entradas: 4-8
Nota: buffer de escritura puede producir conflicto RAW Fallo de lectura antes de que el buffer haya escrito en DRAM Soluciones
Esperar a buffer vacío antes de servir el fallo de lectura Al servir fallo de lectura, verificar contenidos del buffer antes de ir a DRAM
(búsqueda asociativa en buffer)
CPUCache
Buffer de escritura
DRAM
Política ante fallo de escritura
¿Qué hacer si store produce un fallo? Traer bloque al cache (write-allocate)
Evita fallo posterior si se lee del mismo bloque Pero si no se lee, habríamos sacado del cache un
bloque potencialmente importante
Sólo escribir a DRAM (write-around) Ahorra espacio en el cache si el bloque escrito no
se accesa de nuevo en un tiempo largo
Mejoras al desempeño
¿Cómo mejorar el desempeño? Reducir tasa de fallos Reducir penalidad de fallos Reducir tiempo de acierto
Desempeño dado por Tiempo Promedio de Acceso a MemoriaEn inglés Average Memory Access Time
AMAT = tasa de aciertos*tiempo de acierto + (1- tasa de fallos)*penalidad de fallo
AMAT = (1 - tasa de fallos) * tiempo de acierto + tasa de fallos * penalidad de fallo
Mejoras al desempeño
¿Cómo mejorar el desempeño? Reducir tasa de fallos Reducir penalidad de fallos Reducir tiempo de acierto
Desempeño dado por Tiempo Promedio de Acceso a MemoriaEn inglés Average Memory Access Time
AMAT = tasa de aciertos*tiempo de acierto + (1- tasa de fallos)*penalidad de fallo
AMAT = (1 - tasa de fallos) * tiempo de acierto + tasa de fallos * penalidad de fallo
Reducir tasa de fallos (I)
Explotar localidad espacial con bloques más grandes Pero incrementa penalidad de fallo También incrementa fallos por conflicto (menos bloques)
Tamaño de bloque (bytes)
Tasa deFallos
0%
5%
10%
15%
20%
25%
16 32 64 128
256
1K
4K
16K
64K
256K
Reducir tasa de fallos (II) Aumentar asociatividad
Regla 2:1 Tasa fallos cache directo tamaño N = tasa fallos cache APC de 2 vías tamaño
N/2 Pero recordar que tiempo de acierto es mayor.
Conflict
Cache Size (KB)
Mis
s R
ate
per
Typ
e
0
0.02
0.04
0.06
0.08
0.1
0.12
0.14
1 2 4 8
16 32 64 128
1-way
2-way
4-way
8-wayCapacity
Compulsory
Reducir tasa de fallos (III)
Cache de víctimas (victim cache) Pequeño buffer asociativo almacena
bloques recientemente eliminados del cache
Reduce fallos por conflicto en cache directo manteniendo acceso rápido
Jouppi[1990]: cache de víctimas de 4 entradas elimina 20%-95% de fallos de conflicto en cache directo de 4KB
Utilizado en procesadores DEC Alpha y HP Al siguiente nivel
de jerarquía
DatosTags
Tag + comp
Tag + comp
Tag + comp
Tag + comp Línea datos
Línea datos
Línea datos
Línea datos
Operación con Cache Víctima
1. Acierto en L1, no se necesita accesar a cache víctima
2. Fallo en L1 por bloque en ubicación b, acierto en cache víctima en ubicación v, intercambiar contenido de b y v (toma un ciclo extra)
3. Fallo en L1, fallo en cache víctima, cargar bloque del siguiente nivel en jerarquía y ponerlo en L1, poner bloque que estaba en L1 en cache víctima, si cache víctima esta llena, reemplazar una de las entradas
Buffer víctima de 4 u 8 entradas para una cache mapeada directa funciona bien
Cache víctimaFallo en L1 Fallo CV
CPU
dirección
b
DRAM
CacheCV
(1)Fallo L1
(2)Fallo CV
Cache víctimaFallo en L1 Fallo CV
CPU
dirección
b
DRAM
m
CacheCV
(3)Acierto DRAM Dato en bloque m
Cache víctimaFallo en L1 Fallo CV
CPU
dirección
m
DRAM
m
CacheCV
(4)Copia bloque mEn donde estaba bY b en cache CV
b
Cache víctimaFallo en L1, Acierto en CV
CPU
dirección
b
DRAM
CacheCV
AciertoEn CV(2)
Fallo en L1(1)
v
Reducir tasa de fallos (IV) Prefetch
Traer bloques al cache antes de que el programa los requiera
Reduce fallos obligatorios (compulsory) Útil cuando localidad espacial es muy buena
(instrucciones y datos), pero requiere predicción de saltos
Cache de trazas (trace cache) Integrar prefetch y predicción: instrucciones en cache en
orden de ejecución Utilizado en arquitectura Netburst de Intel (Pentium 4)
Acceso a datos (ayuda por software): Instrucciones “touch” Similar a load, pero indica al cache que dato se accesará
pronto Presentes en procesadores IBM Power PC
Mejoras al desempeño
¿Cómo mejorar el desempeño? Reducir tasa de fallos Reducir penalidad de fallos Reducir tiempo de acierto
Desempeño dado por Tiempo Promedio de Acceso a MemoriaEn inglés Average Memory Access Time
AMAT = tasa de aciertos*tiempo de acierto + (1- tasa de fallos)*penalidad de fallo
AMAT = (1 - tasa de fallos) * tiempo de acierto + tasa de fallos * penalidad de fallo
Reducir penalidad de fallos (I) Mejorar desempeño de sistema de memoria principal
(DRAM) Bus de acceso a memoria más rápido, más ancho
Buses anchos tienen problemas de skew, preferible aumentar velocidad (ej. DDR, double-pumped Front Side Bus)
Pentium 4 utiliza un bus de 200MHz – 266MHz pero transfiere datos 4 veces por ciclo para un ancho de banda efectivo de 800MHz – 1066MHz (quad-pumped)
Acceso por bloques entrelazado, paginado, sincrónico Usado en servidores (chipset intel Orion) por costo de
implem. En caso de fallo, traer al cache dato requerido primero, y
resto del bloque después Latencia es alta de todas maneras Útil sólo en bloques grandes Localidad espacial: probablemente hay que esperar el
siguiente dato de todas formas
Reducir penalidad de fallo (II)
Buffer de escritura Almacena escrituras a memoria pendientes Fallo de lectura tiene prioridad sobre buffer de
escritura para acceso a DRAM Resolver conflictos RAW: buscar bloque en buffer de
escritura antes de traer de DRAM Fallos sin bloqueo
Permitir que procesador ejecute otras instrucciones mientras se resuelve el fallo
Ejecución desordenada de instrucciones Útil en procesadores superescalares o multihebra Problema: puede producirse otro fallo antes de
resolver el primero Pentium 4 puede manejar hasta 4 fallos simultáneos Múltiples bancos de memoria mejoran desempeño
Mejoras al desempeño
¿Cómo mejorar el desempeño? Reducir tasa de fallos Reducir penalidad de fallos Reducir tiempo de acierto
Desempeño dado por Tiempo Promedio de Acceso a MemoriaEn inglés Average Memory Access Time
AMAT = tasa de aciertos*tiempo de acierto + (1- tasa de fallos)*penalidad de fallo
AMAT = (1 - tasa de fallos) * tiempo de acierto + tasa de fallos * penalidad de fallo
Reducir tiempo de acierto
Parámetro crítico para L1 Utilizar L1 directo + cache de víctimas o L2 Segmentar (pipeline) acceso a L1
Etapa 1: determinar hit/miss Etapa 2: transferir dato a CPU
Tratar conflictos estructurales por acceso a L1 Cache unificado: Un cache L1 para datos e instrucciones
Ventaja: mejor tasa de acierto Desventaja: conflictos estructurales (stalls)
Arquitectura Harvard: Dos cache L1 independientes para datos e instrucciones Ventaja: elimina conflictos estructurales Desventaja: división del cache aumenta tasa de fallos
Hoy procesadores comerciales utilizan arquitectura Harvard Cache L2 típicamente unificado
Arquitectura Harvard versus unificada
Ejemplo Unificada: 32KB (tasa fallo 1.99%) Harvard: 16KB inst (tasa fallo 0.64%), 16 KB datos (tasa fallo 6.47%)
¿Cuál es mejor? Ignorar L2 Asumir 33% load/store, tpo. acierto: 1 ciclo, penalidad fallo: 50 ciclos
CPU
I-Cache L1
CPU
Cache L1Unificada
Cache L2Unificada
D-Cache L1
Cache L2Unificada
UnificadaArquitectura Harvard
AMAT = [AMATfetch + 0.33*AMATdatos]/1.33
AMAT (Harvard) = [(0.9936*1 + 0.0064*50) + 0.33*(0.9353*1 + 0.0647*50)]/1.33AMAT (Harvard) = 2.022 ciclos
AMAT (Unificada) = [(0.9801*1 + 0.0199*50) + 0.33*(1 + 0.9801*1 + 0.0199*50)]/1.33AMAT (Harvard) = 2.223 ciclos
Limitaciones de memoria principal
Cache acorta brecha entre velocidad de CPU y memoria principal (DRAM) ¿Cuáles son las limitaciones de la memoria principal?
Tamaño Programas poseen espacio de direcciones de 32 o 64 bits (registros de
direcciones) Con 32 bits de direcciones, cada programa puede accesar 4GB de memoria 20 programas en ejecución (procesos): ¡80 GB de memoria principal! DRAM demasiado cara, disco demasiado lento Pero programas no utilizan realmente todo el espacio disponible
Reubicación Procesos pueden residir en cualquier parte de la memoria Pero programador/compilador no sabe dónde van a ejecutarse ¿Cómo determinar las direcciones de memoria?
Protección Procesos podrían acceder a datos de otros programas en ejecución O a datos del sistema operativo Vulnerabilidad de seguridad
Solución: memoria virtual
Memoria virtual Procesos generan direcciones de memoria
virtuales Ej. lw $t4, 128($t7) #[$t7+128] es una dirección virtual
Memoria principal (DRAM) actúa como cache del disco
Unidad de manejo de memoria (MMU) examina dirección virtual y determina si dato reside actualmente en DRAM Sí: MMU genera dirección real (dirección en DRAM) No: MMU determina ubicación en disco del dato y
provoca excepción MMU además provee protecciones
Direcciones de memoria sólo para lectura, ejecución, sistema operativo
Espacios de memoria real separados para diferentes usuarios
Control
Datapath
MemoriaSecundaria
(Disco)
Procesador
Reg
istros
MemoriaPrincipal(DRAM)
Cac
he L
2D
atos, In
st.
~1 ~10,000,000Velocidad (ciclos): ~1-5 ~100
~100- 1000 40-400GTamaño (bytes): ~32K ~512M-4G
Cac
he L
1In
stC
ache L
1D
atos
~5-12
~32K
Espacio físicode direcciones
Espacio virtualde direcciones
Disco
Memoria Virtual DRAM cache de disco Espacio virtual y físico de direcciones
Ventajas de memoria virtual
Traducción Memoria virtual lineal para cada proceso, páginas
desordenadas en memoria principal Facilita múltiples procesos concurrentes en ejecución Procesos ocupan sólo una fracción del espacio virtual
disponible (conjunto de trabajo: working set) Protección
Un proceso no puede corromper el espacio de memoria de otro Asignar roles distintos a diferentes páginas (código, datos,
sistema operativo) Protección de datos del sistema operativo
Compartir datos entre procesos Direcciones virtuales de dos procesos pueden ser traducidas al
mismo marco de página en memoria física.
Memoria virtual versus cache
Nomenclatura Cache: bloque o línea; MV: página, marcos de página
Principal diferencia: penalidad de fallo Cache: tpo. acceso DRAM: ~100ns (~100 ciclos) MV: tpo. acceso disco: ~10ms (~10.000.000 ciclos!)
Consecuencias Minimizar fallos: ubicación de páginas completamente asociativa Política de escritura asincrónica (write-back) Páginas grandes: 4KB – 16MB
Disco tiene alta latencia pero mejor ancho de banda: bajo costo incremental de accesar bloques más grandes
Traducción de direcciones por hardware, manejo de fallos por software Sistema operativo ordena acceso a disco e implementa algoritmo de
reemplazo Penalidad de fallo demasiado alta para esperar: entregar CPU a otro
proceso (o hebra) hasta que página esté en memoria
Implementación de Memoria Virtual
Paginación DRAM dividida en
porciones iguales denominados marcos de páginas
En MV denominadas páginas o página virtual
Usa tabla de página traducción de direcciones
Espacio físicode direcciones
Espacio virtualde direcciones
Disco
página
Marcopágina
Tabla de páginas
Traducción de direcciones utiliza tabla de páginas en memoria Dirección virtual (menos
offset) utilizada como índice en tabla
Registro especializado contiene dirección de inicio de tabla en memoria (por proceso)
Entrada en la tabla (PTE: Page Table Entry) Bit presente/ausente o válido Bit de modificación Bits de protección Dirección de marco real o
bloque de disco
Página virtual offset
V Marco/BloqueM Prot.
Dir. Virtual
Tabla Pág.Dir. Base
V Prot. Marco
Pág. Virtual offset10
Marco real offset10
Dir. Física
Costo de traducción de un nivel
Tabla de páginas de un nivel: una entrada (PTE) por página virtual Una tabla de páginas por proceso
Tamaño de tabla Asumir PTE de 4 bytes Ej. Página de 4KB, espacio de direcciones de 32 bits
# páginas virtuales = 232/212 = 220
Tamaño tabla = 220 * 4 = 4MB por proceso Ej. Página de 4KB, espacio de direcciones de 64 bits
# páginas virtuales = 264/212 = 252
Tamaño tabla = 252 * 4 = Más de 16.000.000GB por proceso!! Tablas de páginas de un nivel demasiado grandes
Además, un gran porcentaje de las entradas nunca se accesan
Impráctico mantener tabla completa en memoria
Ilustración con tablas de páginas
Programa A
Programa B
Memoria física
V.p.0
V.p.0
V.p.1
V.p.1
V.p.2
V.p.2
V.p.3
V.p.n
V.p.q
Frame 0Frame 1Frame 2
Frame m
110
1
2m
0
Tabla página Programa A
Bit válido
Tabla Página Programa B
01
1 1
0
Traducción de dos niveles
Dos niveles de tablas
Tabla de nivel 1 PTE indica ubicación
de tabla de nivel 2 Siempre en memoria
Tablas de nivel 2 PTE indica marco
real, protecciones, etc.
Pueden ser paginadas a disco
Utilizado por mayoría de microprocesadores comerciales (ej. Intel)
Dirección virtual de 32 bits
4 bytes
4 bytes
4KBTabla N1
Tablas N2Páginas memoria
Índice PTE1 offsetÍndice PTE210 10 12
Tabla Nivel 1: 1K PTEEspacio total Tabla N1: 4KB
Tabla Nivel 2: 1K PTE 4KBEspacio total Tabla N2: 1K * 4KB = 4MB
Desventajas Tablas de Páginas
Típicamente una o múltiples tablas por proceso.
Caro por uso de memoria sólo para traducción
Otras alternativas para mejorar uso de memoria Tabla de páginas invertidas Tablas de páginas usando hashing Procesadores como IBM System 38, UltraSparc y
PowerPC usan este tipo de implementación No las veremos en este curso
Tabla de páginas invertida Sólo mantener PTEs de páginas presentes en memoria
física Tabla invertida organizada como tabla hash en memoria principal
Buscar asociativamente por número de página virtual Si está presente en tabla, extraer marco de página y protecciones Si no está presente en tabla, corresponde a un fallo de página
Utilizado por IBM System 38 (AS 400), UltraSparc, PowerPC
Pag. V
Tablahash
Pág.Virtual
=
Marco, etc
Acierto/fallo
Tabla de páginas invertida
Tiempo de traducción de direcciones
Necesario traducir dirección en cada acceso a memoria Uno o dos accesos más a memoria Posible fallo de página Todo esto antes de ir al cache a ver si el dato está
ahí
Solución Cache de traducciones También llamado TLB (Translation Lookaside Buffer)
Completamente asociativo
CPU MMU Cache Mem.Principal
VA PA miss
hitdato
TLB Almacena traducciones de página más recientes
Cache de traducciones Implementado como pequeña memoria asociativa
Funciona bien porque localidad de traducciones es tremendamente alta (página de 4KB – 16MB muchos accesos a la misma página)
Basta con ~64 entradas Reemplazo por hardware o software
TLB
Tabla Pág
2
0
1
3
Dir. virtual
p.v. off
marco p.v.
Dir. física
marco off
Espacio físicode direcciones
Espacio virtualde direcciones
Disco
2 20 5
Cache en espacio de direcciones reales
Necesario traducir dirección antes de accesar el cache Acceso simultáneo a TLB y cache
Reducir tiempo de acceso a dato en memoria Sólo posible si índice de acceso a cache es parte del
“offset” de la dirección virtual TLB provee marco de página (tag para el cache)
TLB Cache 1K líneas
10 2
00
4 bytes
índice 1 K
Pág. virtual offset20
búsquedaasociativa
64
Hit/Miss
Tag Dato=
marco
Cache directo, bloque de 4 bytes
Hit / Miss
TLBOffsetNúmero página virtual
tag
Número marco
v d prot
Copia de PTE
DirecciónDe CPU
Offset
Memoria Virtual y Caches
Cache en espacio virtual de direcciones
datos
CPU MMU
Cache
Memoriaprincipal
P.V.
hit
Marco
Cache trabaja con direcciones virtuales, no físicas No es necesario traducir antes de accesar cache Sólo traducir en caso de fallo en el cache
Problemas Necesario vaciar el cache al entregar CPU a otro proceso, o
incluir identificador de proceso/usuario en cache ¿Qué pasa con páginas de memoria física compartidas?
Misma página real, diferentes páginas virtuales ¿Cómo mantener memoria consistente?
Segmentación
Problemas con espacios de memoria virtual planos Utilización de espacio plano de 32/64 bits no es completa Diferentes áreas de memoria necesitan diferentes protecciones (ej.
código, datos, stack, heap, sistema operativo) Segmentación
Dividir espacio de direcciones en segmentos Cada segmento tiene asociado una posición en memoria real, un
tamaño y protecciones Programas pueden compartir segmentos con acceso controlado No confundir con segmentación (pipelining)
código
datos
stack
constantes
Espacio de memoria plano
Espacio de memoria segmentado
Sólo ejecución
Lectura/escritura
Sólo lectura
Lectura/escritura
Implementación de segmentación
Unidad de manejo de memoria (MMU) traduce dirección a espacio plano y verifica permisos de acceso y tamaño del segmento
Protecciones de segmento
Descriptor de segmento (entrada en tabla de segmentos) contiene protecciones, dirección base del segmento y tamaño Ej. Procesadores Intel
Segmentación + paginación
Cada segmento tratado como espacio de memoria virtual paginado
Links
Simulador de Memoria Virtual http://
www.ecs.umass.edu/ece/koren/architecture/Vmemory/try.html