Memoria Compartida Distribuida

Anuncio
Agenda
0 Inicios de la DSM
0 DSM vs a Paso de Mensajes
0 Implementación de DSM
0 Aspectos de Diseño e Implementación
0 Modelo de Sincronización
0 Modelos de Consistencia
0 Opciones de Actualización de las réplicas
0 Granularidad
Taxonomía de Computadores
Paralelos y Distribuidos
Comp. Paralelos y
Distribuidos
Multiprocesadores
(Mem. Compartida)
Bus
Switched
Multicomputadores
(Mem. Privada)
Bus
Switched
Bus: es una sola red, cable o cualquier otro medio que
conecta todas las máquinas.
Switch: puede haber conexiones de máquina a máquina
(en distintas organizaciones).
Taxonomía de Computadores
Paralelos y Distribuidos
Multiprocesadores
0 Tienen memoria
compartida
0 Son sistemas altamente
acoplados: cuando se
envía un mensaje el
retardo es corto y el
throughput es alto.
Comunes en sistemas
paralelos.
Multicomputadores
0 Cada procesador tiene su
memoria privada.
0 Sistemas débilmente
acoplados: el retardo es
notable y el throughput es
bajo. Son más comunes
en sistemas distribuidos.
Multiprocesadores
 Soporte de Software:
 Para comunicación: un proceso escribe y los otros
leen.
 Para la sincronización: se usan regiones críticas y
existen herramientas que ofrecen la exclusión
mutua (semáforos, contadores, monitores)
 La comunicación y sincronización son problemas
que han sido ampliamente estudiados.
 Los programas son más cortos y fáciles de
comprender que los programas escritos con pase
de mensajes.
Multiprocesadores
 Soporte de Hardware:
 Es difícil diseñar una máquina donde
varios procesadores utilicen la misma
memoria. Si la arquitectura está basada
en bus, no es escalable. Con switches se
obtiene una mayor escalabilidad pero
son costosos, lentos, complejos.
Multicomputadores
 Soporte de Software:
 La comunicación se hace a través del pase de
mensajes, lo cuál trae complicaciones adicionales:
pérdida de mensajes, pérdida de orden, etc.
 Se han propuesto algunas soluciones para facilitar
la programación: RPC, RMI, etc.
 Soporte de Hardware:
 Fácil de construir
 Son escalables
Sistemas con Memoria
Compartida Distribuida
(DSM)
Toma las ventajas de los enfoques anteriores:
software de los sistemas de memoria compartida
y el hardware de los sistemas de memoria
distribuida
Colección de estaciones de trabajo conectadas por
una red, compartiendo un único espacio de
memoria virtual
La ubicación de los datos, su movimiento, etc., lo
maneja el sistema de memoria compartida
distribuida.
Implementado sobre pase de mensajes
Sistemas con Memoria
Compartida Distribuida
(DSM)
[Li, 1986] y [Li and Hudak, 1989] fueron los
primeros en proponer el paradigma de Memoria
Compartida Distribuida.
 Colección de estaciones de trabajo conectadas por una LAN
que comparten un solo espacio de direcciones paginado.
 Una referencia a una página causa una falla de página que
atrapa el SOP. Este último envía un mensaje a la máquina
remota, para solicitar la página.
 La comunicación y sincronización se realiza a través de la
