1 / 26

Memória Compatilhada Distribuída

Bruno M. Carvalho Sala: 3F2 Horário: 35M34. Memória Compatilhada Distribuída. Introdução. Como compartilhar informações entre processadores? Mensagens em multicomputadores Memória compartilhada em multiprocessadores

colin
Download Presentation

Memória Compatilhada Distribuída

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bruno M. Carvalho Sala: 3F2 Horário: 35M34 Memória Compatilhada Distribuída

  2. 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

  3. 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

  4. 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)

  5. Memória no Chip • Memória pode estar contida no chip com barramento conectando processadores a memória • Escalabilidade muito baixa • Complicado e caro

  6. 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)

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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)

  16. 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

  17. 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

  18. 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)

  19. 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)

  20. 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

  21. 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

  22. 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

  23. 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: • Acessos a variáveis de sincronização são sequencialmente consistentes • Nenhum acesso a uma variável de sincronização pode ser feito até que todas as escritas anteriores sejam completadas em todos os locais • Nenhum acesso a dados (escrita ou leitura) pode ser feito até que acessos prévios a variáveis de sincronização sejam finalizados

  24. Consistência Fraca • Estas características significam que: • Todos os processos veêm as variáveis de sincronização na mesma ordem • O acesso a uma variável de sincronização força a finalização de todas as escritas para todas as memórias • 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

  25. 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)

  26. 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: • 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

More Related