Memória Compatilhada Distribuída

Propaganda
Memória Compatilhada
Distribuída
Bruno M. Carvalho
Sala: 3F2
Horário: 35M34
Introdução
• Como compartilhar informações entre processadores?
– Mensagens em multicomputadores
– Memória compartilhada em multiprocessadores
• Comunicação através de mensagens cria novas
preocupações, como mensagens perdidas, bufferização,
bloqueios, etc.
• Multicomputadores são fáceis de contruir mas difíceis de
programar
• Multiprocessadores são difíceis de construir mas fáceis de
programar
Memória Compartilhada
• O uso de memória compartilhada distribuída (DSM)
simula um espaço de endereçamento compartilhado por
multicomputadores
• Referências a páginas locais são feitas pelo hardware. Page
faults de páginas remotas são atendidos pelo SO como se
fossem um acesso ao disco local
• Sistema fácil de contruir e programar, mas sua
performance não é adequada em aplicações onde se tenha
muitas page faults
Memória Compartilhada
• Pode-se compartilhar somente uma parte do
espaço de endereçamento
• Replicação de variáveis compartilhadas em várias
máquinas. Leituras locais e escritas através de
atualização de multicópias
• Compartilhamento de objetos (dados mais
métodos)
Memória no Chip
• Memória pode estar contida no chip com
barramento conectando processadores a
memória
• Escalabilidade muito baixa
• Complicado e caro
Multiprocessadores de
Barramento
• Barramentos ligam CPUs a memória e outros
dispositivos como E/S
• Pode-se ligar várias CPUs ao mesmo bus
• Para melhorar performance, usa-se caches nas
CPUs
• Caches write-trough snoopy (bisbilhoteiras)
“escutam” barramento e sabem quando algum
conteúdo de sua cache fica inválido (escrita por
outra CPU)
Multiprocessadores de
Barramento
• Conteúdo de uma posição de uma cache que foi
escrita por outra CPU pode ser atualizada ou
marcada como inválida
• Protocolo write-once dá possessão temporária de
posições da memória
• Entradas podem ser inválidas, limpas ou sujas
• Posições acessadas para leitura podem ser
armazenadas em várias caches ao mesmo tempo
• Em escritas, uma cache que quer escrever uma
posição que outra está escrevento toma controle
Multiprocessadores de
Barramento
• Entrada na nova cache é marcada como suja
(dirty) e na antiga como inválida
• Atualização na memória é feita quando posição da
cache é retirada da mesma
• Este protocolo tem três carcterísticas importantes:
– A consistência é atingida usando-se caches snoopy
– O protocolo pode ser construído na unidade de
gerenciamento de memória
– O algortimo inteiro é executado em menos que um ciclo
de memória
Multiprocessadores em Anel
• Espaço de endereçamento único é dividido em partes privada e
compartilhada, que é comum a todas máquinas (Memnet)
• A interface do anel, a MMU (unidade de gerenciamento de
memória), a cache e parte da memória são integradas no
dispositivo Memnet
• Não possui memória global centralizada, e cada bloco de 32
bytes no espaço compartilhado tem uma máquina home na
qual memória está sempre reservada no campo memória home
• Um bloco pode ser cached em outra máquina que não a home
• Cada entrada na tabela do Memnet tem bits que indicando o
estado do bloco da cache
Multiprocessadores de Anel
• Um bloco read-only pode estar presente em várias máquinas
read-write só pode estar presente em uma máquina
• Um bloco não precisa estar na sua máquina home
• O dispositivo Memnet em cada máquina tem uma tabela que
contém uma entrada para cada bloco, indexada pelo número dos
blocos
• Quando uma máquina precisa ler um bloco que não está
presente localmente, uma mensagem é enviada ao anel (aapós
adquirir o token) solicitando-o, e quando a mensagem retorna, o
bloco está nela
• No caso de escrita, blocos em outrs máquinas precisam ser
invalidados primeiro
Multiprocessadores Switched
• Sistemas com barramento ou anel não tem boa escalabilidade
• Pode-se melhorar escalabilidade diminuindo a comunicação
necessária (cache) ou aumentando a capacidade de
comunicação
• Uma alternativa e se contruir um sistema hierárquico, com
algumas CPUs em um barramento (cluster), conectá-los com
barramentos intercluster, e criar outros níveis de hierarquia se
necessário
• Um exemplo é a máquina Dash (Stanford), onde cada cluster
tem um diretório que controla quais clusters tem cópias dos
seus blocos
Multiprocessadores Switched
• Dash tinha 16 clusters com 4 CPUs cada com 256MB de
memória global (16 x 16)
• Caching é feita em dois níveis, e cada cache de segundo
nível monitora o barramento, e cada entrada da cache pode
ser uncached, clean ou dirty
• Protocolos são baseados em possessão e invalidação, pois
em cada instante cada bloco de cache tem um único dono
• Acessos a blocos são feitos de acordo com a hierarquia
• Um simples acesso a memória pode requerer que várias
mensagens sejam enviadas
Multiprocessadores NUMA
• Significa Acesso de Memória Não-Uniforme e não tenta
esconder o fato de que acesso a memórias remotas são mais
lentos do que a memória local, isto é caching não é usado
• Código e dados são automaticamente movidos para onde são
necessários. Performance depende de onde a página está
localizada na memória
• Page faults geram uma decisão pelo SO, se deve replicar a
página sem mudar a página original (leitura), ou se devem
mapeá-las como de acesso remoto ou transferi-las (escrita)
• Decisão vai afetar performance enormemente
Multiprocessadores NUMA
• Caso decisão não tenha sido a melhor, SO pode corrigi-la
usando scanners de páginas, que coleta estatísticas sobre uso
das páginas e número de page-faults
• Scanner pode desmapear páginas, gerando uma nova decisão
quando for acessada novamente, ou congelá-las, bloquenado
sua mudança
• Scanners podem usar diferentes estratégias para relocação de
páginas, como invalidar páginas que tiveram mais acessos
remotos que locais
Comparação de Sistemas de
Memória Compartilhada
• Sistemas de memória compartilhada vão de sistemas que
mantém consistência:
– inteiramente em hardware: multiprocessador com
barramento único(sequent, firefly) ou comutados (dash,
alewife)
– gerenciada pelo SO: máquina NUMA (cm*, butterfly) ou
DSM baseada em páginas (ivy, mirage)
– gerenciada pelo sistema de execução da linguagem: DSM
de variáveis compartilhadas (munin, midway) ou DSM
baseada em objetos (linda, orca)
Modelos de Consistência
• Manter consistência perfeita é muito difícil, logo alguns
DSMs aceitam consistências mais relaxadas dos dados na
memória
• Um modelo de consistência é um contrato entre o software e
a memória, que diz que se o software obedecer certas regras
a memória funcionará de acordo com o prometido
• Modelos de consistência com maiores restrições são mais
fáceis de programar mas são menos eficientes do que os
modelos de consistência com menores restrições
Consistência Estrita
• Define que qualquer leitura de uma posição da memória x
retorna o valor gravado pela mais recente escrita
• Comum em sistemas uniprocessados
• Quase impossível de se obter em um DSM, já que enquanto
atualização de uma variável esteja sendo enviada pelo
barramento ou rede, outro processador pode efetuar uma
leitura
• Exemplos: correto (esquerda) incorreto (direita)
• W(x)1
•
W(x)1
R(x)1
R(x)0 R(x)1
Consistência Sequencial
• O resultado da execução é o mesmo como se as operações
de todos os processadores foram executadas em alguma
ordem sequencial e é igual em todos os processadores
• Um método para expressar consistência sequencial é o
seguinte: sequências de leituras e escritas do processo i são
designadas Hi e o conjunto de todas elas é H
• Strings de H são misturados em S onde cada operação
aperece somente uma vez em S (ordem das operações caso
memória fosse centralizada)
Consistência Sequencial
• Todos as sequências legais de S devem seguir as regras:
– Ordem dos programas deve ser mantida (se A aparece
antes de B em algum Hi, então A aparece antes de B em
S)
– Coerência da memória deve ser respeitada (leitura de x
deve retornar valor mais recentemente escrito em x)
Consistência Causal
• Faz distinção entre eventos que são causamente relacionados
e os que não são
• Escritas que são causamente relaciondas devem ser vistas
por todos os processos na mesma ordem. Escritas
concorrentes podem ser vistas em ordens diferentes em
máquinas diferentes
• Implementação de consistência causal requer informação
sobre quais processos viram quais escritas
Consistência Causal
• Exemplo: 1- W(x)b e W(x)c são concorrentes
• Exemplo 2: sequência inválida (a) e sequência válida
Consistência PRAM
• Escritas feitas por um so processo são recebidas pelos outros
processos na ordem em que ocorreram, mas escritas de
processos diferentes podem ser vistas em ordens diferentes por
processos diferentes
• Nome significa Pipelined RAM, porque escritas por um
processo podem ser pipelined
• Fácil de se implementar, já que a única garantia de ordenação é
em relação a escritas de um mesmo processo
Consistência Fraca
• Nem todas aplicações precisam ver todas as escritas, mesmo
que desordenadas. Ex: em um processo em um loop dentro
de uma região crítica, escritas são propagadas e nunca são
usadas
• Utiliza uma operação para a sincronização da memória
• A consistência fraca tem as seguintes características:
1. Acessos a variáveis de sincronização são sequencialmente
consistentes
2. Nenhum acesso a uma variável de sincronização pode ser feito até
que todas as escritas anteriores sejam completadas em todos os
locais
3. Nenhum acesso a dados (escrita ou leitura) pode ser feito até que
acessos prévios a variáveis de sincronização sejam finalizados
Consistência Fraca
•
•
Estas características significam que:
1.
Todos os processos veêm as variáveis de sincronização na
mesma ordem
2.
O acesso a uma variável de sincronização força a finalização de
todas as escritas para todas as memórias
3.
Quando uma variável é acessada para leitura ou escrita, todas as
sincronizações prévias foram finalizadas
Programador ou SO precisa bloquear e liberar dados
Consistência de Liberação
• Na consistência fraca, quando uma variável de sincronização
é acessada, a memória não sabe se um processo está para
acessar a variável ou se acabou de escrevê-la
• A consistência de liberação divide sincronização nas fases
de aquisição e liberação
• Aquisição informa ao sistema de memória que uma região
crítica está para ser iniciada
• Liberação informa que uma região crítica foi finalizada
• Podem ser usadas com barreiras (barriers)
Consistência de Liberação
•
•
Variáveis compartilhadas que são mantidas consistentes
com as variáveis de sincronização são chamadas de
protegidas
Uma memória compartilhada distribuída tem consistência
de liberação se:
1.
2.
3.
Antes de um acesso comum a uma variável compartilhada é
realizado, todos as aquisições prévias feitas pelo processo devem
ter sido completadas com sucesso
Antes de uma liberação ser permitida, todas as leituras e escritas
prévias feitas pelo processo devem ter sido completadas
Os acessos a aquisições e liberações devem ter consistência
PRAM
Download