La mémoire cache joue un rôle essentiel dans l’informatique et le traitement des données. Après tout, il s’agit d’un composant critique utilisé par tous les systèmes informatiques modernes pour stocker les données et y accéder rapidement et facilement. Tout, des PC de bureau aux centres de données en passant par les ressources informatiques cloud, utilise une mémoire vive statique à accès aléatoire (SRAM) rapide, également appelée mémoire cache, qui fonctionne conjointement avec l’unité centrale de traitement (CPU).
Même si les performances élevées d’un ordinateur sont souvent attribuées à la puissance de sa mémoire vive ou de son processeur, la mémoire cache a un impact direct et considérable sur les performances globales de l’appareil.
Cet article vous aidera à mieux comprendre le fonctionnement de la mémoire cache, ses différents types et les raisons pour lesquelles elle est essentielle au bon fonctionnement d’un système informatique.
Fonctionnement de la mémoire cache
Certains ordinateurs intègrent une mémoire cache SSD, souvent appelée mise en cache de la mémoire flash. Elle sert à stocker temporairement les données jusqu’à ce que les méthodes de stockage permanent soient en mesure de les traiter, ce qui améliore les performances de l’appareil.
Cependant, puisque le CPU est l’un des composants chargés de récupérer et de traiter les informations et qu’il fonctionne beaucoup plus rapidement que la mémoire vive moyenne, les utilisateurs peuvent être contraints d’attendre pendant qu’il tente de lire les instructions reçues depuis la mémoire vive. Il en résulte une diminution des performances et de la vitesse.
La mémoire cache permet d’éviter cette situation. Pour cela, on installe une SRAM de faible capacité mais rapide à proximité du CPU.
La SRAM récupère ensuite les données ou les instructions situées à certaines adresses mémoire de la RAM et les copie temporairement dans la mémoire cache, avec l’adresse d’origine de ces instructions ou données. Ainsi, le CPU n’a pas besoin d’attendre, raison pour laquelle la mise en cache est utilisée pour améliorer les performances de lecture.
Cependant, comme la mémoire cache d’un appareil donné est de faible capacité par rapport à sa RAM et à sa puissance de calcul, elle ne peut pas toujours contenir toutes les données nécessaires. Selon le scénario qui se présente, cela peut produire ce que l’on appelle un « cache hit » ou un « cache miss ».
Cache hit de la mémoire
Lorsque le CPU tente de lire des instructions dans la mémoire cache et y trouve les informations correspondantes, on parle de cache hit. Comme la mémoire cache est plus rapide et plus proche du CPU, c’est elle qui fournit les données et les instructions au CPU, ce qui lui permet de commencer le traitement.
En cas de cache hit, la mémoire cache joue le rôle d’intermédiaire et de file d’attente à haut débit entre le CPU et la RAM principale. Les processus qui nécessitent l’écriture de données ou d’instructions dans la RAM ou la mémoire doivent d’abord passer par la mémoire cache, jusqu’à ce que la RAM soit en mesure d’y accéder. Ainsi, le CPU n’est pas ralenti en attendant la réponse de la RAM.
Cette correspondance peut être établie de plusieurs façons, selon la politique d’écriture de la mémoire cache. L’une de ces politiques est appelée « write-through ». Il s’agit de l’approche la plus simple et la plus directe : tout ce qui est écrit dans la mémoire cache est également écrit dans la RAM.
Une politique « write-back » permet que les données écrites dans la mémoire cache soient immédiatement écrites dans la RAM, et tout élément écrit dans la mémoire cache est marqué comme « modifié » pendant toute sa durée de vie.
Cela indique que les données diffèrent des données ou de l’instruction d’origine récupérées depuis la RAM. Ce n’est qu’au moment de leur suppression de la mémoire cache qu’elles sont écrites dans la RAM, en remplacement des informations d’origine.
Certaines politiques d’écriture intermédiaires de la mémoire cache permettent de mettre en file d’attente les informations « modifiées » et de les réécrire dans la RAM principale par lots. Cette approche est plus efficace que l’utilisation de plusieurs écritures individuelles.
Cache miss de la mémoire
Si le CPU tente de lire des informations ou des instructions dans la mémoire cache, mais ne trouve pas les données nécessaires et doit se tourner directement vers le disque dur et la RAM, on parle de cache miss. Cela réduit la vitesse et l’efficacité du traitement de l’appareil, qui doit alors fonctionner à la vitesse de la RAM et du disque dur.
Ensuite, lorsque les informations ou les instructions requises sont récupérées avec succès depuis la RAM, elles sont d’abord écrites dans la mémoire cache avant d’être envoyées au CPU pour traitement.
Cela s’explique principalement par le fait que les données ou instructions récemment utilisées par le CPU sont susceptibles de rester importantes et de devoir être consultées à nouveau peu après. Les écrire dans la mémoire cache évite au CPU de retourner une seconde fois dans la RAM ou sur le disque dur pour récupérer les mêmes données.
Dans de rares cas, certains types de données peuvent être marqués comme non configurables pour la mise en cache. Cela évite qu’un espace précieux de la mémoire cache soit occupé par des données inutiles, même si celles-ci ont été récupérées manuellement par le CPU depuis la RAM ou le disque dur.
« Éviction » de la mémoire cache
La capacité de stockage d’une mémoire cache est infime comparée à celle de la RAM et des disques durs. Alors que la RAM peut offrir entre 2 Go et 64 Go et que les disques durs atteignent en moyenne 1 To à 2 To sur les appareils grand public, la capacité d’une mémoire cache se situe entre 2 Ko et quelques mégaoctets.
Cette différence considérable de capacité de stockage signifie que les mémoires cache peuvent parfois être pleines alors que le CPU doit encore récupérer des informations. « Éviction » est un processus qui supprime des données de la mémoire cache afin de libérer de l’espace pour les informations qui doivent y être écrites.
Les données qui seront évincées sont déterminées par une « politique de remplacement », en fonction des informations les plus utilisées et les plus importantes.
Il existe plusieurs politiques de remplacement possibles. L’une des plus courantes est la politique LRU (least recently used, ou moins récemment utilisée). Selon cette politique, si des données ou des instructions n’ont pas été utilisées récemment, elles sont moins susceptibles d’être nécessaires dans l’immédiat que les données ou instructions utilisées plus récemment.
2 types de mémoire cache
La mémoire cache est divisée en deux catégories selon son emplacement physique et sa proximité avec le CPU de l’appareil.
- Mémoire cache primaire : La mémoire cache primaire, également appelée mémoire cache principale, est la SRAM située sur le même die que le CPU, soit l’emplacement le plus proche possible. C’est le type généralement utilisé pour le stockage et la récupération des informations entre le CPU et la RAM.
- Mémoire cache secondaire : La mémoire cache secondaire est constituée du même matériel que la mémoire cache primaire. Cependant, elle est placée plus loin du CPU, ce qui garantit la présence d’une SRAM de secours à laquelle le CPU peut accéder si nécessaire.
Bien qu’ils décrivent précisément une mémoire cache en fonction de son emplacement physique dans le système, ces deux termes ne sont plus utilisés aujourd’hui. En effet, les mémoires cache modernes peuvent être fabriquées dans des dimensions suffisamment réduites et avec des capacités suffisantes pour être placées sans problème sur le même die que le CPU. Les mémoires cache modernes sont plutôt désignées par leur niveau.
3 niveaux de mémoire cache
Les systèmes informatiques modernes possèdent plusieurs mémoires cache, dont la taille et la proximité avec les cœurs du processeur — et donc la vitesse — varient. Elles sont désignées comme des niveaux de cache.
La mémoire cache la plus petite et la plus rapide est appelée cache de niveau 1, ou cache L1. Vient ensuite le cache L2, puis le L3. La plupart des systèmes disposent aujourd’hui d’un cache L3. Depuis l’introduction de ses puces Skylake, Intel a également ajouté une mémoire cache L4 à certains de ses processeurs. Elle reste toutefois moins courante.
Cache de niveau 1
Le cache de niveau 1 est le type de mémoire cache le plus rapide, puisqu’il est directement intégré au CPU, mais il est pour cette même raison très limité en taille. Il fonctionne à la même fréquence d’horloge que le CPU, ce qui en fait un excellent tampon pour la RAM lors de la demande et du stockage d’informations et d’instructions.
Le cache L1 est généralement divisé en deux parties : une pour les instructions (L1i) et une pour les données (L1d). Cela permet de prendre en charge les différentes bandes passantes de récupération utilisées par les processeurs, car la plupart des logiciels ont tendance à nécessiter davantage de cache pour les données que pour les instructions.
Les appareils les plus récents disposent d’une capacité de cache de 64 Ko — 32 Ko de L1i et 32 Ko de L1d. Dans un processeur quadricœur, cela représente au total 256 Ko de mémoire cache L1.
Cache de niveau 2
Le cache de niveau 2 se trouve souvent lui aussi à l’intérieur de la puce du CPU, mais plus loin du cœur que le L1. Il est nettement moins coûteux que son équivalent L1, tout en étant plus grand et plus capacitif ; sa capacité peut aller de 128 Ko à 8 Mo par cœur.
Dans certains cas, les mémoires cache L2 sont intégrées à une puce de traitement distincte, également appelée coprocesseur.
Cache de niveau 3
La mémoire cache de niveau 3, parfois appelée cache de dernier niveau (LLC), est située à l’extérieur du CPU, mais reste à proximité. Elle est beaucoup plus grande que les caches L1 et L2, mais légèrement plus lente.
Autre différence : les mémoires cache L1 et L2 sont propres à leur cœur de processeur et ne peuvent pas être partagées. Le L3, en revanche, est accessible à tous les cœurs. Il joue ainsi un rôle important dans le partage des données et les communications entre les cœurs et, dans certains cas selon la conception, avec le cache de l’unité de traitement graphique (GPU).
En ce qui concerne la taille, le cache L3 des appareils modernes se situe généralement entre 10 Mo et 64 Mo par cœur, selon les caractéristiques de l’appareil.
Qu’est-ce que le mappage du cache ?
Comme les mémoires cache sont extrêmement rapides et continuent de gagner en capacité parallèlement aux exigences des processus de calcul logiciels, il faut disposer d’un système permettant de récupérer les informations nécessaires. Sinon, le CPU pourrait perdre du temps à rechercher la bonne instruction dans la mémoire au lieu de la traiter réellement.
Le processeur connaît l’adresse mémoire RAM des données ou de l’instruction qu’il souhaite lire. Il doit rechercher dans le cache mémoire une référence à cette adresse mémoire RAM, ainsi que les données ou l’instruction associées.
Il existe de nombreuses méthodes pour mapper vers la mémoire cache les données et les instructions extraites de la RAM, et elles donnent généralement la priorité à certains aspects plutôt qu’à d’autres. Par exemple, réduire le temps de recherche la rend moins précise et diminue la probabilité d’un cache hit. À l’inverse, maximiser les chances d’obtenir un cache hit augmente également le temps de recherche moyen.
Selon les différents compromis entre vitesse et précision, il existe trois types de techniques de mappage du cache.
Mappage direct du cache
Le mappage direct de la mémoire cache est la technique de récupération des informations la plus simple et la plus directe. Avec cette approche, chaque bloc mémoire est affecté à une ligne précise du cache, déterminée par l’adresse donnée par la RAM.
Ainsi, le CPU n’a besoin de rechercher que dans ce bloc unique pour vérifier si les informations nécessaires sont disponibles. Si elles ne s’y trouvent pas exactement, le CPU signale un cache miss et recherche et récupère directement les informations dans la RAM.
Le mappage direct est très inefficace, en particulier sur les appareils aux caractéristiques élevées et lorsque d’importants flux de données et d’instructions arrivent dans la mémoire cache et le CPU.
Mappage associatif du cache
Le mappage associatif du cache est exactement l’opposé de l’approche directe. Lors de la récupération des données et des instructions depuis la RAM, chaque bloc peut être placé sur n’importe quelle ligne de la mémoire cache, ce qui rend son emplacement aléatoire. Lorsque le CPU recherche des informations précises, il doit vérifier l’intégralité de la mémoire cache pour voir si elle contient ce qu’il cherche.
Cette approche produit un taux élevé de cache hits, et le CPU récupère rarement les informations directement depuis la RAM. Cependant, le temps gagné en ne communiquant qu’avec la mémoire cache est perdu à parcourir toutes ses lignes chaque fois qu’une instruction est nécessaire.
Mappage associatif par ensembles
Le mappage associatif par ensembles est un compromis entre le mappage direct et le mappage associatif du cache. Il vise à maximiser les cache hits tout en réduisant le temps de recherche moyen par requête. Pour cela, chaque bloc de données extrait de la RAM ne peut être mappé que vers un nombre limité de blocs distincts de la mémoire cache.
Cette technique est également appelée mappage associatif par ensembles à N voies. Pour chaque information ou instruction, il existe N blocs dans lesquels elle peut être mappée, puis retrouvée par le CPU.
Un système de mappage associatif par ensembles à 2 voies permet à la RAM de placer les données à l’un de deux emplacements dans la mémoire cache. Dans ce scénario, la probabilité d’un cache hit augmente, mais le temps de recherche moyen double, puisque le CPU doit vérifier deux fois plus de blocs potentiels.
Un système de mappage associatif par ensembles à 4 voies offre à la RAM quatre blocs de mappage potentiels ; un système à 8 voies en offre huit, et un système à 16 voies propose 16 possibilités. Plus la valeur de N est élevée, plus les chances d’obtenir un cache hit augmentent, mais plus le temps moyen de récupération d’un bloc de données par le CPU est long.
La valeur de N est ajustée en fonction de l’appareil et de l’usage prévu, afin de trouver un équilibre entre le temps nécessaire et les cache hits.
3 exemples d’utilisation de la mémoire cache
L’utilisation de la mémoire cache n’est pas seulement essentielle pour les appareils sur site et personnels. Elle est également très présente dans les serveurs de centres de données et les offres de cloud computing. Voici quelques exemples de solutions reposant sur la mémoire cache.
Beat
Beat est une application de transport à la demande basée en Grèce, qui compte plus de 700 000 chauffeurs et 22 millions d’utilisateurs actifs dans le monde. Fondée en 2011, elle est aujourd’hui l’application à la croissance la plus rapide d’Amérique latine, principalement en Argentine, au Chili, en Colombie, au Pérou et au Mexique.
Pendant sa période d’hypercroissance, l’application Beat a commencé à subir des interruptions en raison de goulets d’étranglement dans le système de diffusion des données. Elle utilisait déjà AWS et Amazon ElastiCache, mais une mise à niveau de sa configuration était devenue urgente.
« Nous pouvions répartir le trafic entre autant d’instances que nous le souhaitions, en procédant essentiellement à une mise à l’échelle horizontale, ce que nous ne pouvions pas faire avec la solution précédente », a déclaré Antonis Zissimos, responsable senior de l’ingénierie chez Beat. « La migration vers le nouveau mode cluster et l’utilisation de bibliothèques Redis standard plus récentes nous ont permis de répondre à nos besoins de mise à l’échelle et de réduire le nombre d’opérations que nos ingénieurs devaient effectuer. »
En moins de deux semaines, Beat a pu réinitialiser ElastiCache et réduire la charge par nœud de 25 à 30 %, diminuer ses coûts de calcul de 90 % et supprimer 90 % du temps consacré par le personnel à la couche de mise en cache.
Sanity
Sanity est un service logiciel et une plateforme qui aide les développeurs à mieux intégrer les contenus en les traitant comme des données structurées. Basée aux États-Unis et en Norvège, son environnement d’édition open source rapide et flexible, Sanity Studio, prend en charge une interface utilisateur (UI) entièrement personnalisable et un stockage de données hébergé en ligne.
Pour assurer une diffusion rapide et en temps réel des contenus aux développeurs utilisant sa plateforme, Sanity devait optimiser sa distribution. En collaboration avec Google Cloud, l’entreprise s’est tournée vers Cloud CDN pour mettre en cache les contenus sur différents serveurs situés à proximité des principaux fournisseurs d’accès à Internet (FAI) des utilisateurs finaux dans le monde.
« Au cours des deux années où nous avons utilisé Google Kubernetes Engine, il nous a épargné de nombreux problèmes liés à l’évolutivité », a déclaré Simen Svale Skogsrud, cofondateur et directeur technique de Sanity. « Il nous aide à faire évoluer nos opérations pour prendre en charge nos utilisateurs dans le monde entier, tout en gérant des problèmes qui, autrement, nous réveilleraient à 3 heures du matin. »
Sanity est désormais capable de traiter cinq fois plus de trafic avec Google Kubernetes Engine et de prendre en charge la distribution accélérée des données grâce à une infrastructure reposant sur un cache périphérique répartie dans le monde entier.
SitePro
SitePro est une solution logicielle d’automatisation qui offre la capture des données en temps réel à la source grâce à une approche innovante de bout en bout pour les secteurs du pétrole et du gaz. Basée aux États-Unis, cette solution entièrement accessible via Internet contrôlait à un moment donné près de la moitié de la région de production pétrolière la plus riche du pays.
Pour garder le contrôle de cette opération délicate, SitePro a fait appel à Microsoft Azure, en utilisant Azure Cache for Redis, et a réussi à améliorer ses opérations. SitePro est désormais en mesure de commencer à investir dans les technologies vertes ainsi que dans des services et produits plus respectueux de l’environnement.
« Azure Cache for Redis était la seule solution à offrir le débit dont nous avions besoin », a déclaré Aaron Phillips, codirecteur général de SitePro. « Entre Azure Cosmos DB et Azure Cache for Redis, nous n’avons jamais connu de congestion. Ils passent à l’échelle de manière spectaculaire.
« L’évolutivité d’Azure Cache for Redis a joué un rôle majeur dans la rapidité avec laquelle nous avons pu nous implanter dans d’autres secteurs. »
Grâce à Azure, SitePro a pu simplifier son architecture et améliorer considérablement la qualité des données. L’entreprise a désormais éliminé l’écart de synchronisation sans augmenter ses coûts.
En savoir plus : 5 grandes tendances de la gestion de la mémoire
Accélérer les processus des appareils grâce à la mémoire cache
La mémoire cache est un type de matériel de stockage temporaire qui permet au processeur de récupérer à plusieurs reprises des informations et des instructions sans avoir recours à la RAM ou au disque dur. Pour les ordinateurs et les serveurs, ces mémoires sont intégrées à l’appareil et placées aussi près que possible de son cœur afin de réduire les temps de traitement.
Les mémoires cache sont classées par niveau en fonction de leur proximité avec le processeur de l’appareil : L1, L2 et L3, respectivement. En moyenne, chaque appareil contient plusieurs caches de chaque niveau par cœur ; plus leur capacité est grande, plus les calculs de l’appareil sont rapides.
La rapidité dépend également beaucoup de la technique de mappage de la mémoire cache et du fait qu’elle privilégie le temps ou la précision de la recherche d’informations. Il existe trois techniques : le mappage direct, le mappage associatif et le mappage associatif par ensembles.