Download pdf - Memoria I I

Transcript
Page 1: Memoria  I I

Sistemas de Memoria (II)

Cecilia Hernández

Page 2: Memoria  I I

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

Page 3: Memoria  I I

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

Page 4: Memoria  I I

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

Page 5: Memoria  I I

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

Page 6: Memoria  I I

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

Page 7: Memoria  I I

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

Page 8: Memoria  I I

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

Page 9: Memoria  I I

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

Page 10: Memoria  I I

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

Page 11: Memoria  I I

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

Page 12: Memoria  I I

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

Page 13: Memoria  I I

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

Page 14: Memoria  I I

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

Page 15: Memoria  I I

Cache víctimaFallo en L1 Fallo CV

CPU

dirección

b

DRAM

CacheCV

(1)Fallo L1

(2)Fallo CV

Page 16: Memoria  I I

Cache víctimaFallo en L1 Fallo CV

CPU

dirección

b

DRAM

m

CacheCV

(3)Acierto DRAM Dato en bloque m

Page 17: Memoria  I I

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

Page 18: Memoria  I I

Cache víctimaFallo en L1, Acierto en CV

CPU

dirección

b

DRAM

CacheCV

AciertoEn CV(2)

Fallo en L1(1)

v

Page 19: Memoria  I I

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

Page 20: Memoria  I I

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

Page 21: Memoria  I I

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

Page 22: Memoria  I I

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

Page 23: Memoria  I I

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

Page 24: Memoria  I I

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

Page 25: Memoria  I I

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

Page 26: Memoria  I I

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

Page 27: Memoria  I I

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

Page 28: Memoria  I I

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

Page 29: Memoria  I I

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.

Page 30: Memoria  I I

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

Page 31: Memoria  I I

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

Page 32: Memoria  I I

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

Page 33: Memoria  I I

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

Page 34: Memoria  I I

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

Page 35: Memoria  I I

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

Page 36: Memoria  I I

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

Page 37: Memoria  I I

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

Page 38: Memoria  I I

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

Page 39: Memoria  I I

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

Page 40: Memoria  I I

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

Page 41: Memoria  I I

TLBOffsetNúmero página virtual

tag

Número marco

v d prot

Copia de PTE

DirecciónDe CPU

Offset

Page 42: Memoria  I I

Memoria Virtual y Caches

Page 43: Memoria  I I

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?

Page 44: Memoria  I I

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

Page 45: Memoria  I I

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

Page 46: Memoria  I I

Protecciones de segmento

Descriptor de segmento (entrada en tabla de segmentos) contiene protecciones, dirección base del segmento y tamaño Ej. Procesadores Intel

Page 47: Memoria  I I

Segmentación + paginación

Cada segmento tratado como espacio de memoria virtual paginado

Page 48: Memoria  I I

Links

Simulador de Memoria Virtual http://

www.ecs.umass.edu/ece/koren/architecture/Vmemory/try.html