Cache de write-back vs Write-Through?

96

Meu entendimento é que a principal diferença entre os dois métodos é que no método "write-through" os dados são gravados na memória principal por meio do cache imediatamente, enquanto no "write-back" os dados são gravados em um "tempo posterior".

Ainda precisamos esperar pela memória no "tempo posterior", então qual é a vantagem de "write-through"?

Naftaly
fonte
@EricWang eu acho que você quer dizer write backtem melhor desempenho?
wlnirvana
@wlnirvana Sim, você está certo, é meu erro de escritório. Gostaria de removê-lo e inserir um novo comentário aqui para evitar enganos futuros.
Trump 2020 - A justiça virá em
6
Simplificando, write backtem melhor desempenho, porque gravar na memória principal é muito mais lento do que gravar no cache da cpu, e os dados podem ser curtos (os meios podem mudar novamente mais cedo e não há necessidade de colocar a versão antiga na memória). É complexo, mas mais sofisticado, a maioria das memórias na cpu moderna usa essa política.
Trump 2020 - Justiça virá em
Vejo que uma resposta explicativa foi dada. Aconselho você a examinar as tags Write-Allocate, Write-NoAllocate depois de abordar o algoritmo de write-back.
Çağlayan DÖKME
A resposta à sua pergunta é que, com o cache write-through, ao gravar dentro do mesmo bloco, apenas uma gravação na memória principal é necessária. Veja minha resposta para detalhes.
qwr

Respostas:

116

A vantagem da gravação na memória principal é que ela simplifica o projeto do sistema do computador. Com write-through, a memória principal sempre tem uma cópia atualizada da linha. Assim, quando uma leitura é feita, a memória principal sempre pode responder com os dados solicitados.

Se o write-back for usado, às vezes os dados atualizados estão em um cache do processador e às vezes na memória principal. Se os dados estiverem em um cache de processador, esse processador deve impedir que a memória principal responda ao pedido de leitura, porque a memória principal pode ter uma cópia desatualizada dos dados. Isso é mais complicado do que write-through.

Além disso, o write-through pode simplificar o protocolo de coerência do cache porque não precisa do estado Modify . O estado Modify registra que o cache deve escrever de volta na linha do cache antes de invalidar ou remover a linha. Em write-through, uma linha de cache sempre pode ser invalidada sem escrever de volta, pois a memória já tem uma cópia atualizada da linha.

Mais uma coisa - em um software de arquitetura de write-back que grava em registradores de E / S mapeados em memória, deve-se tomar medidas extras para garantir que as gravações sejam enviadas imediatamente para fora do cache. Caso contrário, as gravações não serão visíveis fora do núcleo até que a linha seja lida por outro processador ou a linha seja removida.

Craig S. Anderson
fonte
8
Para E / S mapeada em memória, esses endereços são normalmente mapeados como não armazenados em cache. Write through também pode ser usado para aumentar a confiabilidade (por exemplo, se L1 tiver apenas proteção de paridade e L2 tiver ECC). Write through também é mais popular para caches menores que usam não-gravação-alocação (ou seja, uma falha de gravação não aloca o bloco para o cache, reduzindo potencialmente a demanda por capacidade L1 e largura de banda de leitura L2 / preenchimento L1), visto que grande parte do hardware requisito para write through já está presente para esse write around.
Paul A. Clayton
1
é possível verificar se meu método de cache em meu núcleo é write-back ou write through?
ArtificiallyIntelligence
4
Pode ser enganoso dizer que o write-back é mais complexo porque o processador deve impedir a memória principal de responder ao pedido de leitura. É mais que o cache mantém registro de quais dados são dados (não alinhados com a memória principal) e quais não são, usando "bit (s) sujo (s)", portanto, é possível não verificar a memória principal de forma alguma.
steviejay
Comando @Shaowu "lshw" que mostra recursos de cache como "write-back interno assíncrono"
mug896 de
Ainda não entendo quais são as etapas reais usadas no write-back, mas sei que é complicado ... Você poderia fornecer mais recursos / detalhes sobre isso?
Membro de
11

talvez este artigo possa ajudá-lo a vincular aqui

Write-through: Write é feito de forma síncrona para o cache e para o armazenamento de apoio.

Write-back (ou Write-behind): A escrita é feita apenas no cache. Um bloco de cache modificado é gravado de volta no armazenamento, pouco antes de ser substituído.

Write-through: quando os dados são atualizados, eles são gravados no cache e no armazenamento de back-end. Esse modo é fácil de operar, mas é lento na gravação de dados porque os dados precisam ser gravados no cache e no armazenamento.

Write-back: quando os dados são atualizados, eles são gravados apenas no cache. Os dados modificados são gravados no armazenamento de backend apenas quando os dados são removidos do cache. Este modo tem alta velocidade de gravação de dados, mas os dados serão perdidos se ocorrer uma falha de energia antes que os dados atualizados sejam gravados no armazenamento.

Shengmin Zhao
fonte
Não sigo a explicação da última frase. Em uma falha de energia, a DRAM também perderá os dados, independentemente de write-through ou write-back, de modo que não deve ser um problema específico de write-back.
gustafbstrom
10

