Coerência da cache

Um cache pode ser usado para melhorar o desempenho do acesso a um determinado recurso. Quando existem vários caches desse tipo para o mesmo recurso, como mostrado na figura, isso pode levar a problemas. A coerência do cache ou Cache coherency refere-se a uma série de maneiras de garantir que todos os caches do recurso tenham os mesmos dados, e que os dados nos caches façam sentido (chamados de integridade de dados). A coerência do Cache é um caso especial de coerência da memória.

Pode haver problemas se houver muitos caches de um recurso de memória comum, pois os dados no cache podem não fazer mais sentido, ou um cache pode não ter mais os mesmos dados que os outros. Um caso comum onde o problema ocorre é o cache de CPUs em um sistema de multiprocessamento. Como pode ser visto na figura, se o cliente superior tem uma cópia de um bloco de memória de uma leitura anterior e o cliente inferior muda esse bloco de memória, o cliente superior poderia ficar com um cache de memória inválido, sem saber. A coerência do cache existe para gerenciar tais conflitos e manter a coerência entre cache e memória.

Múltiplas Caches de Recursos CompartilhadosZoom
Múltiplas Caches de Recursos Compartilhados

Definição

A coerência define o comportamento da leitura e da escrita no mesmo local de memória. As caches são coerentes, se todas as seguintes condições forem satisfeitas:

  1. Quando um processador P lê um local X, depois de escrever para esse local, P deve obter o valor que escreveu, se nenhum outro processador escrever outro valor para esse local. Isto também é verdade para sistemas monoprocessadores, isto significa que a memória é capaz de manter um valor escrito.
  2. Suponha que haja dois processadores, P1 e P2, e P1 escreveu um valor X1, e depois, P2 escreveu um valor X2, se P1 ler o valor, deve obter o valor escrito por P2, X2, e não o valor escrito, X1, se não houver outras escritas entre os dois. Isto significa que a visão da memória é coerente. Se os processadores pudessem ler o mesmo valor antigo após a escrita feita por P2, a memória não seria coerente.
  3. Só pode haver uma gravação para um determinado local na memória de cada vez. Se houver várias gravações, elas devem ocorrer uma após a outra. Em outras palavras, se o local X recebeu dois valores diferentes A e B, nesta ordem, por quaisquer dois processadores, os processadores nunca poderão ler o local X como B e depois lê-lo como A. O local X deve ser visto com os valores A e B nesta ordem.

Estas condições são definidas supondo que as operações de leitura e escrita sejam feitas instantaneamente. Entretanto, isto não acontece no hardware do computador por causa da latência da memória e outros aspectos da arquitetura. Uma escrita pelo processador X pode não ser vista por uma leitura do processador Y se a leitura for feita em um tempo muito curto após a escrita ter sido feita. O modelo de consistência da memória define quando um valor escrito deve ser visto por uma instrução de leitura feita pelos outros processadores.

Mecanismos de coerência do cache

  • Os mecanismos de coerência baseados em diretórios mantêm um diretório central de blocos em cache.
  • Snooping é o processo onde cada cache monitora as linhas de endereço para acesso aos locais de memória que estão em seu cache. Quando uma operação de gravação é observada em um local do qual um cache tem uma cópia, o controlador do cache invalida sua própria cópia do local da memória bisbilhotada.
  • Snarfing é onde um controlador de cache observa tanto o endereço quanto os dados em uma tentativa de atualizar sua própria cópia de um local na memória quando um segundo mestre modifica um local na memória principal.

Os sistemas de memória compartilhada distribuída imitam estes mecanismos para que possam manter a consistência entre blocos de memória em sistemas frouxamente acoplados.

Os dois tipos mais comuns de coerência que são tipicamente estudados são Snooping e Directory-based. Cada um tem seus próprios benefícios e inconvenientes. Os protocolos de bisbilhotice tendem a ser mais rápidos, se houver largura de banda suficiente, já que todas as transações são uma solicitação/resposta vista por todos os processadores. A desvantagem é que a bisbilhotice não é escalável. Toda solicitação deve ser transmitida a todos os nós de um sistema. Conforme o sistema aumenta, o tamanho do ônibus (lógico ou físico) e a largura de banda que ele fornece devem crescer. Os diretórios, por outro lado, tendem a ter latências mais longas (com um pedido/avanço/resposta de 3 lances), mas utilizam muito menos largura de banda, uma vez que as mensagens são ponto a ponto e não transmitidas. Por este motivo, muitos dos sistemas maiores (>64 processadores) usam este tipo de coerência de cache.

Perguntas e Respostas

P: O que é coerência de cache?


R: A coerência do cache refere-se à garantia de que todos os caches de um recurso tenham os mesmos dados e que os dados nos caches sejam consistentes (integridade dos dados).

P: Qual é a finalidade da coerência do cache?


R: O objetivo da coerência de cache é gerenciar conflitos entre vários caches de um recurso de memória comum e manter a consistência entre o cache e a memória.

P: Quais podem ser as consequências de não ter coerência de cache?


R: Sem a coerência do cache, os dados no cache podem não fazer mais sentido ou um cache pode não ter mais os mesmos dados que os outros, o que pode resultar em inconsistências e erros.

P: Qual é um caso comum em que ocorrem problemas com a coerência do cache?


R: Um caso comum em que ocorrem problemas com a coerência do cache é o cache das CPUs em um sistema de multiprocessamento.

P: Como funciona a coerência do cache?


R: A coerência do cache funciona garantindo que todos os caches de um recurso tenham os mesmos dados e que os dados nos caches sejam consistentes por meio de vários métodos.

P: O que se entende por coerência de memória?


R: A coerência da memória refere-se à consistência dos dados em um recurso de memória compartilhada.

P: Como a coerência do cache pode melhorar o desempenho?


R: A coerência do cache pode melhorar o desempenho ao permitir um acesso mais rápido e eficiente a um determinado recurso.

AlegsaOnline.com - 2020 / 2023 - License CC3