Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que...

22
Coerência de Cache – Parte 2 MO801/MC972

Transcript of Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que...

Page 1: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

Coerência de Cache – Parte 2

MO801/MC972

Page 2: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

Visão Geral

• Caches são essenciais

• Como garantir que os dados presentes na cache estão coerentes?

• O que é coerência?

• Mesmos mecanismos disponíveis em sistemas multiprocessados– Não é um problema novo

Page 3: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

Modelo Genérico

Processador1

Cache

Memória

Processador2

Cache

Processador3

Cache

Processador4

Cache

Page 4: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

MSI

• Modified– O dado foi modificado na cache e está inconsistente

com a memória. O bloco da cache é responsável por atualizar a memória

• Shared– O bloco não foi modificado e existe em pelo menos

uma cache. A cache pode removê-lo sem ter que escrever na memória

• Invalid– O bloco está inválido e deve ser buscado na memória

ou em outra cache para ser acessado

Page 5: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

Exemplo – MSI

Processador1

Cache

Memória

Processador2

Cache

Processador3

Cache

Processador4

Cache

P1 lê M[1000]P1 escreve M[1000]P2 lê M[1000]P1 escreve M[1000]P3 lê M[1000]P4 escreve M[1000]P2 lê M[1000]

M[1000]

Page 6: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

Exemplo – MSI

Processador1

Cache

Memória

Processador2

Cache

Processador3

Cache

Processador4

Cache

P1 lê M[1000]P1 escreve M[1000]P2 lê M[1000]P1 escreve M[1000]P3 lê M[1000]P4 escreve M[1000]P2 lê M[1000]

M[1000] - Modified

Page 7: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

Exemplo – MSI

Processador1

Cache

Memória

Processador2

Cache

Processador3

Cache

Processador4

Cache

P1 lê M[1000]P1 escreve M[1000]P2 lê M[1000]P1 escreve M[1000]P3 lê M[1000]P4 escreve M[1000]P2 lê M[1000]

M[1000] – Shared M[1000] – Shared

Page 8: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

Exemplo – MSI

Processador1

Cache

Memória

Processador2

Cache

Processador3

Cache

Processador4

Cache

P1 lê M[1000]P1 escreve M[1000]P2 lê M[1000]P1 escreve M[1000]P3 lê M[1000]P4 escreve M[1000]P2 lê M[1000]

M[1000]M[1000] - Modified M[1000] – Invalid

Page 9: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

Exemplo – MSI

Processador1

Cache

Memória

Processador2

Cache

Processador3

Cache

Processador4

Cache

P1 lê M[1000]P1 escreve M[1000]P2 lê M[1000]P1 escreve M[1000]P3 lê M[1000]P4 escreve M[1000]P2 lê M[1000]

M[1000]M[1000] – Shared M[1000] – Shared

Page 10: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

Exemplo – MSI

Processador1

Cache

Memória

Processador2

Cache

Processador3

Cache

Processador4

Cache

P1 lê M[1000]P1 escreve M[1000]P2 lê M[1000]P1 escreve M[1000]P3 lê M[1000]P4 escreve M[1000]P2 lê M[1000]

M[1000] - Invalid M[1000] - ModifiedM[1000] - Invalid

Page 11: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

Exemplo – MSI

Processador1

Cache

Memória

Processador2

Cache

Processador3

Cache

Processador4

Cache

P1 lê M[1000]P1 escreve M[1000]P2 lê M[1000]P1 escreve M[1000]P3 lê M[1000]P4 escreve M[1000]P2 lê M[1000]

M[1000] - SharedM[1000] - Shared

Page 12: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

Exemplo – MSI

Processador1

Cache

Memória

Processador2

Cache

Processador3

Cache

Processador4

Cache

P1 lê M[1000]P1 escreve M[1000]P2 lê M[1000]P1 escreve M[1000]P3 lê M[1000]P4 escreve M[1000]P2 lê M[1000]

M[1000]

Page 13: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

Escalabilidade

• Quandos processadores?

• E para muitos processadores?– Mecanismo de dicionário

Page 14: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

MSI

• Modified– O dado foi modificado na cache e está inconsistente

com a memória. O bloco da cache é responsável por atualizar a memória

• Shared– O bloco não foi modificado e existe em pelo menos

uma cache. A cache pode removê-lo sem ter que escrever na memória

• Invalid– O bloco está inválido e deve ser buscado na memória

ou em outra cache para ser acessado

Page 15: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

MSI

Page 16: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

MOSI

• Modified– O dado foi modificado na cache e está inconsistente com a

memória. O bloco da cache é responsável por atualizar a memória

• Owned– A cache possui o dado e deve servi-lo para outras caches

• Shared– O bloco não foi modificado e existe em pelo menos uma cache.

A cache pode removê-lo sem ter que escrever na memória

• Invalid– O bloco está inválido e deve ser buscado na memória ou em

outra cache para ser acessado

Page 17: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

MOSI

Page 18: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

MESI

• Modified– O dado está presente apenas na cache atual e foi

modificado (dirty). A cache deve escrever o dado na memória em algum momento no futuro antes de permitir que outra leia a memória

• Exclusive– O dado está presente apenas na cache atual, não foi

modificado (clean) e é idêndico ao valor da memória• Shared

– O dado pode estar presente em mais de uma cache• Invalid

– O dado na cache não é válido

Page 19: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

MESI

Page 20: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

MOESI• Modified

– Possui a cópia mais recente (correta) do dado. A memória não tem o dado correto. Nenhuma outra cache contém esse dado

• Owned– Possui uma cópia do dado (como shared) mas somente um

processador pode estar em Owned (os outros estão em shared). A memória pode estar errada.

• Exclusive– Somente essa cache contém a cópia do dado. A memória também tem

uma cópia correta.• Shared

– Contém a cópia mais recente do dado. Outros processadores podem conter essa cópia. A memória está correta.

• Invalid– A cópia do dado não é válida

Page 21: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

MOESI

Page 22: Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que os dados presentes na cache estão coerentes? O que é coerência?

Operações de busca e atualização da memória

• Atomic exchange– Troca de um valor em um registrador com um valor

de memória• 0 -> sincronismo está livre• 1 -> sincronismo está bloqueado e indisponível

• Test and set– Testa um valor e “seta” se passar no teste

• Fetch and increment– Retorna o valor da posição de memória e,

atomicamente, o incrementa