memoria, la comunicación es transparente para los
procesos.
Sistemas con Memoria
Compartida Distribuida
(DSM)
Es un sistema fácil de programar y fácil de
construir pero el desempeño es pobre.
Durante muchos años los trabajos de
investigación se han enfocado en solucionar este
problema. Las soluciones buscan principalmente
reducir el tráfico de red.
Compartir variables u objetos en lugar de páginas
Uso de caches (surge el problema de la consistencia)
Concepto
Básico
Distributed Shared Memory
(exists only virtually)
write(address, data);
Data = read(address);
CPU 1
CPU 1
:
address
Memory
:
CPU 1
Memory
…
CPU n
CPU n
:
Memory
CPU n
MMU
Page Mgr
MMU
Page Mgr
MMU
Page Mgr
Node 0
Node 1
Node 2
Communication Network
A cache line or a page is transferred
and cached in
CSS434 to
DSM
the requested computer.
15
Aproximaciones a la
Implementación
0 Hardware: Hardware especializado para proveer a los
procesadores una visión consistente de la memoria
compartida. Requieren de sistemas de conexión de alta
velocidad. Ejemplo: El prototipo del multiprocesador Dash
tiene 64 nodos conectados mediante una arquitectura
NUMA.
0 Memoria Virtual Paginada: sistemas como Ivy, Munin,
Mirage, Clouds, Choices y Mether implementan DSM
como una región de memoria virtual que ocupa el mismo
espacio de direcciones en el espacio de direcciones de cada
proceso participante. Esta implementación sólo es factible
sobre una colección de computadores homogéneos con
formatos de datos y paginación comunes.
Aproximaciones a la
Implementación
0 Middleware: algunos lenguajes del tipo de ORCA o
sistemas como Linda, JavaSpaces o Tspaces
proporcionan DSM sin necesidad de soporte de
hardware o de paginación. Cuando un proceso accede
a un dato compartido, realiza una llamada que es
interceptada por un proceso en un nivel más bajo, el
cual realiza el acceso local o una llamada remota
según se necesite. No está pensado para utilizar
código existente de memoria compartida. No se
comparten posiciones de memoria sino abstracciones
de mayor nivel como objetos.
Aproximaciones a la
Implementación
0 Existen kernels como Chorus o Mach que
proporcionan soporte nativo para DSM. Hoy en día
existen implementaciones de DSM basadas en páginas
(implementados a nivel de usuario) que se apoyan en
el soporte del SOP para fallos de página.
Proceso Escritor
#include "world.h"
struct shared { int a,b; };
METHER
Program Writer:
main()
{
int x;
struct shared *p;
methersetup(); /* Initialize the Mether run-time */
p = (struct shared *)METHERBASE;
/* overlay structure on METHER segment */
p->a = p->b = 0;
/* initialize fields to zero */
while(TRUE) {
/* continuously update structure fields */
p –>a = p –>a + 1;
p –>b = p –>b - 1;
}
}
CSS434 DSM
19
Proceso Lector
Program Reader
main()
{
struct shared *p;
methersetup();
p = (struct shared *)METHERBASE;
while(TRUE) { /* read the fields once every second */
printf("a = %d, b = %d\n", p –>a, p –>b);
sleep(1);
}
}
CSS434 DSM
20
Estructura
0 Orientada a Bytes: la DSM se utiliza como la
memoria virtual ordinaria, es decir como una cadena
de bytes contiguos. Permiten que las aplicaciones
almacenen cualquier tipo de datos sobre la memoria
compartida. Los objetos compartidos son posiciones
de memoria direccionables directamente. Las únicas
operaciones sobre los objetos son lee y escribe
0 Orientado a Objetos: la memoria compartida se
estructura como una colección de objetos. Se proveen
métodos o funciones sobre los objetos que permiten
leer/modificar sus variables miembro (nunca se
acceden directamente). La semántica de los objetos se
usa para forzar la consistencia.
Estructura
0 Datos Inmutables: la DSM se muestra como una
colección de datos inmutables donde los procesos
pueden leer, añadir o eliminar. Ejemplos: Agora,
Linda, JavaSpaces y TSpaces. En Linda, las tuplas se
reemplazan, no se modifican.
Modelo de Sincronización
0 Para poder utilizar DSM se debe construir un servicio
de sincronización distribuida que incluya
construcciones como bloqueos o semáforos.
0 La sincronización se realiza a nivel de la aplicación.
0 La implementación de DSM debe incluir los
mecanismos de sincronización como un componente
integrado.
Modelos de Consistencia de la
Memoria
0 Un modelo de consistencia de memoria [Mosberger
1993] especifica las garantías de consistencia que un
sistema otorga sobre los valores que los procesos leen
de los objetos, dado que en realidad acceden a una
réplica de cada objeto y que múltiples procesos
pueden actualizar los objetos.
0 Los requisitos de consistencia pueden ser muy
variados y dependen de la aplicación.
Modelos de Consistencia de la
Memoria
0 La principal interrogante que se plantea al
caracterizar un modelo de consistencia de memoria
es: cuándo se realiza un acceso de lectura sobre una
posición de memoria, cuáles actualizaciones a la
misma posición deben devolverse ?
0 Cualquier escritura realizada antes.
0 El valor más reciente (el significado más reciente en SD
pudiera no estar claro, no es posible determinar siempre
de forma exacta si un evento ocurrió antes que otro. )
0 Etc
Modelos de Consistencia de la
Memoria
0 Los modelos que estudiaremos son:
0 Consistencia estricta
0 Consistencia secuencial
0 Consistencia causal
0 Consistencia relajada
Consistencia Estricta
Cualquier lectura a la localidad de memoria x retorna el
valor almacenado por la última operación de escritura
(antes de la lectura).
0 Supone la existencia de un tiempo global. Determinar
cuál fue la escritura más reciente no siempre es posible.
0 En un solo procesador la consistencia estricta es lo
esperado.
Consistencia Estricta
0 Si hay un cambio en una zona de memoria, todas
las lecturas observarán el nuevo valor sin
importar cuán pronto se está haciendo la lectura
(con respecto a la escritura) o dónde están
localizados los procesos que realizan las
operaciones.
Consistencia Estricta
0 En un sistema distribuido es razonable exigir consistencia
estricta??
Notación:
P1, P2 : procesos
W(x)a : A la variable x se le asigna el valor a
R(y)b : Se lee b en la variable y
Se supone que el valor inicial de todas las variables es 0.
P1: W(x)1
P2:
W(x)2
tiempo
Consistencia Estricta
P1: W(x)1
P2:
R(x)0 R(x)1
T1: petición de escritura desde A
T2: Un proceso en B lee valor de x
T3: llega petición de escritura de A
T4: Un proceso en B lee el valor de X
P1: W(x)1
P1: W(x)1
P2:
P2:
P3:
W(x)2
R(x)2
W(x)2
P3:
La consistencia estricta es prácticamente
imposible de implementar en un sistema
distribuido.
R(x)1
Consistencia Secuencial
Cuando se ejecutan procesos en paralelo sobre
diferentes máquinas, cualquier mezcla de
ejecución es un resultado aceptable, no obstante
todos los procesos deben ver la misma
secuencia de referencias a memoria. Se respeta
el orden de los programas.
Write(x)
Read(x)
Read(x)
P1: W(x)1
P1: W(x)1
P2:
P2:
R(x)0 R(x)1
R(x)1 R(x)1
Los dos resultados
son válidos
desde el punto de
vista de consistencia
secuencial
Sequential Consistency
P3
P2
P1
P4
W2(x, a)
W3(x, b)
bR1(x)
bR4(x)
aR4(x)
aR1(x)
33
P1: W(x)a
P1: W(x)a
P2:
P2:
P3:
P4:
W(x)b
R(x)a
P3:
R(x)b R(x)a
P4:
R(x)b
W(x)b
R(x)b
R(x)a
R(x)a R(x)b
Consistencia Secuencial
a=1
print(b,c)
(a)
a=1
print (b,c)
b=1
print (a,c)
c=1
print(a,b)
b=1
print(a,c)
c=1
print(a,b)
(c)
(b)
a=1
b=1
print (a,c)
print (b,c)
c=1
print(a,b)
Las operaciones son
atómicas
000000 y 001001
son resultados
Inválidos no respetan el orden
del programa
b=1
c=1
print (a,b)
print (a,c)
a=1
print(b,c)
Prints: 001011 Prints: 101011 Prints: 011111
Los tres resultados
son válidos y las
aplicaciones deben funcionar
bien en presencia de cualquiera
de ellos
Consistencia Secuencial
0 Un sistema de consistencia secuencial se puede
implementar utilizando un único servidor que
administra los datos compartidos. Todos los procesos
envían sus operaciones de lectura y escritura al
servidor que las ordena en forma global.
Consistencia Causal
(Hutto and Ahamad, 1990)
0 Si un evento B es causado o influenciado por
un evento A, la causalidad requiere que todo el
mundo vea primero el evento A y luego el B.
0 Cuando encontramos una lectura seguida por
una escritura, los dos eventos están
potencialmente relacionados en forma causal.
0 Un read está relacionado causalmente con la
escritura que provee el dato que se ha leído.
P1 escribe X
P2 lee X escribe Y (Y puede depender del valor leído de X)
Consistencia Causal
0 Si dos procesos escriben espontáneamente y
simultáneamente una variable, estos
accesos no están relacionados causalmente.
0 Las operaciones que no están relacionadas
causalmente se dice que son concurrentes
Consistencia Causal
Las escrituras relacionadas causalmente deben ser
vistas por todos los procesos en el mismo orden.
Las escrituras concurrentes pueden ser vistas en
un orden diferente, en diferentes máquinas.
P1: W(x)1
concurrentes
W(x)3
P2:
R(x)1 W(x)2
P3:
R(x)1
R(x)3 R(x)2
P4:
R(x)1
R(x)2 R(x)3
Hay consistencia
causal pero no
consistencia
secuencial o consistencia
estricta
Consistencia Causal
P1: W(x)1
P2:
R(x)1 W(x)2
P3:
R(x)2 R(x)1
P4:
R(x)1 R(x)2
Violación de la Consistencia
Causal
P1: W(x)1
P2:
Una sucesión de eventos correcta
con Consistencia Causal
W(x)2
P3:
R(x)2 R(x)1
P4:
R(x)1 R(x)2
Consistencia Causal
0 Implementación: grafo de dependencia
para determinar cuáles operaciones son
dependientes de otras y cuáles son
concurrentes.
0 Un ente centralizado.
Consistencia Relajada
(Gharachorloo et al., 1990)
0 Se proveen dos operaciones:
0 Acquire: la memoria se asegura que todas las
copias locales de las variables protegidas se
actualizan con las variables remotas.
0 Release: con esta operación se propagan los
cambios realizados a las variables protegidas al
resto de las máquinas.
0 El programador es el responsable de colocar
estas operaciones correctamente en su
programa
Consistencia Relajada
0 Realizar un acquire no garantiza que los cambios
realizados sean propagados al resto de las
máquinas en forma inmediata.
0 De forma similar, el realizar un release no
garantiza que se importen cambios realizados
por otras máquinas.
P1: Acq(L) W(x)1 W(x)2 Rel(L)
P2:
P3:
Acq(L) R(x)2 Rel(L)
R(x)1
Consistencia Relajada
Posible implementación:
- Existe un administrador de sincronización.
- En un acquire se solicita un acceso sobre un lock al
manager. Si no hay competencia el manager lo
otorga.
- Al llegar al release se propagan los cambios a otras
máquinas . Al recibirse el Ack de todas las máquinas
se informa al manager de la liberación del lock
Modelos de Consistencia
Modelos de Consistencia
Descripción
Estricta
Todos los accesos compartidos se observan en el
orden en el que se realizaron. Imposible de
implementar en DSM
Secuencial
Todos los procesos ven todos los accesos en el
mismo orden. Popular entre los programadores y
ampliamente usado. Desempeño pobre.
Causal
Todos los procesos ven los accesos compartidos,
relacionados causalmente, en el mismo orden
Relajada
Los datos compartidos están consistentes cuando
se sale de la región crítica. Estos modelos pueden
ser más eficientes pero requieren más esfuerzo
del programador
Políticas de Escritura
Se debe asegurar que un procesador no lea un dato
invalido después de que se ha realizado una operación
de escritura. Existen dos opciones:
Actualización
Políticas de Escritura
0 Actualización (write-through):
0 Las escrituras de un proceso se realizan en forma
local y se envían a todos los procesos (gestores de
réplica) que posean una copia del dato.
0 Los procesos leen copias locales de los datos sin
necesidad de comunicación.
0 Permite múltiples lectores y múltiples escritores.
0 Se requieren broadcast o multidifusiones
ordenadas (en algunos casos se utiliza un ente
centralizado que garantiza el orden). De esta forma
todos los procesos ven todas las actualizaciones en
el mismo orden en el que se realizan (consistencia
secuencial)
Políticas de Escritura
0 Invalidación (Write-Invalidate):
0 Múltiples lectores/un solo escritor.
0 Cuando un proceso intenta escribir un dato, se
envía un mensaje a quienes tienen copias para
invalidarlas y se esperan los Acks, antes de que la
escritura tenga lugar.
0 Cualquier proceso que intente leer el dato tiene que
esperar a que el escritor termine.
0 Las actualizaciones se propagan únicamente
cuando se leen los datos y, además, se pueden
realizar varias actualizaciones consecutivas sin
necesidad de realizar ninguna comunicación.
Granularidad
0 Únicamente se comparten ciertas partes de los
datos y durante ciertos periodos durante la
ejecución.
0 Sería muy ineficiente transmitir todo el
contenido de la DSM. Cuál sería la unidad
adecuada para compartir datos?
Páginas: más eficiente.Cuál es el tamaño de página más adecuado: 1k, 8k,
….
Páginas Pequeñas: más comunicación, un mayor
número de unidades a ser administrada.
Páginas Grandes: False Sharing
Descargar