Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que...
Transcript of Coerência de Cache – Parte 2 MO801/MC972. Visão Geral Caches são essenciais Como garantir que...
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?
• Mesmos mecanismos disponíveis em sistemas multiprocessados– Não é um problema novo
Modelo Genérico
Processador1
Cache
Memória
Processador2
Cache
Processador3
Cache
Processador4
Cache
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
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]
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
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
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
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
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
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
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]
Escalabilidade
• Quandos processadores?
• E para muitos processadores?– Mecanismo de dicionário
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
MSI
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
MOSI
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
MESI
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
MOESI
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