Download Memoria Compartida Distribuida

Document related concepts
no text concepts found
Transcript
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Memoria Compartida Distribuida
(Distributed Shared Memory)
Diapo. No. 1
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Sistemas con varios procesadores
Sistema
Multiprocesador
Dos o más procesadores
comparten una memoria
principal común
Sistema
Multicomputadoras
Cada CPU tiene
su memoria particular
Diapo. No. 2
Dr. Roberto Gómez Cárdenas
1
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Memoria en un chip
• Se consideran chips que contienen su CPU y toda la
memoria, (chips usados en carros, juguetes y otras
aplicaciones)
• La porción del CPU del chip tiene líneas de
direcciones y datos que se conectan directamente a la
porción de memoria
• Una posible extensión del chip puede incluir varios
CPUs compartiendo directamente la misma memoria,
(chips multiprocesadores).
• Chips de este tipo son posibles de construir, pero
caros, complicados y no tan usuales.
Diapo. No. 3
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Ejemplos esquemas memoria compartida en un solo chip
CPU
:
Memoria
(a) Un simple chip de computadora
CPU2
..
CPU1
:
Memoria
:
CPU3
..
CPU4
(b) Una memoria compartida de multiprocesador hipotética
Diapo. No. 4
Dr. Roberto Gómez Cárdenas
2
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Multiprocesadores tipo bus
• Conexión entre CPU y memoria se hace a través de cables
paralelos:
– algunos transmiten las direcciones y datos que el CPU quiere leer o
escribir
– otros envian o reciben datos
– el resto para controlar las transferencias.
• Dicha colección de cables se conoce con el nombre de bus.
• Buses pueden ser parte del chip, pero en la mayoría de los
sistemas los buses son externos y son usados para conectar
circuitos impresos.
• Una forma simple de construir multiprocesadores es
conectarlos en un bus con más de un CPU
Diapo. No. 5
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Lectura/escritura en un bus
• Lectura: se deja la dirección de la palabra a leer en el bus y
una señal en el bus de control indicando que se desea leer.
• Cuando la memoria encuentra la palabra buscada, pone el
contenido de esta en el bus, y envía una señal por el bus de
control para notificar que esta lista.
• Después de lo anterior el CPU lee lo que desea
• Las escrituras funcionan de la misma forma
• Varios esquemas son usados para impedir que dos o más
CPUs accesen la memoria al mismo tiempo, por ejemplo
realizar una solicitud de acceso antes de hacer el acceso
CPU
Bus
Dr. Roberto Gómez Cárdenas
CPU
CPU
Memoria
Diapo. No. 6
3
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Multiprocesadores con caché
• Desventaja bus: con tres o cuatro CPUs el bus esta sobrecargado.
• Enfoque usado para reducir lo anterior es equipar el CPU con una
caché
• La mayoría de la literatura con respecto a la caché trata
protocolos de consistencia, (asegurarse que las diferentes cachés
no tienen diferentes valores para la misma dirección)
• Ejemplo protocolo: caché husmeador
CPU
CPU
CPU
Caché
Caché
Caché
Memoria
Bus
Diapo. No. 7
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Consistencia caché
• Objetivo: evitar que diferentes cachés no
contienen diferentes valores para la misma celda
de memoria.
• Protocolo write-through (caché-husmeador)
– Cuando CPU lee una palabra de memoria:
• la palabra es depositada en el bus
• contenido es almacenado en el caché del CPU que hizo la
petición
• si la palabra se necesita después, el CPU la toma de su caché
sin hacer una petición de memoria
• fracaso lectura: la palabra solicitada no esta en la caché
• éxito lectura: la palabra solicitada se encuentra en la caché
Diapo. No. 8
Dr. Roberto Gómez Cárdenas
4
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Consistencia caché
• Protocolo write-through (caché-husmedor)
– Cuando CPU quiere escribir en palabra de memoria:
• si la palabra se encuentra en el caché del CPU que desea hacer
la escritura (éxito escritura) , la entrada en el caché es
actualizada
• también se coloca en el bus para actualizar la memoria
• todas las otras cachés ven la escritura, ya que estan husmeando
en el bus y verifican si la palabra se esta usando en su
máquina, si es el caso la invalidan.
• de esta forma cuando la escritura termina, la memoria esta
actualizada y solo una máquina tiene la palabra en su caché
Diapo. No. 9
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Resumen protocolo de consistencia
caché husmeador
Evento
Acción tomado por un caché en
repuesta a una operación de CPU
local
Fracaso Lectura Acceso dato de la memoria y guardarla en
la caché
Exito Lectura
Accesar el dato en la caché local
Fracaso Escritura Actualizar datos en memoria y guardarlos
en la caché
Exito Escritura Actualizar memoria y caché
Acción tomada por una
caché en respuesta a
una operación de CPU
remota
(Ninguna acción)
(Ninguna acción)
(Ninguna acción)
Entrada caché invalida
Diapo. No. 10
Dr. Roberto Gómez Cárdenas
5
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Alternativa a invalidar
• Alternativa para invalidar las caches es actualizar todas
• Invalidar solo requiere la dirección de la palabra a ser
invalidada.
• Actualizar requiere que se proporcione el nuevo valor
también.
• Si dos items deben transmitirse por el bus, el ancho de
banda se verá afectado.
• También será necesario más trabajo por parte del CPU
para actualizar todo
– en vez de trabajar una vez, debe trabajar dos
• El tema de validar contra actualizar pasa en todos los
protocolos de tipo caché así como en los sistemas DSM.
Diapo. No. 11
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo de membresía write once
• En general si un CPU escribe una palabra, es más
lógico que sea ese mismo CPU el que vuelva a
utilizarla y es menos probable que otro CPU la
utilice.
• Si un CPU tiene una “propiedad” temporal de la
palabra, puede evitarse el hecho de actualizarla en
escrituras subsecuentes hasta que una CPU
diferente muestre interés en dicha palabra.
• Goodman (1983) propuso un protocolo en base a
lo anterior: de una escritura
Diapo. No. 12
Dr. Roberto Gómez Cárdenas
6
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Estados de los bloques caché
• Protocolo maneja bloques caches los cuales pueden
caer en los siguientes estados:
1. Inválido - bloque de caché no contiene datos válidos
2. Limpio - memoria actualizada, bloque puede estar en otros
caches
3. Sucio - memoria incorrecta, ninguna otra caché tiene el
bloque
• Idea base: una palabra que es leída por varios CPUs
puede estar presente en todos sus cachés.
– la palabra que es escrita regularmente por una máquina es
dejada en su caché y no es escrita en memoria cada vez que
es escrita
Diapo. No. 13
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Ejemplo 1: estado inicial
Memoria
correcta
CPUs
A
B
C
W1
W1
LIMPIO
• La palabra W, que contiene el valor W1, se encuentra en
memoria y en la caché del CPU B
Diapo. No. 14
Dr. Roberto Gómez Cárdenas
7
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Ejemplo 2: lectura palabra
Memoria
correcta
A
B
W1
W1
LIMPIO
C
W1
LIMPIO
• A lee la palabra W y toma W1, B no responde
a la lectura, pero la memoria lo hace
Diapo. No. 15
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Ejemplo 3: escritura de una palabra
Memoria
correcta
A
B
W2
W1
SUCIO
C
W1
INVALIDO
• A escribe un valor W2, B husmea en el bus, ve la escritura,
invalida su entrada. La copia de A es marcada como sucia
Diapo. No. 16
Dr. Roberto Gómez Cárdenas
8
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Ejemplo 4: otra escritura
Memoria
correcta
A
B
W3
W1
SUCIO
W1
C
INVALIDO
• A escribe W de nuevo. Esta y subsecuentes escrituras de A
son realizadas localmente, sin generar tráfico en el bus
Diapo. No. 17
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Ejemplo 5: lecturo o escritura
Memoria
correcta
A
B
C
W3
W1
W3
INVALIDO
INVALIDO
W1
SUCIO
• C lee o escribe W. A detecta la petición husmeando en el bus,
proporciona el valor e invalida su propia entrada. Ahora C tiene
la única copia válida.
Diapo. No. 18
Dr. Roberto Gómez Cárdenas
9
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Ultimos comentarios ejemplo
• C es el propietario de la palabra
– puede leer escribir y leer en ella sin hacer peticiones en
el bus
– tienen la responsabilidad de estar atento por peticiones
de otros CPUs y atenderlas
• La palabra se queda en un estado de sucio hasta
que es purgada de la caché
– cuando eso ocurre desaparece de todas las cachés y es
escrita de nuevo en la memoria
Diapo. No. 19
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Multiprocesadores basados en anillo
• Ejemplo Memnet: un espacio de direcciones se
divide en una parte privada y otra compartida.
• La parte privada:
– se divide en regiones cada máquina cuenta con memoria
para su pila, datos y códigos no compartidos.
• Parte compartida:
– común a todas las máquinas y se guarda de forma
consistente mediante un protocolo de hardware parecido a
los de bus se divide en bloques de 32 bytes, (unidad
transferencia)
Diapo. No. 20
Dr. Roberto Gómez Cárdenas
10
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Características anillo
• Anillo consta de 20 cables paralelos que juntos
permiten enviar 16 bits de datos y 4 bits de control
cada 100 nanosegundos.
• La interfaz de anillo, MMU, el caché y una parte de
la memoria se integran en el dispositivo Memnet.
• No existe una memoria global centralizada.
• Cada bloque de 32 bytes en el espacio compartido
de direcciones tiene una máquina de origen donde
la memoria física esta siempre reservada para él.
– máquina origen = máquina hogar
Diapo. No. 21
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Esquema del anillo Memmet
CPU
CPU
CPU
CPU
CPU
CPU
Diapo. No. 22
Dr. Roberto Gómez Cárdenas
11
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Características de los bloques
• Un bloque puede ocultarse en una máquina distinta a
su máquina de origen.
• Un bloque de solo lectura puede estar presente en
varias máquinas.
• Un bloque de solo escritura puede estar presente en
sólo una máquina.
• En ambos casos el bloque no necesita estar en su
máquina hogar.
• Todas las máquinas hogar deben garantizar un
espacio para almacenar el bloque si ninguna otra
máquina lo tiene en su cache.
Diapo. No. 23
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
El dispositivo Memnet
• Cuenta con una tabla en cada máquina.
– contiene una entrada por cada bloque del espacio de
direcciones compartido
– la tabla esta indexada por número de bloque
• La tabla indica el estado del bloque:
–
–
–
–
–
bit válido: bloque presente en caché y actualizado
bit exclusivo: bloque presente en caché es único
bit origen: el bloque pertenece a la máquina hogar
bit interrupción: forzar interrupciones
campo posición: si el bloque esta presente y es válido
nos indica en donde este ubicado
Diapo. No. 24
Dr. Roberto Gómez Cárdenas
12
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Detalle de la máquina y la tabla del
bloque
MMU Caché
Memoria
de origen
Tabla del
bloque
0
1
2
3
4
CPU
Memoria privada
CPU
Válido
Exclusivo
Origen
Interrupción
Posición
CPU
CPU
CPU
CPU
CPU
Diapo. No. 25
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo de Memnet (lectura)
• Dirección memoria se pasa al dispositivo Memnet
• Dispositivo verifica si el bloque esta presente
• Si esta presente:
– solicitud es satisfecha de inmediato
• Si no esta presente:
–
–
–
–
dispositivo espera hasta que le llegue la ficha
coloca un paquete de solicitud en el anillo
el CPU suspende sus actividades
paquete petición contiene dirección deseada y un
campo vacío de 32 bytes
Diapo. No. 26
Dr. Roberto Gómez Cárdenas
13
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo de Memnet (lectura) ...
• Si no esta presente:
– mientras paquete pasa por el anillo cada dispositivo
Memnet verifica si tiene el bloque deseado
– si lo tienen coloca el bloque en el campo vacío y
modifica el bit del encabezado del paquete para inhibir
la acción de las máquinas posteriores
– si el bit exclusivo del bloque esta activo, se limpia
– como el bloque tiene que estar en un lado, cuando el
paquete regresa al emisor, se garantiza que contiene el
bloque solicitado
– el CPU envía la solicitud guarda el bloque, satisface la
solicitud y libera el CPU
Diapo. No. 27
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
¿Y si no hay espacio?
• ¿Qué pasa si la máquina solcitante no tiene
espacio libre en su caché, para contener el bloque
remoto?
• Para hacer espacio toma al azar un bloque oculto y
lo envía a su origen
– se libera un espacio del caché
• Los bloques cuyo bit origen está activo nunca se
eligen, pues se encuentran en su origen
Diapo. No. 28
Dr. Roberto Gómez Cárdenas
14
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo Memnet (escritura)
• Es diferente al de lectura
• Se quiere escribir datos en un bloque de la
memoria compartida
• Se pueden presentar tres casos:
– Si el bloque contiene la palabra por escribir
– Si el bloque necesario esta presente pero no es la única
copia
– Si el bloque no esta presente
Diapo. No. 29
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo Memnet: escritura caso 1
• Si el bloque contiene la palabra por escribir está
presente y es la única copia en el sistema
– el bit exclusivo esta activado
• No es necesario buscar la palabra en otro lugar
• En este caso la palabra se escribe de manera local.
Diapo. No. 30
Dr. Roberto Gómez Cárdenas
15
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo Memnet: escritura caso 2
• Si el bloque necesario esta presente pero no es la
única copia.
• Se envia primero un paquete de invalidación por el
anillo
– las otras máquinas desechan sus copias de bloque en el
que se va a escribir
• Cuando el paquete regresa, el bit exlusivo del
dispotivo de la máquina se activa y se procede a
una escritura local
Diapo. No. 31
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo Memnet: escritura caso 3
• Si el bloque no esta presente.
• Se envía un paquete que combina una solicitud de
lectura y una de invalidación.
• La primera máquina que tenga el bloque la copia
en el paquete y desecha su copia.
• Todas las máquinas posteriores solo desechan el
paquete.
• Cuando el paquete regresa al emisor, éste lo
guarda y escribe en él.
Diapo. No. 32
Dr. Roberto Gómez Cárdenas
16
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Memnet vs bus
• Similitudes
– en ambos casos las operaciones siempre regresan el
valor escrito de manera más eficiente
– un bloque puede estar ausente de un caché, presente en
varios cachés para su lectura, o presente en un caché
para escritura
• Diferencias
– los de bus están fuertemente acoplados, con
regularidad, los CPUS están en un gabinete
– los de anillo pueden estar menos acoplados,
potencialmente en escritorios dispersos en un edificio,
como máquinas en una LAN
Diapo. No. 33
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Multiprocesadores con conmutador
• En anillo o bus, el echo de añadir un CPU satura el ancho de
banda del bus o anillo
• Dos métodos para solucionar el problema:
– 1. Reducir la cantidad de comunicación
– 2. Incrementar la capacidad de comunicación
• Una forma de reducir la cantidad de comunicación es el
ocultamiento trabajo adicional en esta área:
– mejorar protocolo de ocultamiento
– optimizar el tamaño del bloque
– incrementar la localidad de las referencias a memoria
• Sin embargo siempre se querrá añadir más CPUs y no habrá
más ancho de banda en el bus
Diapo. No. 34
Dr. Roberto Gómez Cárdenas
17
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Solución propuesta
• Cambiar la topología de la red de interconexión.
• Es posible construir el sistema como una jerarquía.
• Se continúan colocando algunos CPU en un bus,
pero se considera todo esto como unidad.
• Se construyen varias unidades y se conectan
mediante un bus entre ellas
• Si se necesita más ancho de banda, se reúne un bus,
un árbol o una cuadrícula de unidades en una
superunidad, y se separa el sistema en varias
superunidades.
Diapo. No. 35
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Solución propuesta ...
• Las superunidades se pueden conectar mediante un
bus, árbol o cuadrícula, y así en lo sucesivo.
• Un ejemplo de lo anterior es la máquina Dash,
diseño jerárquico basado en una cuadrícula de
unidades
Diapo. No. 36
Dr. Roberto Gómez Cárdenas
18
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Formando una superunidad
CPU
Memoria
Unidad
C
C
C
C
C
C
C
C
C
C
C
C
Bus entre
unidades
M
C C C C
M
C C C C
M
C C C C
M
C C C C
M
C C C C
M
C C C C
M
M
Interfaz
M
Bus entre
unidades
Bus entre superunidades
Diapo. No. 37
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
La máquina Dash
• Construida en la Universidad de Stanford en 1992.
• Se han echo muchas otras investigaciones con
trabajos parecidos.
• Un prototipo de 64 CPUs fue construido, aunque el
diseño se pensó con cuidado para construir una
versión más grande.
• Consta de 16 unidades, cada una conteniendo un bus,
cuatro CPU, 16M de memoria global y algo de
equipo de E/S (discos, etc).
• Cada CPU es capaz de “husmear” en su bus local,
pero no en los demás buses.
Diapo. No. 38
Dr. Roberto Gómez Cárdenas
19
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
La memoria en la máquina Dash
• Se cuenta con un espacio total disponible: 256M,
dividido en 16 regiones de 16M c/una:
– memoria global unidad 0 contiene direcciones de 0 a
16M
– memoria global unidad 1 contiene direcciones de 16M a
32M
• La memoria es oculta y transferida en bloques de
16 bytes, de modo que cada unidad tiene bloques
de memoria de 1M dentro de su espacio de
direcciones
Diapo. No. 39
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Los directorios
• Cada unidad tiene un directorio con un registro de
las unidades que tienen copias de sus bloques
• Cada unidad tiene 1M de bloques de memoria, por lo
que tiene 1M entradas en su directorio
• Cada entrada tiene:
– un mapa de bits, (un bit por unidad), que indica si la
unidad tiene el bloque oculto
– un campo de 2 bits que indica el estado del bloque
• DASH = Directory Architecture for Shared Memory
Diapo. No. 40
Dr. Roberto Gómez Cárdenas
20
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Listas explicitas
• Un mapa de bits no es la única forma saber que
unidad tiene que bloque.
• Otro método es organizar las entradas como lista
explícita que indique las unidades que contienen el
bloque de caché correspondiente.
• Si se comparte poco: lista requiere de pocos bits.
• Si se comparte mucho: se requieren más bits.
• Las listas tienen la desventaja de ser estructuras de
datos de longitud variable.
• Máquina Alewif del MIT usa listas.
Diapo. No. 41
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
La unidad DASH
• Unidad Dash se comunica con otras a través de una
interfaz.
• Las interfaces se conectan mediante enlaces entre
las unidades en una cuadrícula rectangular.
• El sistema de enlaces entre las unidades utiliza el
ruteo de seguimiento de túneles
– primera parte de un paquete puede adelantarse aún antes
de recibir todo el paquete
• En realidad existen dos conjuntos de enlaces entre
las unidades
– uno es para los paquetes de solicitud y otros para los de
respuesta
Diapo. No. 42
Dr. Roberto Gómez Cárdenas
21
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Memoria
global
CPU
con cache
C
Dr. Roberto Gómez C.
C
M
Arquitectura Dash
I
I
C
0
C
M
C
C
C
C
8
M
C
I
C
M
C
M
C
M
C
C
C
C
M
7
D
M
10
I
C
C
M
11
D
I
C
C
D
M
14
I
C
C
M
D
Bus entre unidades, (sin husmeador)
Bus husmeador
I
D
13
D
3
D
6
I
C
M
I
D
12
C
D
9
M
D
C
C
I
C
C
2
I
D
I
I
D
5
M
D
C
M
I
C
4
Número
de unidad
C
D
I
M
C
1
D
Directorio
I
Interfaz entre unidades
15
D
Unidad
Memoria Distribuida Compartida
Diapo. No. 43
Dr. Roberto Gómez C.
Ejemplo directorio Dash
Estado
Unidad
Bloque 0
Bit que indica si
la unidad 0 tiene
el bloque 3 de
la memoria cuyo
origen es la unidad
14 en cualquiera
de sus cachés
1
2 3
4
5 6
7 8
9 10 11 12 13 14 15
0
1
2
3
~
~
~
~
{no oculto,
limpio,
sucio}
Indica que bloque se comparte con que unidad
Diapo. No. 44
Dr. Roberto Gómez Cárdenas
22
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
El caché en la máquina DASH
• El caché es realizado en dos niveles
– caché de primer nivel
– caché de segundo nivel
• El caché de primer nivel es un subconjunto del caché
de segundo nivel.
• Cada bloque caché puede estar en los siguientes
estados:
– NO OCULTO: la única copia del bloque reside en esta
memoria
– LIMPIO: memoria actualizada, el bloque puede estar en
varias cachés
– SUCIO: memoria incorrecta, solo una caché
Diapo. No. 45
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolos DASH
• Protocolos basados en la membresía y la
invalidación.
• En cada instante cada bloque de caché tiene un
propietario único
– para bloques NO_OCULTOS o LIMPIOS la unidad de
hogar del bloque es el propietario
– para bloques SUCIOS la unidad que tiene la única
copia es el propietario
• Escribir en un bloque limpio requiere encontrar e
invalidar todas sus copias
– es aquí donde los directorios son usados
Diapo. No. 46
Dr. Roberto Gómez Cárdenas
23
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo DASH lectura
• Máquina verifica su propia caché ( o sus cachés)
• Si no tiene la palabra, una petición es realizada en
los CPUs de la unidad para ver si alguno de estos
tiene el bloque.
– la busqueda es realizada dentro de la unidad
• Si un CPU dentro de la misma unidad la tiene se
lleva a cabo una transferencia caché-caché
– Si el bloque está LIMPIO se hace una copia
– Si el bloque está SUCIO el directorio hogar es
informado que el bloque está LIMPIO y compartido
Diapo. No. 47
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo DASH lectura ...
• Si el bloque no esta presente en alguna cache de la
unidad:
– un paquete de petición es enviado a la unidad hogar del
bloque
– dirección unidad hogar puede determinarse examinando
los 4 bits de la parte alta de la dirección
• La unidad hogar puede ser la unidad que realiza la
petición
– mensaje no es enviado fisicamente
– admon directorio en unidad hogar examina sus tablas para
ver en que estado se encuentra el bloque:
• NO OCULTO o LIMPIO
• SUCIO
Diapo. No. 48
Dr. Roberto Gómez Cárdenas
24
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo DASH lectura ...
• Si edo = NO_OCULTO o LIMPIO
– el hardware lo toma de su memoria y lo envia a la unidad que lo
pidio
– actualiza su directorio, marcando al bloque como “capturado”
(cached) en la unidad que lo solicitó
• Si edo = SUCIO
– hardware directorio ve la identidad de la unidad que contiene el
bloque y le envia la solicitud
– unidad con bloque sucio lo envia a la unidad que lo solicitó y marca
su copia como limpia
• ya que ahora esta compartida
– envia una copia de regreso a la unidad hogar, de tal forma que la
memoria pueda actualizarse y cambia el estado del bloque a
LIMPIO.
Diapo. No. 49
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Resumen protocolo Dash en lectura
Estado del bloque
Caché de R
Caché vecino
NO OCULTO
LIMPIO
Utilizar bloque
Copiar bloque al
caché de R
SUCIO
Utilizar bloque
Enviar el bloque
en R y ala unidad
de origen; indicar
unidad que lo marque como LIMPIO
y ocultarlo unidad R
Memoria de la
unidad de origen
Caché de alguna
unida
Enviar bloque a R;
marcarlo como
LIMPIO y ocultarlo
sólo en la unidad R
Copiar el bloque de
la memoria a R; marcarlo como oculto
también en la unidad
de R
Enviar el bloque a
R y a la unidad de
origen (si esta
OCULTO en alguna parte); indicar
al origen que lo
marque como
LIMPIO y también
ocultarlo en la
unidad de R
Diapo. No. 50
Dr. Roberto Gómez Cárdenas
25
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo DASH escritura
• Para que realice una escritura el CPU debe estar
seguro de ser el único propietarios del bloque en el
sistema
• Si ya tiene el bloque en su cache y esta SUCIO, la
escritura se lleva a cabo inmediatamente.
• Si ya tiene el bloque y esta LIMPIO, un paquete es
enviado a la unidad hogar solicitando que todas las
copias sean invalidas.
• Si no lo tiene en su cache:
– verifica si otro CPU de su unidad lo tenga
Diapo. No. 51
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo DASH escritura
• Si el bloque lo tiene un CPU de su unidad:
– una transferencia caché-caché se lleva a cabo
– si el bloque esta LIMPIO todas las otras copias, si las hay,
deben ser invalidadas por la unidad hogar
• Si el bloque se encuentra en alguna otra unidad-hogar:
– un paquete es enviado a esta unidad
– tres casos son posibles:
• NO OCULTO: se marca SUCIO y se envia al que hizo la petición
• LIMPIO: todas las copias son invalidadas y el mismo procedimiento
que para NO-OCULTO se aplica
• SUCIO: petición es redirigida a la unidad remota que actualmente
tiene el bloque, esta unidad invalida su propia copia y satisface la
petición
Diapo. No. 52
Dr. Roberto Gómez Cárdenas
26
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Resumen protocolo Dash para escrituras
Estado del bloque
Caché de R
Caché vecino
NO OCULTO
LIMPIO
Enviar el mensaje al
origen solicitando la
proximidad exclusiva
en el edo. SUCIO; si
se otorga, usar bloque
SUCIO
Utilizar bloque
Copiar e invalidar
bloque, enviar mensaje al origen solitando la propiedad
exclusiva en estado
SUCIO
Transferencia entre
cachés a R; invalidar
la copia vecina.
Memoria de la
unidad de origen
Caché de alguna
unidad
Enviar bloque a R;
marcarlo como
SUCIO y ocultarlo
en la unidad R
Enviar bloque a R;
invalidar todas las
copias ocultas, marcarlo como SUCIO y
ocultarlo solamente en
la unidad de R
Enviar el bloque
directamente a R; y
origen (si esta
invalidar la copia
oculta; el origen lo
marca como
SUCIO y lo oculta
solamente en la
unidad de R
Diapo. No. 53
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Consistencia
• Mantener consistencia no es algo simple.
• Un simple acceso a memoria puede requerir
un gran número de paquetes a ser enviados.
• Para tener consistencia de memoria, el
acceso no es completado hasta que todos los
paquetes han sido “acknowledged”
(reconocidos)
– esto puede tener efectos en el desempeño
Diapo. No. 54
Dr. Roberto Gómez Cárdenas
27
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Los multiprocesadores NUMA
• Son una alternativa a los esquema de tipo caché.
• NUMA: Non Uniform Memory Access
• Los NUMA, al igual que un UMA (Uniform Memory
Acess) cuenta con un espacio de direcciones visible
pata todos los CPUs,
– cuando un CPU escribe en A, una lectura posterior de A,
por otro CPU, regresara un valor recien escrito por A
• La diferencia entre UMA y NUMA no radica en la
semantica sino en el desempeño.
– NUMA: acceso a memoria remota es más lento que local y
no se hace nada para remediarlo (p.e. usar caché)
Diapo. No. 55
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Características multiprocesadores NUMA
• Existe un acceso de no-uniforme de acceso a
memoria
– ya que los datos y la memoria pueden estar fisicamente
distribuidos, los mecanismos de acceso no son uniformes,
dependiendo si la información deseada es local o remota
• La conexión entre módulos locales puede ser buses,
redes de interconexión o subredes de comunicación
• La granuralidad de accesos a memoria puede ser una
palabra, una línea caché de palabras, una página o
un segmento, (bloque en este caso)
Diapo. No. 56
Dr. Roberto Gómez Cárdenas
28
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Arquitectura General NUMA
(Chow and Jhonson)
procesador
memoria
controlador de
coherencia de memoria
procesador
memoria
controlador de
coherencia de memoria
buses, red de interconexión o red de comunicación
Diapo. No. 57
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Tipos Arquitecturas NUMA
(Chow and Jhonson)
• Multiprocesador caché
– Uso de cachés locales en cada procesador son usados
para reducir latencias de acceso a memoria y tráfico de
acceso a memoria compartida
• Arquitectura DSM
– No existe memoria global física. Una memoria virtual
global es creado mapeando todas o partes de la
memoria local, en un espacio de direcciones global
compartido por todos los nodos.
Diapo. No. 58
Dr. Roberto Gómez Cárdenas
29
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Cache multiprocesador vs arquitectura DSM
Memoria Global
Arquitectura de
cache multiprocesador
Bus común
Caché locales
Procesadores
Espacio memoria virtual
Red de comunicación
Arquitectura de
memoria compartida distribuida
Memoria Local
Procesadores
Diapo. No. 59
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Diferencias tipos arquitecturas
(Chow and Jhonson)
• Diferencia clave: tiempo de retardo en acceso de
información compartida.
– tiempo acceso en DSM es mayor que el de caché
• Otra diferencia es la conexión de los módulos,
para sistemas caché es más fácil realizar un
broadcast, mientras que esto no es posible en
sistemas DSM
Diapo. No. 60
Dr. Roberto Gómez Cárdenas
30
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Ejemplos multiprocesadores NUMA
(Tanenbaum)
• Máquina Cm*
• BBN Butterfly
Diapo. No. 61
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Máquina Cm*
• Formada por varias unidades cada una con un
CPU, un MMU microprogramable, un módulo de
memoria y posiblemente algunos dispositivos de
E/S, todos conectados mediante un bus.
• No hay cachés y no se husmean los buses.
• Las unidades fueron conectadas mediante buses
entre las unidades.
• Cuando se hace una llamada a memoria, la
solicitud llega al MMU del CPU que averigua cual
memoria se necesita.
Diapo. No. 62
Dr. Roberto Gómez Cárdenas
31
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Vista simplificada de un sistema Cm*
Unidad
CPU
M
E/S
Bus local
Bus
entre
unidades
CPU
M
E/S
CPU
M
E/S
MMU microprogramado
Memoria local
Diapo. No. 63
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo de acceso
• CPU realiza una referencia a memoria, la petición se
va al MMU.
• El MMU examina los bits superiores para ver que
memoria se necesita.
• Si la dirección es local:
– MMU pone petición en el bus local
• Si la dirección es remota:
– MMU construye un paquete de petición con la dirección
(y para escritura el dato a escribir) y lo envía a la unidad
destino a travéz del bus-interunidad.
Diapo. No. 64
Dr. Roberto Gómez Cárdenas
32
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Protocolo de acceso ...
– cuando la unidad lo recibe, el MMU destino
realiza la operación y regresa el dato (lectura) o
un ack (escritura)
• Desventaja
– el CPU ejecuta un programa que reside por
completo en memoria remota:
• por cada palabra leída y escrita se envía un paquete
• lo anterior reduce el desempeño de las operaciones en
gran escala
Diapo. No. 65
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
BBN Butterfly
• Cada CPU se acopla de forma directa a una
memoria.
• Los CPUs se conectan a través de conmutadores,
cada uno con cuatro puertos de entrada y cuatro de
salida:
– los CPUs de la parte derecha son los mismos que los de la
izquierda
• Peticiones locales:
– se manejan de forma directa.
Diapo. No. 66
Dr. Roberto Gómez Cárdenas
33
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
BBN Butterfly ...
• Peticiones remotas:
– las solicitudes remotas se convierten en paquetes de
petición y son enviados a la memoria apropiada a través de
la red switcheada
• Desventaja:
– misma que el modelo anterior
– los programas ejecutados remotamente le pegan al
desempeño
• Observaciones (Cm* y Butterfky)
– ninguno de los ejemplos cuenta con memoria global
– NUMA puede ser equipado con memoria que no
pertenezca a ningún CPU
Diapo. No. 67
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Esquema de una BBN Butterlfy
CPU
Conmutadores
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
11
11
12
12
13
13
14
14
15
15
CPU
Conmutadores
Diapo. No. 68
Dr. Roberto Gómez Cárdenas
34
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Propiedades multiprocesadores NUMA
• Es posible el acceso a la memoria compartida
• El acceso a la memoria remota es más lento que el
de la memoria local
• El tiempo del acceso remoto no se oculta mediante
el uso de los cachés
– en Dash y NUMA también el acceso remoto es más
lento que el local
– el caching ayuda a lo anterior
– cache: si una palabra remota es tocada el bloque de
memoria alrededor de ella se envia al caché
– los futuros accesos son más rápidos
Diapo. No. 69
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Características software NUMA
• NUMA no cuenta con propiedad de caché a nivel
hardware.
• Es importante tomar en cuenta en que memorias
encuentran almacenadas las páginas.
• Algunas opciones son las ideas aportadas por:
– LaRowe y Ellis
– Cox y Flower
– Ramanathan y NI
Diapo. No. 70
Dr. Roberto Gómez Cárdenas
35
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
La propuesta de LaRowe y Ellis
• Cuando programa empieza, páginas pueden o no
ser manualemente colocadas en ciertos
procesadores.
• Cuando un CPU requiere acceso a una página que
no se encuentra asociada a su espacio de
direcciones:
– sistema operativo es informado y toma decisión.
– si la página es de solo lectura, la opción es duplicar la
página o asociar la página virtual en la memoria remota
lo que obliga a un acceso remoto para todas las
direcciones de dicha página
Diapo. No. 71
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
La propuesta de LaRowe y Ellis (cont)
– si la página es de lectura/escritura, la opción consiste en
mover la página al procesador que solicitó la página
• Consecuencias decisión:
– si se creo una copia local (replica o migración) y esta
no se usa demasiado, habrá un gasto considerable de
tiempo perdido por nada
– si no se realiza ninguna copia, la página se asocia de
una manera remota.
– resumiendo, sistema operativo tiene que ver si la página
será utilizada con frecuencia en el futuro, si la falla será
una falla en el desempeño.
Diapo. No. 72
Dr. Roberto Gómez Cárdenas
36
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Consecuencias de la propuesta de
LaRowe y Ellis
• Sin importar la decisión que tome, la página
asociada, de forma local o remota, y la instrucción
fallida se reestablece
• Las llamadas posteriores a esta página se hacen en
hardware, sin la intervención del software.
• Si no se toma otra decisión, una vez tomada una
mala decisión, no podra ser invertida.
Diapo. No. 73
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Algoritmos NUMA
• Para permitir la correción de errores y la adaptación
del sistema a los cambios en los patrones de
referencia, los sistemas NUMAS cuentan con un
proceso demonio, el digitalizador de páginas.
– de forma periodica el demonio reúne las estadísticas de
uso acerca de las referencias locales y remotas, que se
mantienen con ayuda del hardware.
– cada n ejecuciones el demonio evalúa las decisiones
anteriores para copíar páginas o asociarlas a memorias
remotas.
Diapo. No. 74
Dr. Roberto Gómez Cárdenas
37
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Algoritmos NUMA: congelando páginas
• Si estadísticas indican que una una página está en un
lugar incorrecto el demonio elimina la asociación de
la página para que siguiente referencia cause un falló
de página.
– lo cual permite que se tome una nueva decisión de
colocación.
– si una página se mueve con frecuencia en un corto
intervalo, el demonio puede marcar cada página como
congelada, lo que inhibe los movimientos posteriores hasta
que ocurre algún evento
Diapo. No. 75
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Algoritmos NUMA: estrategias propuestas
• Las estrategias difieren en
– algoritmo usado para invalidar las páginas.
– algoritmo usado para tomar decisiones de colocación
después de un fallo de página.
• Algoritmos de invalidación posibles:
– invalidar cualquier página para la que hayan más
referencias remotas que locales.
– en invalidar una página sólo si el contador de referencias
remotas ha sido mayor que el local durante las k-últimas
ejecuciones del demonio.
Diapo. No. 76
Dr. Roberto Gómez Cárdenas
38
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
• Algoritmos decisiones de ubicación
– cuando ocurre un fallo de página varios algoritmos son
posibles,
– algunos de los cuales siempre incluyen réplica/migración
y otros nunca incluyen réplica/migración.
– un algoritmo consiste en replicar o migrar a menos que la
página este congelada
– otros algoritmos toman en cuenta los patrones de uso
reciente, al igual que el hecho de que la página éste o no
en su máquina de origen.
• Se han comparado muchos algoritmos y se ha
concluido que no existe una política que sea la
mejor.
Diapo. No. 77
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Espectro máquinas memoria compartida
Controlado por MMU
Fuertemente acoplado
Multiprocesador con un bus
Multiprocesador con conmutador
Sequent
Firefly
Bloque
caché
Dash
Alewife
Bloque
caché
Acceso remoto en hardware
Ocultamiento controlado por el software
Controlado por el
sistema operativo
Máquina
NUMA
Cm*
Butterfly
Página
Controlado por el sistema de
tiempo de ejecución del lenguaje
DSM
basado en
páginas
DSM con
variables
compartidas
Ivy
Mirage
Página
Munin
Midway
Estructura
de datos
DSM
basado en
objetos
Linda
Orca
Objeto
Vagamente acoplado
Ocultamiento controlado por el hardware
Acceso remoto en software
Unidad de transferencia
Diapo. No. 78
Dr. Roberto Gómez Cárdenas
39
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Multiprocesadores con bus
• Compuestos de cachés a nivel hardware.
• Consistencia se mantiene husmeando el bus.
• Las máquinas de memoria compartida más
simples.
• Operan completamenten en hardware.
• Ejemplos: algunas Sequent o la estación
experimental DEC Firefly (cinco VAX en
un bus común).
Diapo. No. 79
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Multiprocesadore switcheados
• Tambien tiene un caché en hardware
• Usa directorios u otras estructuras de datos para
saber en que CPUs o unidades estan los
bloques.
• Algoritmos complejos son usados para
mantener consistencia.
– almacenados en microcódigo MMU
– cuentan casi como implementaciones en hardware
• Ejemplos: Dash de Stanford y Alewife del MIT
Diapo. No. 80
Dr. Roberto Gómez Cárdenas
40
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
El Alewife del MIT
Diapo. No. 81
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Máquinas NUMA
• Hibridos entre control a nivel hardware y
software.
• Cada CPU NUMA puede acceder cada
palabra del espacio de direcciones virtuales.
• El caché ( i.e ubicación y migración de
páginas ) es controlado por software (sistema
operativo) y no por hardware (MMUs).
• Ejemplos: Cm* y BBN Butterfly
Diapo. No. 82
Dr. Roberto Gómez Cárdenas
41
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
NUMA-Q de IBM
Diapo. No. 83
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
DSM con Paginas Distribuidas
• Cada CPU cuenta con su propia memoria y no
pueden referenciar memoria remota directamente.
• Cuando dirección CPU se encuentra en una página
que reside en una máquina remota:
– se notifica al sistema operativo
– sistema solicita dicha página con un mensaje
• Tanto ubicación como acceso son realizados a
nivel software.
• Ejemplos: IVY y Mirage
Diapo. No. 84
Dr. Roberto Gómez Cárdenas
42
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
DSM de variable compartidas
• Máquinas que comparten solo una parte de su espacio
de direcciones.
• Usuario determina que variables se van a compartir y
cuales no.
• Enfoque cambia:
– de pretender que existe una memoria en común
– a mantener consistente un conjunto replicado de estructuras
de datos distribuidas
– se enfrenta a actualizaciones, potencialmente de todas las
páginas que usan los datos compartidos
Diapo. No. 85
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
DSM con varibales compartidas
(cont)
• En algunos casos el hardware de paginación
detecta escrituras, lo cual ayuada a mantener la
consistencia.
• En otros casos el hardware de paginación no es
usado para el manejo de consistencia.
• Ejemplos: Sistemas Munin y Midway
Diapo. No. 86
Dr. Roberto Gómez Cárdenas
43
DSM: Distributed Shared Memory
Sistemas Distribuidos
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
DSM con objetos compartidos
• A diferencia de otros sistemas, aquí los programas
no solo pueden acceder los datos compartidos.
• Tienen que pasar por metodos protegidos, lo que
ayuda a mantener la consistencia del sistema.
• Todo es hecho en software, sin ningún
soporte tipo hardware.
• Ejemplos sistemas: Orca y
Linda.
Diapo. No. 87
Memoria Distribuida Compartida
Dr. Roberto Gómez C.
Comparación seis tipos de sistemas de memoria compartida
Punto
Tiene espacio de direciones
virtuales, compartido y lineal
Operaciones posibles
Encapsulado y métodos
Es posible el acceso remoto
en hardware
Es posible una memoria no
conectada
Quien convierte los accesos a
memoria remota en mensajes
Un bus
Con conmutador
Numa
Basado en Variables
Basado
páginas compartidas en objetos
Si
Si
Si
Si
No
L/E
No
Sí
L/E
No
Sí
L/E
No
Sí
L/E
No
No
L/E
No
No
Sí
Sí
Sí
No
No
MMU
MMU
No
General
Sí
No
No
MMU Sistema Sistema de Sistema de
operativo tiempo de tiempo de
ejecución ejecución
Medio de transferencia
Bus
Bus
Bus
Red
Red
Red
La migración de datos es rea- Hardware Hardware Software Software Software
Software
lizada mediante
Unidad de transferencia
Bloque
Bloque Página Página Variable
Objeto
compartida
Diapo. No. 88
Dr. Roberto Gómez Cárdenas
44