Mémoire cache

La mise en cache est un terme utilisé en informatique. L'idée derrière un cache (prononcé "cash" /ˈkæʃ/ KASH ) est très simple : Très souvent, l'obtention d'un résultat pour un calcul prend beaucoup de temps, c'est pourquoi le stockage du résultat est généralement une bonne idée. Deux types de supports de stockage sont utilisés : L'un est généralement assez gros, mais son accès est "lent" ; l'autre est beaucoup plus rapide, mais il est généralement petit. L'idée de base de la mise en cache est d'utiliser le support qui est rapide d'accès pour avoir des copies des données. Il n'y a pas de différence entre la copie et l'original. L'accès aux données originales peut prendre beaucoup de temps, ou être coûteux (par exemple : les résultats d'un problème difficile qui prend beaucoup de temps à résoudre). C'est pourquoi il est beaucoup plus "économique" d'utiliser simplement la copie des données du cache. Autrement dit, un cache est une zone de stockage temporaire qui contient des copies de données qui sont souvent utilisées. Lorsqu'une copie des données se trouve dans ce cache, il est plus rapide d'utiliser cette copie plutôt que de récupérer ou de recalculer les données originales. Le temps moyen nécessaire pour accéder aux données sera ainsi plus court. Mettre une nouvelle valeur dans un cache signifie souvent qu'une ancienne valeur doit être remplacée. Il existe différentes idées (généralement appelées "stratégies") sur la manière de sélectionner la valeur à remplacer.

Un tampon est très similaire à une cache. Il est différent en ce sens que le client qui accède aux données dans un tampon sait qu'il existe un tampon ; le tampon est géré par l'application. Avec un cache, le client qui accède aux données n'a pas besoin de savoir qu'il y a un cache.

Les applications informatiques typiques accèdent aux données de manière très similaire. Supposons que les données soient structurées en "blocs", auxquels on peut accéder individuellement. Lorsqu'une application accède à un bloc, il est également très probable qu'elle accède (ou fasse référence) à un bloc qui est "proche" du bloc d'origine. C'est ce que l'on appelle la localité de référence. Il existe différents types de ces "localités". La localité de référence est l'une des raisons pour lesquelles les caches fonctionnent bien dans de nombreux domaines de l'informatique.

Pour bien fonctionner, les caches sont petites, par rapport à la quantité totale de données. Plus la mémoire cache est grande, plus il faut de temps pour consulter une entrée. Les caches plus grandes sont également plus coûteuses à construire.

Comment fonctionnent les caches

Un cache est un bloc de mémoire destiné à stocker des données qui seront probablement réutilisées. L'unité centrale et le disque dur utilisent souvent un cache, tout comme les navigateurs et les serveurs web.

Une cache est composée de nombreuses entrées, appelée "pool". Chaque entrée contient une donnée (un bit de données) qui est une copie d'une donnée située à un autre endroit. Les caches utilisent généralement ce que l'on appelle une mémoire de secours. L'accès à ce type de mémoire est lent ou coûteux par rapport à celui du cache. Un cache sur disque utilise un disque dur comme mémoire de sauvegarde, par exemple. Chaque entrée comporte également une petite information, appelée balise. Cette balise est utilisée pour trouver l'endroit où les données originales sont stockées.

Caches pour la lecture

Un client (une unité centrale, un navigateur web, un système d'exploitation) veut accéder à un peu de données, il croit être dans le magasin de sauvegarde, il vérifie d'abord si la donnée peut être trouvée dans le cache. Si les données peuvent être trouvées dans le cache, le client peut les utiliser et n'a pas besoin d'utiliser la mémoire principale. C'est ce que l'on appelle un "hit" de la mémoire cache. Ainsi, par exemple, un programme de navigateur web peut vérifier son cache local sur le disque pour voir s'il possède une copie locale du contenu d'une page web à une URL particulière. Dans cet exemple, l'URL est la balise, et le contenu de la page web est la donnée.

L'autre situation qui peut se produire est que la donnée avec l'étiquette ne peut pas être trouvée dans le cache. C'est ce que l'on appelle le "cache miss". La donnée doit être récupérée dans la mémoire de secours. En général, elle est copiée dans le cache, de sorte que la prochaine fois, il n'est plus nécessaire de la récupérer dans la mémoire de sauvegarde.

La cache n'a qu'une taille limitée. Pour faire de la place à l'entrée précédemment non mise en cache, il peut être nécessaire de supprimer une autre entrée du cache. Des règles spéciales sont utilisées pour trouver l'entrée qui doit être supprimée au mieux. Ces règles sont généralement appelées Heuristiques. Les heuristiques utilisées pour trouver l'entrée sont appelées politique de remplacement. Une règle très simple utilisée est appelée "Least recently used" (ou LRU). Elle prend simplement l'entrée qui a été utilisée le plus longtemps auparavant. D'autres heuristiques sont listées à l'algorithme de cache..

Caches pour l'écriture

Les caches peuvent également être utilisés pour écrire des données ; l'avantage est que le client peut continuer son opération une fois que l'entrée a été écrite dans le cache ; il n'a pas à attendre que l'entrée soit écrite dans le magasin de sauvegarde.

Toutefois, l'inscription doit être écrite au magasin de soutien à un moment donné. Le moment où cela se produit est contrôlé par la politique d'écriture.

Dans un cache en écriture, chaque entrée est immédiatement écrite dans la mémoire de sauvegarde, et est également stockée dans le cache.

L'autre option consiste à n'écrire que dans le cache, et à écrire plus tard dans la mémoire de sauvegarde. C'est ce que l'on appelle le cache de réécriture (ou cache arrière). Le cache marque les entrées qui n'ont pas encore été écrites dans la mémoire centrale ; la marque utilisée est souvent appelée "dirty flag". Avant que les entrées ne soient effacées du cache, elles sont écrites dans la mémoire de sauvegarde. C'est ce que l'on appelle l'écriture paresseuse. Un échec dans un cache de réécriture (qui nécessite le remplacement d'un bloc par un autre) nécessitera souvent deux accès à la mémoire : un pour obtenir les données nécessaires, et un autre pour écrire les données remplacées du cache vers le magasin.

La politique de mise en cache peut également stipuler qu'une certaine donnée doit être écrite dans la mémoire cache. Le client peut avoir apporté de nombreuses modifications à la donnée dans la mémoire cache. Une fois ces modifications effectuées, il peut demander explicitement à la mémoire cache de réécrire la donnée.

L'allocation en non-écriture est une politique de cache où seules les lectures sont mises en cache. Cela évite d'avoir à recourir à la mise en cache en écriture ou en lecture. Les écritures sont toujours effectuées dans la mémoire de sauvegarde.

Le client n'est pas l'application qui modifie les données dans le magasin de sauvegarde. Si les données ont été modifiées dans la mémoire de sauvegarde, la copie dans le cache sera périmée, ou périmée. Par ailleurs, lorsque le client met à jour les données dans le cache, les copies de ces données dans d'autres caches deviennent périmées. Il existe des protocoles de communication spéciaux qui permettent aux gestionnaires de cache de se parler pour que les données gardent leur sens. Ces protocoles sont connus sous le nom de protocoles de cohérence.

Schéma d'un cache mémoire de l'unité centraleZoom
Schéma d'un cache mémoire de l'unité centrale

Sélection de l'entrée à remplacer

Une cache est petite, et elle sera pleine, ou presque, la plupart du temps. Ainsi, lorsqu'une nouvelle valeur est ajoutée, une ancienne doit être supprimée. Cette sélection peut être effectuée de différentes manières :

  • Premier entré, premier sorti : Il suffit de remplacer l'entrée qui a été ajoutée au cache il y a le plus longtemps
  • Le moins utilisé récemment : Cette idée est similaire à celle de la FIFO ci-dessus, mais lorsqu'une entrée est utilisée, son horodatage / son âge est mis à jour.
  • Le moins fréquemment utilisé : Là encore, comme dans le cas du FIFO, au lieu d'utiliser un horodatage, utilisez un compteur, qui est incrémenté à chaque fois qu'une entrée est utilisée
  • Choisissez une entrée au hasard

Histoire

Le mot "cache" a été utilisé pour la première fois en informatique en 1967, lorsqu'un article scientifique a été préparé pour être publié dans l'IBM Systems Journal. L'article portait sur une nouvelle amélioration de la mémoire dans le modèle 85. Le modèle 85 était un ordinateur de la gamme de produits IBM System/360. Le rédacteur en chef du Journal voulait un meilleur terme pour désigner la mémoire tampon haute vitesse, utilisée dans l'article. Il n'a reçu aucune information, et a suggéré cache, du français cache, qui signifie "cacher". L'article a été publié au début de 1968, et les auteurs ont été honorés par IBM. Leur travail a été largement salué et amélioré. Le cache est rapidement devenu un usage courant dans la littérature informatique.

Où les caches sont utilisées

Caches de l'unité centrale

Les petites mémoires sur ou à proximité de la puce du processeur peuvent être rendues plus rapides que la mémoire principale beaucoup plus importante. Depuis les années 1980, la plupart des CPU utilisent un ou plusieurs caches. Les unités centrales modernes à usage général à l'intérieur des ordinateurs personnels peuvent en compter jusqu'à une demi-douzaine. Chaque cache peut être spécialisé dans une partie différente de la tâche d'exécution des programmes.

Les caches à disques

Les caches de l'unité centrale sont généralement entièrement gérées par le matériel, les autres caches sont gérées par un autre type de logiciel. Le système d'exploitation gère généralement un cache de page en mémoire principale. Les utilisateurs extérieurs à l'informatique appellent généralement ce cache une mémoire virtuelle. Elle est gérée par le noyau du système d'exploitation.

Les disques durs modernes ont des tampons de disque. On les appelle parfois "cache disque", mais c'est faux. La fonction principale de ces tampons est d'ordonner les écritures sur le disque et de gérer les lectures. Les accès répétés au cache sont rares, car la mémoire tampon est très petite par rapport à la taille du disque dur.

Les disques durs locaux sont plus rapides que les autres dispositifs de stockage, tels que les serveurs distants, les lecteurs de bandes locaux ou les jukeboxes optiques. L'utilisation des disques durs locaux comme caches est le principal concept de gestion hiérarchique du stockage.

Caches web

Les navigateurs web et les serveurs proxy web utilisent des caches pour stocker les réponses précédentes des serveurs web, telles que les pages web. Les caches web réduisent la quantité d'informations qui doivent être transmises sur le réseau. Les informations précédemment stockées dans la mémoire cache peuvent souvent être réutilisées. Cela permet de réduire la bande passante et les besoins de traitement du serveur web, et contribue à améliorer la réactivité des utilisateurs du web.

Les navigateurs web modernes utilisent un cache web intégré, mais certains fournisseurs de services internet ou organisations utilisent également un serveur proxy de mise en cache. Il s'agit d'un cache web qui est partagé entre tous les utilisateurs de ce réseau.

Les moteurs de recherche rendent aussi souvent disponibles, à partir de leur cache, les pages web qu'ils ont indexées. Par exemple, Google fournit un lien "Cache" à côté de chaque résultat de recherche. C'est utile lorsque des pages web sont temporairement inaccessibles à partir d'un serveur web.

Mise en cache avec des réseaux peu fiables

L'opération d'écriture est courante dans les réseaux peu fiables (comme un réseau local Ethernet). Le protocole utilisé pour s'assurer que les données dans le cache d'écriture ont un sens lorsque plusieurs caches d'écriture sont utilisés est très complexe, dans un tel cas.

Par exemple, les caches de pages web et de systèmes de fichiers réseau côté client (comme ceux de NFS ou SMB) sont généralement en lecture seule ou en écriture pour que le protocole réseau reste simple et fiable.

La différence entre le tampon et le cache

La mémoire tampon et le cache ne s'excluent pas mutuellement ; ils sont aussi souvent utilisés ensemble. La raison pour laquelle ils sont utilisés est cependant différente. Un tampon est un emplacement en mémoire qui est traditionnellement utilisé parce que les instructions de l'unité centrale ne peuvent pas adresser directement les données stockées dans les périphériques. La mémoire de l'ordinateur est utilisée comme mémoire intermédiaire.

En outre, un tel tampon peut être possible lorsqu'un grand bloc de données est assemblé ou désassemblé (comme l'exige un dispositif de stockage), ou lorsque les données peuvent être livrées dans un ordre différent de celui dans lequel elles ont été produites. En outre, une mémoire tampon entière de données est généralement transférée de manière séquentielle (par exemple sur le disque dur), de sorte que la mise en mémoire tampon elle-même augmente parfois les performances de transfert. Ces avantages sont présents même si les données mises en mémoire tampon sont écrites une fois dans la mémoire tampon et lues une fois à partir de celle-ci.

Un cache augmente également les performances de transfert. Une partie de l'augmentation provient également de la possibilité que plusieurs petits transferts se combinent en un grand bloc. Mais le principal gain de performance se produit parce qu'il y a de fortes chances que la même donnée soit lue plusieurs fois dans le cache, ou que des données écrites soient bientôt lues. Le seul but des caches est de réduire les accès au stockage sous-jacent plus lent. Le cache est aussi généralement une couche d'abstraction conçue pour être invisible du point de vue des couches voisines. De cette façon, les applications ou les clients peuvent ne pas être conscients de l'existence d'un cache.

Questions et réponses

Q : Qu'est-ce que la mise en cache ?


R : La mise en cache est un terme utilisé en informatique qui désigne la pratique consistant à stocker des copies de données souvent utilisées afin d'y accéder plus rapidement qu'en récupérant ou en recalculant les données originales.

Q : Comment fonctionne la mise en cache ?


R : La mise en cache fonctionne en utilisant deux types de supports de stockage, un qui est généralement assez grand mais lent à accéder, et un autre qui peut être accédé beaucoup plus rapidement mais généralement plus petit. L'idée derrière la mise en cache est d'utiliser le support rapide pour stocker des copies de données afin que l'accès aux données originales prenne moins de temps ou soit moins coûteux.

Q : Qu'est-ce qu'un tampon ?


R : Un tampon est similaire à un cache en ce sens qu'il stocke des copies de données pour un accès plus rapide. Toutefois, avec un tampon, le client accédant aux données sait qu'il existe un tampon et qu'il est géré par une application, alors qu'avec un cache, les clients n'ont pas besoin de savoir qu'il existe un cache.

Q : Que signifie la localité de référence ?


R : La localité de référence signifie que lorsqu'une application accède à certains blocs de données structurées, elle est également susceptible d'accéder à d'autres blocs proches de ceux auxquels elle a accédé initialement. Cela permet aux caches de bien fonctionner car ils sont généralement petits par rapport à toutes les données disponibles.

Q : Pourquoi les caches plus grands prennent-ils plus de temps pour consulter les entrées ?


R : Les caches plus grands prennent plus de temps car ils contiennent plus d'informations stockées et nécessitent donc plus de temps pour les recherches. Ils sont également plus coûteux car ils nécessitent plus de ressources pour le stockage.

Q : Comment la localité peut-elle contribuer à un meilleur fonctionnement des caches ?


R : La localité permet d'améliorer le fonctionnement des caches, car lorsque les applications accèdent à certains blocs de données structurées, elles ont probablement besoin d'autres blocs proches, qui peuvent alors être rapidement récupérés dans le cache au lieu de devoir les récupérer ailleurs ou les recalculer.

AlegsaOnline.com - 2020 / 2023 - License CC3