- La hiérarchie de la mémoire et la conception des structures de données déterminent en grande partie l'utilisation du cache du processeur.
- Le regroupement des données fréquemment utilisées, l'utilisation de conteneurs contigus et les modèles SoA réduisent les échecs de cache et améliorent la latence.
- Sous Windows, la mise à jour du système et des pilotes ainsi que la limitation des processus en arrière-plan libèrent du processeur, de la RAM et du cache.
- L'optimisation logicielle, complétée par des ajustements de consommation d'énergie et, si nécessaire, par des améliorations matérielles, permet d'optimiser les performances globales.
L'optimisation du cache du processeur est l'un de ces sujets qui distinguent un code « fonctionnel » d'un code « ultra-rapide ». En comprenant comment la mémoire est organisée, quels temps d'accès chaque niveau gère et comment le matériel se comporte, nous pouvons obtenir des gains de performance considérables sans changer de machine.
Parallèlement, un nombre important d'utilisateurs Windows rencontrent un problème plus banal : la lenteur de leur PC. Et bien souvent, la cause profonde du problème réside dans une utilisation inefficace de la mémoire, du cache et du processeur lui-même. En combinant une conception de bas niveau optimisée (structures de données, accès mémoire) et des ajustements pratiques dans Windows (nettoyage, mises à jour, modes d'alimentation, etc.), des améliorations très notables peuvent être obtenues, allant de gains modestes de 5 % à des gains de 30 à 40 % dans certains cas.
Hiérarchie de la mémoire et latences : pourquoi les règles du cache
Avant de modifier le code ou de configurer Windows, il est essentiel de comprendre une chose : toutes les mémoires ne se valent pas. La différence d’accès aux caches L1, L2, L3, à la RAM ou au disque est considérable, et de nombreuses optimisations de cache reposent précisément sur le fait d’éviter autant que possible l’accès aux niveaux les plus lents .
Dans un processeur moderne, les temps d'accès typiques (ordre de grandeur) sont approximativement les suivants : un accès au cache L1 prend environ une demi-nanoseconde, un défaut de prédiction de branchement prend plusieurs nanosecondes, l'accès au cache L2 est d'environ 7 ns, tandis que l'accès à la mémoire principale peut dépasser 100 ns. Si l'on considère des périphériques externes à l'ordinateur (réseau, SSD, disque dur mécanique), ces temps d'accès explosent et atteignent des centaines de milliers, voire des millions de nanosecondes.
Cette différence fondamentale explique l'importance cruciale d'une organisation rigoureuse des données, de la réduction des défauts de cache et de la conception de modèles d'accès séquentiels. Une boucle exécutée dans le cache L1 sera nettement plus rapide qu'une boucle accédant constamment à la RAM ou au SSD, même si elles remplissent logiquement la même fonction.
De plus, le cache du processeur est organisé en plusieurs niveaux : L1, très petit et extrêmement rapide ; L2, plus grand et légèrement plus lent ; et L3, encore plus grand et souvent partagé entre les cœurs. L’objectif est de conserver les données les plus fréquemment consultées (les données « chaudes ») à portée de main et de reléguer les autres à des niveaux plus lents. En tant que développeurs, nous pouvons contribuer à ce que cela se produise naturellement grâce à une conception efficace des structures de données et à un accès prévisible.
Qu'est-ce que le cache et pourquoi affecte-t-il les performances ?
Le cache, quel que soit son contexte (processeur, disque, web, etc.), est un stockage rapide des données récemment utilisées . Au lieu d'accéder systématiquement à la source la plus lente, on conserve une copie des données les plus susceptibles d'être réutilisées. Cela réduit le temps de réponse et la charge sur les ressources principales.
De manière générale, la mise en cache sert à accélérer l'accès aux données et à améliorer l'expérience utilisateur. Concrètement, elle permet également au système d'effectuer davantage de tâches avec le même matériel : moins d'attente, moins de blocs et moins de files d'attente. C'est pourquoi elle est utilisée dans les processeurs, les disques, les navigateurs, les systèmes distribués et pratiquement tous les logiciels qui traitent des données de manière intensive.
Un PC classique possède plusieurs types de cache : le cache disque (mémoire vive stockant les données du disque dur), le cache web (ressources statiques du navigateur) et le cache du processeur (L1, L2, L3). Leur principe de fonctionnement est le même : stocker les données susceptibles d’être utilisées ultérieurement, évitant ainsi la répétition d’opérations lentes.
Types de cache : cache disque, cache web et cache processeur
Dans un système réel, plusieurs mécanismes de mise en cache convergent, chacun à son propre niveau. Les comprendre permet d'améliorer la programmation et de diagnostiquer les causes des performances inférieures aux attentes d'un PC.
Cache disque
Le cache disque est une zone de mémoire (généralement la RAM) où le système d'exploitation stocke les données récemment lues ou écrites sur le disque . Lorsqu'une application demande à nouveau ces données, le système vérifie d'abord le cache : si les données s'y trouvent, l'accès est beaucoup plus rapide que l'accès au disque, notamment avec les disques durs mécaniques.
Ce mécanisme réduit considérablement les temps de chargement, diminue le nombre d'opérations physiques de lecture et d'écriture et, par conséquent, prolonge la durée de vie du disque . Dans les scénarios d'accès répétitifs aux mêmes fichiers (bases de données, serveurs, applications gourmandes en ressources), la mise en cache disque fait une différence significative.
Cache Web
Dans votre navigateur, le cache web stocke temporairement les images, les feuilles de style, le JavaScript et d'autres ressources. Cela permet à votre navigateur d' accéder aux informations stockées lorsque vous consultez à nouveau une page ou naviguez entre les sections d'un même site web, sans avoir à les demander à nouveau au réseau.
Le résultat est double : des temps de chargement plus courts pour l’utilisateur et une consommation de bande passante réduite, tant pour votre connexion que pour le serveur hébergeant le contenu. Toutefois, si le cache n’est pas géré correctement, des ressources obsolètes peuvent apparaître ; c’est pourquoi il est parfois conseillé de le vider.
Cache du processeur : niveaux L1, L2 et L3
Le joyau de la couronne en matière de performances est le cache du processeur. Les processeurs modernes intègrent plusieurs niveaux hiérarchiques conçus pour minimiser la latence d'accès aux données et aux instructions. De manière générale, le cache L1 est le plus petit et le plus rapide, le cache L2 est intermédiaire et le cache L3 est le plus grand et le plus lent, souvent partagé.
Le cache L1 est généralement divisé en sections d'instructions et de données, avec une taille typique de quelques dizaines de kilo-octets par cœur. Il est extrêmement rapide et utilisé pour le traitement immédiat. Le cache L2 possède une capacité plus importante (de plusieurs centaines de kilo-octets à plusieurs méga-octets) et sert de sauvegarde au cache L1. Le cache L3 peut atteindre plusieurs méga-octets ou dizaines de méga-octets, est partagé par plusieurs cœurs et constitue le dernier niveau d'accès avant la mémoire vive (RAM).
Lorsque le schéma d'accès à la mémoire est relativement séquentiel et prévisible, le matériel peut l'anticiper et placer les données dans le cache approprié. En revanche, s'il est chaotique, avec des sauts aléatoires et des structures dispersées, le processeur passe trop de temps à attendre la mémoire et s'engorge. C'est là qu'intervient l'optimisation au niveau du code.
Optimiser les structures de données pour la mise en cache du processeur
Les performances dépendent en grande partie de la conception de nos structures de données. Il est bien plus efficace de séparer les données fréquemment utilisées de celles rarement consultées que de gérer un objet volumineux contenant des champs chauds et froids. Chaque ligne de cache accessible au processeur a un coût ; si nous les remplissons de données inutiles, nous gaspillons de la bande passante.
Regroupez les données chaudes et séparez les données froides.
Une stratégie essentielle consiste à identifier les champs d'une structure qui sont consultés presque systématiquement (« données fréquemment utilisées ») et ceux qui ne le sont qu'occasionnellement (« données rarement utilisées »). Les premiers doivent être stockés ensemble en mémoire et, si possible, tenir sur une ou quelques lignes de cache. Les seconds peuvent être stockés dans une structure distincte, référencée par un pointeur ou un index.
Par exemple, au lieu d'avoir un objet utilisateur avec de longues chaînes de caractères (nom, biographie, courriel) mêlées à des indicateurs ou marqueurs constamment vérifiés, il est préférable de regrouper les données les plus fréquemment consultées (identifiant, dernière connexion, statut actif) dans une structure compacte et de conserver le reste des informations dans une structure « détails » distincte. Ainsi, lorsque le code parcourt une liste d'utilisateurs pour vérifier un statut ou un marqueur, les lignes du cache sont presque entièrement remplies de données pertinentes.
Réduisez le remplissage et optimisez l'utilisation de chaque ligne.
Un autre point d'achoppement réside dans la conception physique des structures : l' ordre des champs et leurs types. En raison de problèmes d'alignement, le mélange aléatoire de types de tailles différentes peut introduire des octets de remplissage inutiles, gaspillant ainsi de la mémoire et, pire encore, des lignes de cache.
En réorganisant une structure de données pour regrouper d'abord les types volumineux (par exemple, les nombres à virgule flottante double précision ou les entiers 64 bits), puis les types moyens, et enfin les plus petits (les booléens et les caractères), on réduit généralement, voire élimine, une grande partie du remplissage. Cela permet de stocker davantage d'éléments par ligne de cache, réduisant ainsi la charge sur la hiérarchie mémoire et le risque de défauts de mémoire.
Choisissez des conteneurs adjacents
Les conteneurs qui stockent les éléments dans une mémoire contiguë , tels que les vecteurs, sont généralement beaucoup plus adaptés au cache que les structures basées sur des nœuds épars liés par des pointeurs (arbres, listes chaînées classiques, etc.). Lors du parcours d'un vecteur, le matériel peut parfaitement prédire l'accès suivant et précharger les lignes de cache suivantes.
À l'inverse, les structures comme les tables arborescentes ou les listes chaînées répartissent leurs nœuds dans le tas, obligeant le processeur à effectuer des accès continus au cache. Chaque accès peut entraîner un défaut de cache et un coûteux aller-retour en mémoire principale. C'est pourquoi de nombreuses bibliothèques modernes proposent des tables de hachage denses , des tables ouvertes et d'autres conteneurs qui visent à optimiser la taille des données.
Stockage en ligne pour petites collections
De nombreux algorithmes manipulent de très petites collections (quelques entiers, quelques structures) constamment créées et détruites. Si chacune de ces collections entraîne une allocation mémoire sur le tas, cela engendre non seulement des coûts de gestion de la mémoire, mais aussi une dispersion des données dans la RAM. La solution consiste à utiliser des conteneurs avec stockage en ligne pour les petites collections.
Ce type de conteneur réserve de l'espace pour 8 ou 16 éléments directement au sein de l'objet. Tant que cette limite n'est pas dépassée, il n'est pas nécessaire d'accéder au tas, et les données restent associées à l'état de la fonction ou de la classe, ce qui est très avantageux pour la mise en cache.
Modèles d'accès : de l'AoS à la SoA et l'utilisation des ensembles de bits
Même avec des caches bien structurés, le mode d'accès aux données détermine en grande partie les performances. Parcourir un tableau séquentiellement n'est pas équivalent à passer d'une adresse à une autre à l'aide d'une liste de pointeurs. Il existe des techniques récurrentes pour optimiser l'utilisation du cache.
Réseau de structures (AoS) vs Structure de réseaux (SoA)
Un exemple classique est le passage d'une architecture de type « tableau de structures » (AoS) à une architecture de type « structure de tableau » (SoA). Dans une AoS, chaque élément est un objet comportant de nombreux champs (par exemple, la position et la masse d'une particule), et ces éléments sont stockés séquentiellement. Lorsqu'il suffit de lire une partie de ces champs (par exemple, la position), on est contraint de charger des lignes de cache contenant également des données inutilisées.
En revanche, dans l'architecture SoA, les différents attributs sont répartis dans des tableaux parallèles : un pour x, un autre pour y, un autre pour z, un autre pour la masse, etc. Ainsi, si un algorithme ne fait que mettre à jour les positions, il accède uniquement aux tableaux de coordonnées, et le cache n'est pas encombré d'informations inutiles . De plus, cette conception favorise la vectorisation et l'utilisation des instructions SIMD.
Bitsets et références par index
Pour les petits domaines (par exemple, les indicateurs compris entre 0 et 255), l'utilisation d'un ensemble de bits est bien plus efficace qu'une structure d'ensemble basée sur le hachage. Un ensemble de bits de 256 positions n'occupe que quelques dizaines d'octets et permet des opérations très rapides, entièrement contiguës et optimisées pour le cache, évitant ainsi la résolution des collisions dans une table de hachage.
De même, le remplacement des pointeurs par des indices dans des tableaux contigus permet de réduire la taille des structures (indices 32 bits au lieu de pointeurs 64 bits) et d'améliorer la cohérence du cache. Au lieu de nœuds répartis dans le tas, un vecteur de nœuds est stocké et accessible par leur position, ce qui facilite le parcours séquentiel.
Préchargement : quand anticiper le travail
Outre le préchargement matériel, qui tente d'anticiper les schémas d'accès séquentiels, il existe des instructions de préchargement logiciel permettant d' accélérer le chargement des données dans certains cas spécifiques. Cela s'avère pertinent lorsque le schéma est prévisible mais non strictement linéaire, comme c'est le cas pour les tables de hachage ou les listes chaînées.
L'idée générale est simple : lors du traitement de l'élément i, on demande au matériel de charger l'élément i+1 (ou un bloc ultérieur) dans le cache. Lorsque cet élément est atteint, la probabilité qu'il soit déjà présent dans les caches L1 ou L2 est élevée, ce qui réduit le temps d'attente. Ceci peut être implémenté à l'aide de primitives de préchargement du compilateur ou de bibliothèques spécifiques.
Cependant, il est inutile d'utiliser la prélecture explicite pour des accès totalement séquentiels, car le matériel la gère déjà automatiquement. En réalité, ajouter une prélecture superflue peut encombrer le cache et dégrader les performances. Comme c'est presque toujours le cas en matière de performances, il est préférable de mesurer les résultats avant et après.
Politiques de mise en cache de l'emplacement, du remplacement et de la prélecture
D'un point de vue plus théorique, les systèmes de cache reposent sur des règles définissant où stocker les données, quand les récupérer et quelles données supprimer en cas de manque d'espace. Bien que ces détails soient gérés par le matériel ou le système d'exploitation, leur compréhension facilite l'interprétation de certains comportements inhabituels.
Concernant l'emplacement, on peut utiliser la segmentation mémoire ou l'allocation par ensembles associatifs, où chaque adresse mémoire principale ne peut correspondre qu'à un sous-ensemble du cache. Cela influe sur le nombre de conflits et la probabilité que deux adresses se chevauchent dans le cache.
Concernant la vidange du cache (lorsqu'une donnée est manquante), différentes politiques de remplacement entrent en jeu : LRU (Least Recently Used), FIFO, ou encore remplacement aléatoire. LRU conserve les données les plus récemment utilisées dans le cache, en supposant qu'elles seront de nouveau nécessaires, tandis que FIFO supprime simplement les données les plus anciennes. Chaque politique présente des avantages selon le modèle d'accès.
Dans la section de préchargement, des mécanismes s'appuient sur l'historique des accès : si le matériel détecte que chaque accès décale systématiquement 64 octets, par exemple, il privilégiera le préchargement de blocs contigus . Dans d'autres cas, le préchargement d'espace (chargement d'un bloc entier même si seule une partie a été demandée) permet de minimiser le nombre d'accès à la mémoire principale.
Mesure et profilage du comportement du cache
Optimiser sans mesurer, c'est comme avancer à l'aveugle. Il existe des outils d'analyse de performance qui permettent de visualiser des indicateurs de cache spécifiques : références, défauts de cache de niveau 1, défauts de cache de dernier niveau (LLC), pourcentage de défauts, etc. Ces indicateurs permettent de déterminer si vos modifications améliorent réellement la situation.
Par exemple, un taux d'échecs de cache L1 d'environ 2 à 3 % est généralement considéré comme acceptable, tandis que des taux d'échecs très élevés dans le cache de dernier niveau peuvent indiquer des problèmes de localité spatiale ou temporelle . La combinaison de ces données avec les profils d'utilisation du processeur et de la mémoire permet d'identifier les parties du code qui sollicitent le plus la hiérarchie mémoire.
Optimisation du cache et des performances sous Windows
Au-delà du code lui-même, de nombreux utilisateurs s'interrogent sur la lenteur de leur PC Windows, malgré la présence, « en théorie », d'un bon processeur et d'une bonne quantité de RAM. Une partie de la réponse réside dans le fait que le système d'exploitation, les applications installées et les fichiers inutiles accumulés consomment constamment du processeur, de la mémoire et du cache , réduisant ainsi les ressources disponibles pour les tâches importantes. En appliquant certaines optimisations spécifiques sous Windows 10 et Windows 11, il est possible de libérer des ressources processeur et RAM ( par exemple, en configurant la mémoire virtuelle ), de réduire les processus en arrière-plan et d'améliorer la capacité du système à mettre en cache les données pertinentes. Selon la configuration initiale, ces améliorations peuvent aller de simples ajustements à des changements significatifs des performances globales.
Mettre à jour Windows et les pilotes
Une étape fondamentale souvent négligée consiste à maintenir à jour le système d'exploitation et les pilotes. Les mises à jour Windows ne se limitent pas aux correctifs de sécurité : elles incluent fréquemment des améliorations de la gestion des ressources , la correction des fuites de mémoire et l'optimisation du noyau.
Dans le panneau de configuration Windows (Démarrer > Paramètres > Mise à jour et sécurité > Windows Update), vous pouvez rechercher les mises à jour générales et les modules optionnels, notamment les pilotes non critiques qui optimisent les performances de votre processeur, de votre carte graphique ou de votre chipset. L'installation de ces composants peut résoudre les problèmes de performances et de stabilité qui affectent directement l'utilisation du cache et de la mémoire.
Désactiver la distribution P2P des mises à jour
Depuis Windows 10, le système peut télécharger et partager les mises à jour via un mécanisme P2P avec d'autres ordinateurs. Bien qu'ingénieux, ce système a pour conséquence de mobiliser le processeur, le réseau et l'espace disque de l'ordinateur pour la distribution des mises à jour, ce qui n'est pas toujours souhaitable.
La désactivation de l'« Optimisation de la distribution » dans Windows Update empêche votre PC de diffuser ou de télécharger des fragments de mise à jour vers d'autres ordinateurs. Cela libère des ressources, réduit l'activité en arrière-plan et peut améliorer les performances globales, notamment sur les systèmes moins puissants.
Libérez de l'espace disque et supprimez les fichiers inutiles
Lorsque votre disque dur est plein ou presque plein, Windows dispose de moins d'espace pour la pagination et la création de fichiers temporaires, ce qui a un impact sur les performances. L'outil Nettoyage de disque intégré vous permet de supprimer les fichiers temporaires, les résidus de mises à jour, les éléments de la Corbeille et autres données inutiles.
Outre cet outil de nettoyage, il est conseillé de vider régulièrement la Corbeille et d'utiliser les options de stockage Windows pour supprimer les fichiers temporaires accumulés. Moins il y a d'espace disponible sur le disque système, plus le sous-système de mémoire fonctionnera efficacement et plus le cache disque sera performant.
Optimiser les programmes de démarrage et d'arrière-plan
L'un des plus grands ennemis du processeur et du cache d'un PC utilisé quotidiennement est constitué par les programmes qui démarrent automatiquement et s'exécutent en arrière-plan : synchroniseurs, mises à jour, petits utilitaires que nous utilisons à peine, etc. Bien qu'ils puissent paraître légers, chacun d'eux ajoute des threads, de la mémoire, des accès disque et de la consommation de cache.
Depuis le Gestionnaire des tâches ou via Sysinternals pour surveiller les processus , dans l'onglet Démarrage, vous pouvez désactiver le lancement automatique des applications inutiles. Vous pouvez également contrôler les applications autorisées à s'exécuter en arrière-plan dans les paramètres de confidentialité. Réduire cette liste améliore non seulement le temps de démarrage, mais diminue aussi la charge continue sur le processeur et la mémoire vive.
Réduire les effets graphiques et les notifications
Les animations de fenêtres, les transparences et autres effets visuels consomment des ressources. Sur les ordinateurs anciens ou peu puissants, il peut être judicieux d'ajuster les paramètres Windows pour privilégier les performances à l'esthétique. Pour ce faire, accédez aux options avancées du système, dans la section « Performances », et sélectionnez la configuration qui privilégie la vitesse.
De même, un trop grand nombre de notifications peut surcharger l'utilisateur et l'appareil . Désactiver les alertes inutiles simplifie l'expérience utilisateur et évite l'exécution trop fréquente des processus et vérifications en arrière-plan.
Modes d'alimentation, hibernation et performances maximales
Windows propose plusieurs modes de gestion de l'alimentation qui influent directement sur le fonctionnement du processeur : ils privilégient soit l'autonomie de la batterie, soit les performances pures. Sur les ordinateurs de bureau et portables branchés sur secteur, il est généralement conseillé de vérifier ces paramètres.
Le démarrage rapide combine les fonctionnalités d'arrêt et de mise en veille prolongée pour accélérer le démarrage en préchargeant une partie du noyau et des pilotes avant l'arrêt du système. Son activation peut réduire considérablement le temps de démarrage, mais il est conseillé de la désactiver temporairement si elle entraîne des problèmes de mise à jour ou d'accès au BIOS.
En revanche, un mode « performances maximales » caché force le processeur et les autres composants à fonctionner au détriment de l'efficacité énergétique. Son activation peut offrir une marge de manœuvre supplémentaire pour les tâches intensives, mais au prix d'une augmentation de la chaleur, du bruit du ventilateur et de la consommation électrique.
Gestion efficace de l'espace et de la mémoire dans le système
Outre le nettoyage régulier et le contrôle des programmes résidents, il existe d'autres moyens d'optimiser l'utilisation des ressources physiques de l'ordinateur et, par conséquent, du processeur et du cache disque.
Un bureau encombré d'icônes, de raccourcis, de dossiers et de fichiers n'est pas seulement un désordre visuel : Windows doit gérer tout cela, ce qui représente une charge de travail supplémentaire. Garder son bureau propre et organiser ses fichiers dans des dossiers sur ses disques durs est une pratique simple qui contribue à un environnement plus léger.
Il est également utile de recourir à des solutions de stockage en nuage pour certains fichiers, ce qui réduit l'espace de stockage local utilisé. À condition que cette pratique soit judicieuse (sans dépendre entièrement de la connexion Internet), le système local est moins sollicité et gagne en flexibilité.
Technologies spécifiques : ReadyBoost, overclocking et matériel
Sur les ordinateurs dotés d'un disque dur mécanique et d'une mémoire vive limitée, Windows intègre des technologies comme ReadyBoost, qui permet d'utiliser une clé USB rapide comme cache supplémentaire. Bien qu'il ne s'agisse pas d'une solution miracle, dans certaines configurations, cette technologie peut améliorer les performances en allégeant la charge du disque dur.
À l'autre extrémité du spectre, les utilisateurs avancés peuvent overclocker leur processeur à l'aide d'outils comme Intel Extreme Tuning Utility (pour les processeurs débloqués). L'augmentation de la fréquence d'horloge améliore les performances, mais accroît également la température et la consommation d'énergie, avec un risque réel d'instabilité et de dommages si la tension et le refroidissement ne sont pas gérés avec soin.
Lorsque toutes les optimisations logicielles s'avèrent insuffisantes, il est temps d'envisager une mise à niveau matérielle : remplacer le disque dur par un SSD, augmenter la mémoire vive, voire changer le processeur ou l'ensemble du système. Un SSD, en particulier, transforme les performances perçues du système, car il réduit considérablement les temps d'accès au disque, ce qui permet au cache disque et à la mémoire virtuelle de fonctionner de manière beaucoup plus fluide.
En résumé, combiner une bonne conception des structures de données et des modèles d'accès à la mémoire pour exploiter le cache du processeur avec une configuration Windows soignée (à jour, léger, sans processus inutiles ni superflus, avec le mode de gestion de l'alimentation approprié et, si nécessaire, avec de petites améliorations comme ReadyBoost ou des améliorations matérielles) permet de tirer beaucoup plus de la même machine, d'obtenir des applications réactives et un système sensiblement plus rapide sans avoir recours à de la « magie » ou à des astuces ésotériques.
Sommaire
- 1 Hiérarchie de la mémoire et latences : pourquoi les règles du cache
- 2 Qu'est-ce que le cache et pourquoi affecte-t-il les performances ?
- 3 Types de cache : cache disque, cache web et cache processeur
- 4 Optimiser les structures de données pour la mise en cache du processeur
- 5 Modèles d'accès : de l'AoS à la SoA et l'utilisation des ensembles de bits
- 6 Préchargement : quand anticiper le travail
- 7 Politiques de mise en cache de l'emplacement, du remplacement et de la prélecture
- 8 Mesure et profilage du comportement du cache
- 9 Optimisation du cache et des performances sous Windows
- 10 Modes d'alimentation, hibernation et performances maximales
- 11 Gestion efficace de l'espace et de la mémoire dans le système
- 12 Technologies spécifiques : ReadyBoost, overclocking et matériel