Vejamos isso com a ajuda de um exemplo. Suponha que temos um cache mapeado direto e a política de write-back é usada. Portanto, temos um bit válido, um bit sujo, uma tag e um campo de dados em uma linha de cache. Suponha que temos uma operação: escrever A (onde A é mapeado para a primeira linha do cache).

O que acontece é que os dados (A) do processador são gravados na primeira linha do cache. Os bits de bit e tag válidos são definidos. O bit incorreto é definido como 1.

O bit sujo simplesmente indica que a linha do cache já foi gravada desde a última vez que foi trazida para o cache!

Agora, suponha que outra operação seja realizada: ler E (onde E também é mapeado para a primeira linha do cache)

Como temos o cache mapeado diretamente, a primeira linha pode ser simplesmente substituída pelo bloco E que será trazido da memória. Mas como o último bloco escrito na linha (bloco A) ainda não foi escrito na memória (indicado pelo bit incorreto), o controlador de cache primeiro emitirá uma gravação de volta para a memória para transferir o bloco A para a memória, então ele substituirá a linha com o bloco E emitindo uma operação de leitura para a memória. bit sujo agora está definido como 0.

Portanto, a política de write-back não garante que o bloco será o mesmo na memória e em sua linha de cache associada. No entanto, sempre que a linha está prestes a ser substituída, um write-back é executado primeiro.

Uma política de gravação é exatamente o oposto. De acordo com isso, a memória terá sempre um dado atualizado. Ou seja, se o bloco de cache for gravado, a memória também será gravada de acordo. (sem uso de bits sujos)

Rajat
fonte
5

As políticas de write-back e write-through descrevem quando ocorre uma ocorrência de gravação , ou seja, quando o cache tem as informações solicitadas. Nestes exemplos, presumimos que um único processador está gravando na memória principal com um cache.

Write-through: as informações são gravadas no cache e na memória, e a gravação termina quando ambos terminam. Isso tem a vantagem de ser mais simples de implementar, e a memória principal é sempre consistente (em sincronia) com o cache (para o caso do uniprocessador - se algum outro dispositivo modifica a memória principal, então esta política não é suficiente), e uma falha de leitura nunca resulta em gravações na memória principal. A desvantagem óbvia é que cada ocorrência de gravação precisa fazer duas gravações, uma das quais acessa a memória principal mais lenta.

Write-back: as informações são gravadas em um bloco no cache. O bloco de cache modificado só é gravado na memória quando é substituído (na verdade, uma gravação lenta ). Um bit especial para cada bloco de cache, o bit sujo , marca se o bloco de cache foi modificado ou não enquanto estava no cache. Se o bit incorreto não for definido, o bloco de cache está "limpo" e uma falha de gravação não precisa gravar o bloco na memória.

A vantagem é que as gravações podem ocorrer na velocidade do cache e, se a gravação dentro do mesmo bloco, apenas uma gravação na memória principal for necessária (quando o bloco anterior estiver sendo substituído). As desvantagens são que esse protocolo é mais difícil de implementar, a memória principal pode não ser consistente (não está em sincronia) com o cache e as leituras que resultam na substituição podem causar gravações de blocos sujos na memória principal.

As políticas para uma falha de gravação são detalhadas no meu primeiro link.

Esses protocolos não cuidam dos casos com vários processadores e vários caches, como é comum nos processadores modernos. Para isso, são necessários mecanismos de coerência de cache mais complicados . Os caches write-through têm protocolos mais simples, pois uma gravação no cache é imediatamente refletida na memória.

Bons recursos:

qwr
fonte
0

O write-back é mais complexo e requer um Protocolo de Coerência de Cache (MOESI) complicado, mas vale a pena, pois torna o sistema rápido e eficiente.

O único benefício do Write-Through é que ele torna a implementação extremamente simples e nenhum protocolo de coerência de cache complicado é necessário.

Gaurav Toshniwal
fonte
2
WT ainda precisa de um protocolo de coerência. Um armazenamento de um núcleo ainda precisa invalidar cópias em outros caches para que eles não continuem lendo dados obsoletos indefinidamente. O RMW atômico precisa de algum suporte especial. Tudo isso é mais fácil com WT, eu acho, mas a coerência necessária ainda é um pouco complicada.
Peter Cordes
Ou talvez você esteja falando sobre um sistema de núcleo único com uma hierarquia de cache de L1 / L2 (e talvez mais). Nesse caso, você realmente não precisa usar MESI / MOESI para caches internos que buscam através de caches externos, a menos que você queira oferecer suporte a DMA coerente de cache que pode acessar a direção de cache mais externa. Mas você ainda precisa de coerência para uma gravação DMA para invalidar o cache interno.
Peter Cordes
1
O protocolo de coerência de cache só é necessário se houver necessidade de suporte para vários caches / processadores ou se algo afetar a memória, como DMA. Write-through tem suas vantagens mesmo para sistemas de processador único, ou seja, velocidade de gravação.
qwr
Para DMA, o sistema operacional pode limpar explicitamente o cache após a E / S. Sendo software, é menos eficiente.
qwr