Memoria Compartida Distribuida - sophia.javeriana.edu.comcuriel/Memoria Compartida... · reducir el...

Post on 19-Sep-2018

224 views 0 download

Transcript of Memoria Compartida Distribuida - sophia.javeriana.edu.comcuriel/Memoria Compartida... · reducir el...

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