memoria compartida distribuida - sophia.javeriana.edu.comcuriel/memoria compartida... · reducir el...
Post on 19-Sep-2018
228 Views
Preview:
TRANSCRIPT
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)
Switched Switched Bus
Multicomputadores (Mem. Privada)
Bus
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)
CSS434 DSM 15
Concepto Básico
Communication Network
CPU 1
CPU n
MMU Page Mgr
: Memory
Node 0
CPU 1
CPU n
MMU Page Mgr
: Memory
Node 1
CPU 1
CPU n
MMU Page Mgr
: Memory
Node 2
…
Distributed Shared Memory (exists only virtually)
Data = read(address); write(address, data);
address
A cache line or a page is transferred to and cached in the requested computer.
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.
CSS434 DSM 19
Proceso Escritor #include "world.h"
struct shared { int a,b; };
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;
}
}
METHER
CSS434 DSM 20
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);
}
}
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
0La 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
0Los modelos que estudiaremos son:
0Consistencia estricta
0Consistencia secuencial
0Consistencia causal
0Consistencia 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
P3: R(x)2
P2: W(x)2
P1: W(x)1
P3: R(x)1
P2: W(x)2
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
La consistencia estricta es prácticamente imposible de implementar en un sistema distribuido.
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.
P1: W(x)1
P2: R(x)0 R(x)1
P1: W(x)1
P2: R(x)1 R(x)1
Write(x) Read(x) Read(x)
Los dos resultados son válidos desde el punto de vista de consistencia secuencial
33
Sequential Consistency
P1 P2 P3
W2(x, a)
bR1(x)
aR1(x)
P4
bR4(x)
W3(x, b)
aR4(x)
P1: W(x)a
P3: R(x)b R(x)a
P2: W(x)b
P4: R(x)b R(x)a
P1: W(x)a
P3: R(x)b R(x)a
P2: W(x)b
P4: R(x)a R(x)b
Consistencia Secuencial
a=1 print(b,c) (a)
c=1 print(a,b) (c)
b=1 print(a,c) (b)
a = 1 print (b,c) b = 1 print (a,c) c = 1 print(a,b)
Prints: 001011
b = 1 c = 1 print (a,b) print (a,c) a = 1 print(b,c)
a = 1 b = 1 print (a,c) print (b,c) c = 1 print(a,b)
Prints: 101011 Prints: 011111
000000 y 001001 son resultados Inválidos no respetan el orden del programa
Los tres resultados son válidos y las aplicaciones deben funcionar bien en presencia de cualquiera de ellos
Las operaciones son atómicas
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.
0Cuando encontramos una lectura seguida por una escritura, los dos eventos están potencialmente relacionados en forma causal.
0Un 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
0Si 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 W(x)3
P3: R(x)1 R(x)3 R(x)2
P2: R(x)1 W(x)2
P4: R(x)1 R(x)2 R(x)3
Hay consistencia causal pero no consistencia secuencial o consistencia estricta
concurrentes
Consistencia Causal
P1: W(x)1
P3: R(x)2 R(x)1
P2: R(x)1 W(x)2
P4: R(x)1 R(x)2
Violación de la Consistencia Causal
P1: W(x)1
P3: R(x)2 R(x)1
P2: W(x)2
P4: R(x)1 R(x)2
Una sucesión de eventos correcta con Consistencia Causal
Consistencia Causal
0Implementación: grafo de dependencia para determinar cuáles operaciones son dependientes de otras y cuáles son concurrentes.
0Un 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.
0El programador es el responsable de colocar estas operaciones correctamente en su programa
Consistencia Relajada 0Realizar un acquire no garantiza que los cambios
realizados sean propagados al resto de las máquinas en forma inmediata.
0De 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)
P3: R(x)1
P2: Acq(L) R(x)2 Rel(L)
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 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
Mo
del
os
de
Co
nsi
sten
cia
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
top related