Cache write-through vs write-back : les différences expliquées

Une politique d'écriture détermine ce qui se passe lorsque le CPU écrit une donnée présente dans le cache. Un cache write-through met à jour le cache et la mémoire principale en même temps : la mémoire est toujours à jour, mais chaque écriture génère du trafic mémoire. Un cache write-back ne met à jour que le cache, marque la ligne comme modifiée (dirty) et l'écrit en mémoire plus tard, lorsque la ligne est évincée. Le write-back est plus rapide et consomme moins de bande passante, mais la cohérence est plus complexe à maintenir.

CritèreWrite-throughWrite-back
Politique d'écritureChaque écriture va à la fois dans le cache et dans le niveau de mémoire suivantUne écriture ne met à jour que le cache et positionne le dirty bit ; la mémoire est mise à jour lors de l'éviction
Trafic mémoireÉlevé : chaque écriture sort du cachePlus faible : les écritures répétées sur une même ligne sont regroupées en une seule réécriture
Vitesse d'écriturePlus lente sans aide ; un tampon d'écriture masque une grande partie du délaiPlus rapide : les écritures s'effectuent à la vitesse du cache
Cohérence avec la mémoireLa mémoire est toujours à jour, ce qui simplifie le partage avec le DMA et les autres cœursLa mémoire peut être périmée jusqu'à la réécriture de la ligne, la cohérence demande donc plus de soin
ComplexitéSimplePlus complexe : dirty bits, réécriture lors de l'éviction, protocoles de cohérence
Coût de l'évictionFaible : rien n'est à écrireL'éviction d'une ligne modifiée coûte une écriture supplémentaire en mémoire
Politique habituelle en cas d'échec d'écritureNo-write-allocateWrite-allocate
Usage typiqueCertains caches L1 et systèmes simples ou axés sur la fiabilitéLa plupart des caches de CPU modernes, en particulier L2 et L3

Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.

Quand choisir l'un ou l'autre ?

Write-through
Lorsque la simplicité et une mémoire toujours à jour comptent plus que la bande passante d'écriture.
Write-back
Lorsque les performances comptent, en particulier pour du code qui écrit de nombreuses fois sur les mêmes lignes.

Questions fréquentes

Qu'est-ce qu'un dirty bit ?

Un bit associé à chaque ligne d'un cache write-back qui indique que la ligne a été modifiée. Une ligne modifiée doit être réécrite en mémoire lorsqu'elle est évincée.

Pourquoi le write-back est-il plus rapide ?

Les écritures répétées sur une même ligne restent dans le cache et sont regroupées en une seule écriture en mémoire, ce qui réduit le trafic mémoire.

À quoi sert un tampon d'écriture ?

Dans un cache write-through, il met en file d'attente les écritures vers la mémoire, si bien que le processeur n'a pas à attendre leur achèvement.

Lequel est le plus simple avec plusieurs cœurs ?

Le write-through, car la mémoire est toujours à jour. Le write-back demande plus de soin, comme des protocoles de cohérence, car la mémoire peut être périmée.

Vérifier vos connaissances

Parmi les politiques d'écriture du cache, quelle description de l'écriture différée (write-back) est correcte ?

  1. ALe cache n'est pas écrit ; seule la mémoire principale est mise à jour
  2. BÀ chaque écriture, le cache et la mémoire principale sont tous deux mis à jour
  3. CSeul le cache est d'abord mis à jour, et la donnée est réécrite en mémoire principale lorsqu'elle est évincée du cache
Afficher la réponse et l'explication

Réponse : C. Seul le cache est d'abord mis à jour, et la donnée est réécrite en mémoire principale lorsqu'elle est évincée du cache

Avec l'écriture différée, les écritures ne vont que dans le cache, et les lignes modifiées (dirty) sont réécrites en mémoire principale lors de leur éviction. Plusieurs écritures au même emplacement ne donnent lieu qu'à une seule réécriture, ce qui réduit fortement le trafic vers la mémoire principale ; elle est utilisée dans les caches L1 à L3 de nombreux processeurs. En contrepartie, le contenu de la mémoire principale et celui du cache divergent temporairement, ce qui exige une gestion de la cohérence avec les autres caches et le DMA.

Dans un cache à écriture immédiate, quel est le but principal d’un tampon d’écriture ?

  1. APermettre au CPU de passer au traitement suivant sans attendre la fin de l’écriture en mémoire principale
  2. BMaintenir les données du cache dans un état plus récent que la mémoire principale
  3. CToujours charger d’abord depuis la mémoire principale la ligne ayant subi un défaut d’écriture avant d’y écrire
Afficher la réponse et l'explication

Réponse : A. Permettre au CPU de passer au traitement suivant sans attendre la fin de l’écriture en mémoire principale

L’écriture immédiate écrit aussi en mémoire principale à chaque écriture ; attendre la fin de chacune bloquerait fréquemment le CPU. En accumulant temporairement les écritures dans un tampon d’écriture, le CPU passe immédiatement à l’instruction suivante tandis que le tampon les vide en arrière-plan vers la mémoire principale. Un cache plus récent que la mémoire principale est une caractéristique de l’écriture différée ; en écriture immédiate, les deux concordent. Le chargement ou non d’une ligne en défaut relève du choix de l’allocation sur écriture, sans rapport avec le tampon d’écriture.

Dans un cache à écriture différée, quel est le rôle du bit modifié (dirty bit) associé à chaque ligne ?

  1. AIndiquer si les données de la ligne sont valides et lisibles
  2. BIndiquer que la ligne a été modifiée et diffère de la mémoire principale
  3. CIndiquer l’instant du dernier accès à la ligne
Afficher la réponse et l'explication

Réponse : B. Indiquer que la ligne a été modifiée et diffère de la mémoire principale

En écriture différée, les écritures ne touchent que le cache, si bien que certaines lignes ont un contenu plus récent que la mémoire principale. Le bit modifié signale qu’une ligne a été réécrite, de sorte qu’à l’éviction seules les lignes modifiées sont réécrites en mémoire principale. Les lignes non modifiées sont simplement abandonnées, ce qui évite des écritures inutiles. La validité d’une ligne est indiquée par le bit de validité, et l’ordre des accès est géré par les informations de remplacement telles que LRU.

  1. Pour un traitement qui écrit de nombreuses fois dans la même ligne, quelle est la principale raison pour laquelle l’écriture différée est plus avantageuse que l’écriture immédiate ?

Questions d'entraînement sur Hiérarchie mémoire

Termes clés expliqués

Écriture immédiate (write-through)
Méthode qui écrit dans le niveau inférieur (mémoire principale, etc.) en même temps que dans le cache. Le niveau inférieur est toujours à jour, mais le trafic d'écriture est important ; on la combine avec un tampon d'écriture.
Mémoire cache
Mémoire rapide de faible capacité placée près du CPU. Elle conserve les données fréquemment utilisées pour compenser l'écart de vitesse avec la mémoire principale. Réalisée principalement en SRAM.
Cohérence de cache
Mécanisme qui maintient la cohérence du contenu lorsque les caches de plusieurs cœurs d'un CPU multicœur contiennent des données de même adresse. Lorsqu'un cœur écrit, les anciennes copies des autres cœurs sont par exemple invalidées.
Ligne de cache
Unité de transfert de données entre le cache et le niveau inférieur, aussi appelée bloc de cache. Elle fait 64 octets sur la plupart des CPU ; les bits de poids faible de l'adresse donnent la position (offset) dans la ligne.

Comparatifs associés