Assiste.com - Sécurité informatique - Vie privée sur le Web - Neutralité d'Internet

cr  01.04.2012      r+  22.10.2024      r-  22.10.2024      Pierre Pinard.         (Alertes et avis de sécurité au jour le jour)

14 Octobre 2024

Le PreFetch (termes associés : PreFetcher, Prefetching) est un mécanisme accélérateur, breveté par Microsoft le 27 février 2001, dans les systèmes d'exploitation Microsoft Windows. Il a été initialement introduit dans la version XP de ce système, sortie le 25 octobre 2001. Il fait partie des mécanismes d'accélération par l'anticipation, comme les caches, (caches navigateurs, caches disques, caches DNS, cache du résolveur DNS, etc.) et est toujours implanté dans les versions actuelles de Windows (10 et 11). Ce mécanisme le sera probablement dans Windows 12 qui, si l'on en croit certaines rumeurs, devrait sortir maintenant.





Prefetch - Qu'est-ce que c'est ?

Le « PreFetch » est physiquement représenté par un sous-répertoire du répertoire Windows (généralement C:\Windows\Prefetch).

« PreFetch » est un mot du jargon informatique anglais constitué du préfixe « Pre » (en français « Pré » qui signifie avant ou antérieur) et du verbe transitif « Fetch » (qui signifie, en français, « aller chercher » ou « rapporter »).

Le « PreFetch » relève donc d'un principe général d'anticipation et d'accélération : le « PreFetching » (comme le sont les « Anté-mémoire » plus connues sous le nom de « Cache »). Il s'agit de ne pas rechercher à nouveau quelque chose qui a déjà été cherché et trouvé.

Le « PreFetcher » est donc un mécanisme accélérateur, dans le système d'exploitation pour ordinateurs « Windows » de Microsoft, introduit avec la version XP de ce système.

Il s'agit d'un composant du gestionnaire de mémoire, qui :

  1. Réduit la quantité de temps qu'il faut pour démarrer les programmes (code 1 du PrefetchParameters)

  2. Accélère le démarrage de Windows (code 2 du PrefetchParameters)

  3. Accélère le démarrage de Windows ET réduit le temps de démarrage des applications - les deux à la fois (code 3 du PrefetchParameters).

Cette fonction est couverte, depuis le 27 février 2001, par le brevet américain 6.633.968. On peut lire ce brevet (en anglais) pour le détail du fonctionnement du « PreFetch ».

À partir de Windows Vista, le 30 janvier 2007, « SuperFetch » et « ReadyBoost » étendent le « PreFetcher » et tentent d'accélérer les temps de démarrage et de lancement des applications (code 1), respectivement, par :

  1. Le suivi et l'adaptation aux habitudes d'utilisations (aux habitudes de l'utilisateur), sur des cycles de temps
    (C'est cela qui justifierait, éventuellement, non pas la « Suppression des vieilles données du Prefetch », [comme le fait CCleaner, action imbécile s'il en est], mais la désactivation complète du prefetching, car ces données sont des statistiques d'utilisation des applications, donc, des informations utilisables dans cette forme d'espionnage pudiquement appelée tracking conduisant au profiling des internautes).

  2. Le préchargement en mémoire de la majorité des fichiers et des données nécessaires, afin qu'ils soient accessibles très rapidement en cas de besoin.
    (C'est cela qui justifierait, théoriquement (en cas de grave manque de mémoire RAM), non pas la « Suppression des vieilles données du Prefetch », [comme le fait CCleaner, action imbécile s'il en est], mais la désactivation complète du prefetching, car la trop petite mémoire RAM est encombrée de programmes préchargés, qui n'ont rien à faire là, ralentissent, éventuellement, les autres programmes, et doivent être éjectés dans la mémoire virtuelle de Windows [le fichier pagefile.sys].
    Vous êtes encourragés à lire l'article « Le fichier pagefile.sys » pour comprendre que ce sont les données qui occupent « le fichier pagefile.sys » et sont l'objet d'entrées / sorties de la RAM (de swapp-in et swapp-out), pas les programmes qui, eux, sont déjà enregistrés sur disque, là où ils ont été installés, et ne sont l'objet que de swapp-in, jamais de swapp-out). En sus, il s'agit d'une hypocrisie de la société Microsoft, car ce sont les applications Microsoft qui sont préchargées, donnant l'impression trompeuse de démarrer plus rapidement que les applications concurrentes).

Mark Russinovich écrit, à propos de « SuperFetch » :

Il stocke ces informations dans des fichiers de scénario ayant une extension .db dans le répertoire %SystemRoot%\Prefetch, en compagnie des fichiers de prérécupération standard utilisés pour optimiser le lancement des applications. Grâce à cette connaissance approfondie de l'utilisation de la mémoire, « SuperFetch » peut précharger les données et le code lorsque la mémoire physique devient disponible.
Blog de Mark Russinovich.

On notera qu'en cas d'insuffisance de mémoire RAM, le bénéfice du « PreFetch » est perdu, car le préchargement retourne sur disque dur, dans un autre espace disque servant de « mémoire virtuelle de Windows ».

Accélérer considérablement un ordinateur de type PC sous Windows (démarrage, fonctionnement, fermeture) consiste, en tout premier moyen, loin devant tous les autres, à ajouter de la mémoire RAM, beaucoup de mémoire RAM, le plus possible (ce qui ne coûte pas très cher).

À partir de Windows 7 (qui effectue une défragmentation continue en tâche de fond par l'intermédiaire du « Planificateur de tâches » - Défragmentation automatique à partir de Windows Vista et 7), le « PreFetch » interagit avec le défragmenteur de Windows pour optimiser l'emplacement physique des fichiers sur la surface magnétique afin de diminuer les temps mécaniques de déplacement des têtes au-dessus de la surface du disque (tous les fichiers utilisés au démarrage de Windows sont disposés, sur le disque système, de manière séquentielle, afin de ne pas provoquer de déplacement des têtes de lecture). Si le « Planificateur de tâches » est désactivé, cette partie du mécanisme du « PreFetch » ne fonctionnera pas.

D'autre part, c'est le « Planificateur de tâches » qui prend en charge l'analyse des données recueillies par le « PreFetch ». Là encore, le « Planificateur de tâches » doit être actif pour un bon fonctionnement du « PreFetch ».

Prefetch - Ne jamais supprimer les données du Prefetch

Windows maintient les données du PreFetch dans un tout petit répertoire (normalement C:\Windows\Prefetch) et limite ces données aux 128 derniers programmes utilisés, de telle sorte que les anciennes données du Prefetch sont toujours et automatiquement écrasées au profit des plus récentes. La taille de ce répertoire est totalement marginale (quelques M/O). Détruire les fichiers qu'il contient provoque un très net ralentissement de Windows (parfois un véritable écroulement de vitesse) contre un gain totalement dérisoire de place disque de quelques M/O.

Ne supprimez jamais les fichiers du « PreFetch », ni manuellement ni avec un outil (par exemple, ne cochez jamais la case « Vieilles données du Prefetch » dans CCleaner). C'est un mythe et une pure imbécilité ! Le principe d'anticipation et d'accélération serait perdu et le comportement de Windows (démarrage et fonctionnement) serait ralenti (exactement l'inverse de l'effet recherché !). Lire :

  1. Prefetch Mythe 1 (One more time: do not clean out your Prefetch folder!)
  2. Prefetch Mythe 2 (Beware of Bogus XP Advice)
  3. Prefetch Mythe 3 (Tip of the day: Don't clean out the Prefetch folder)
  4. Prefetch Mythe 4 (Debunking yet another bogus Windows tip)
  5. Prefetch Mythe 5 (Microsoft developer - Misinformation and The Prefetch Flag)
  6. Prefetch Mythe 6 (Mark Russinovitch dans MSDN Magazine - Windows XP: Kernel Improvements Create a More Robust, Powerful, and Scalable OS)
  7. Prefetch Mythe 7 (Old myths never die)
  8. Prefetch Mythe 8 (The Prefetch Myth)

Prefetch et son nettoyage avec CCleaner

Le bien connu et très utilisé CCleaner aussi s'était fait piéger avec le mythe de l'effacement du « PreFetch », dans ses toutes premières versions. Il a, depuis, avec sa version 1.32.345 du 11 août 2006, déplacé l'option de nettoyage du « PreFetch » dans une zone réservée aux manipulations « avancées » (risquées) auxquelles il vaut mieux ne jamais toucher. En sus, CCleaner n'efface que les données qui ont plus de 14 jours (dites « vieilles »), ce qui est complètement ridicule, car :

  1. Windows conserve les données de « PreFetching » des 128 derniers programmes utilisés. Pas plus ! Il est totalement improbable qu'en 14 jours vous ayez utilisé plus de 10 ou 20 programmes différents. Donc, effacer les données méticuleusement élaborées par Windows, mais qui ont plus de 14 jours est une imbécilité qui va pénaliser le lancement des applications dont vous avez un usage plus épisodique. Tout ça pour quoi ? Pour gagner 1 ou 2 M/O sur le Disque dur ? Réfléchissez un peu avant de cliquer !

  2. Si vous utilisez plus de 128 programmes différents en 14 jours, Windows élimine de lui-même les données les plus vieilles pour ne conserver que les plus récentes. Effacer les données du Prefetch avec CCleaner, dans ce cas, équivaut à pisser dans un violon !

Gestion du Prefetch par CCleaner - Anciennes versions de CCleaner
Gestion du Prefetch par CCleaner
Anciennes versions de CCleaner
Gestion du Prefetch par CCleaner - Nouvelles versions de CCleaner
Gestion du Prefetch par CCleaner
Nouvelles versions de CCleaner

Prefetch – Mesure du gain de place (ou, pourquoi il ne sert strictement à rien de toucher au Prefetch)

Il y a quelques années, j'ai fait comme tout le monde, j'ai effacé, un jour, les « Vieilles données du Prefetch », avec CCleaner. Ce fut une catastrophe particulièrement sensible, au point que j'ai craint d'avoir fait une très grosse bêtise. Il y eut, dès le prochain redémarrage, un ralentissement intégral du démarrage de Windows et du démarrage de chacune de mes applications. Il a fallu presque un mois à mon ordinateur pour retrouver une vitesse de croisière. J'ai donc chercher à comprendre quelle place j'allais gagner, sur mon disque système, en échange d'une perte de performances considérable, car, c'est bien là que se situe l'objectif : gagner de la place sur le disque système.

Voici donc l'intégralité du volume occupé par les fichiers et répertoires du Prefetch sur un ordinateur dont le Prefetch n'a jamais été touché depuis son achat (3 ans).

Taille totale des données du Prefetch
Taille totale des données du Prefetch

Et voici la remarquable taille libérée sur le disque système par la suppression des « Vieilles données du Prefetch », c'est-à-dire par l'effacement des fichiers de plus de 14 jours : moins de 3,5 MO contre l'écroulement des temps de démarrage des applications et de Windows !

Dans cet exemple, calculé le 01.10.2013, toutes les notes de plus de 14 jours prises par Windows, soit toutes les notes antérieures au 16.09.2013, seront détruites, entraînant un écroulement de la vitesse de démarrage de Windows et de la vitesse de chargement des applications. Mais... j'aurais gagné 3,5 MO de place sur mon disque système, soit le remarquable équivalent de 2,5 disquettes ! Je parie qu'il y en a qui ne savent même pas ce qu'étaient les disquettes ! Ces notions de « Vieilles données du Prefetch », et de leur destruction, sont tellement « crétines » que l'on se demande comment une telle légende arrive à survivre ! Combien, ne connaissant strictement rien au Prefetch, colportent et amplifient cette rumeur oh combien stupide et révoltante !

Gandi - La Jeune Inde (1924)

Gandi

« L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie; la vérité ne devient pas erreur parce que nul ne la voit. »




Le choix est vite fait : on ne touche jamais aux prétendues « Vieilles données du Prefetch », expression imbécile inventée par CCleaner, probablement sous la pression d'utilisateurs obnubilés par le gain du moindre bit, et ne comprenant absolument rien au fonctionnement du Prefetch en particulier et de Windows en général. Cette notion de « Vieilles données du Prefetch » est une véritable légende urbaine, devenue impossible à tuer tant il y a de certitudes et tant il y a de vacuité du savoir.

Taille totale récupérée par la suppression des " vieilles données " du Prefetch
Taille totale récupérée par la suppression des « vieilles données » du Prefetch

Prefetch – Ne jamais désactiver le Prefetch

Ne désactivez pas le « PreFetch » – passez-le en code 1 ou 2 au lieu de 3 si vous le souhaitez (mais on ne voit pas pourquoi).

Localisation du paramètre de comportement du « PreFetch » dans le Registre Windows :
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Memory Management \ PrefetchParameters

Nom de la valeur à modifier :

  • « EnablePrefetcher »

Valeurs possibles :

  • 0 : Prefetch désactivé (ne jamais utiliser ce code).

  • 1 : Prefetch activé pour optimiser le démarrage des applications (à tester et à comparer avec la valeur 2 pour voir quelle est la meilleure solution chez vous, dans votre contexte).

  • 2 : Prefetch activé pour optimiser le démarrage de Windows (à tester et à comparer avec la valeur 1 pour voir quelle est la meilleure solution chez vous, dans votre contexte).

  • 3 : Prefetch activé pour optimiser le démarrage de Windows et des applications (valeur par défaut – valeur recommandée).

Aucune autre valeur ne doit être utilisée. Elle n'aurait aucun effet.

Brevet Microsoft sur le Prefetching

Brevet Microsoft sur le Prefetching - Prefetch 1
Brevet Microsoft sur le
Prefetching - Prefetch 1
Brevet Microsoft sur le Prefetching - Prefetch 2
Brevet Microsoft sur le
Prefetching - Prefetch 2
Brevet Microsoft sur le Prefetching - Prefetch 3
Brevet Microsoft sur le
Prefetching - Prefetch 3
Brevet Microsoft sur le Prefetching - Prefetch 4
Brevet Microsoft sur le
Prefetching - Prefetch 4

Windows - Compression disque et accélération

La compression disque n'a rien à voir avec la défragmentation. Il s'agit d'un processus Windows résident en mémoire et compressant les données à la volée, avec un algorithme de compression, avant de les écrire sur disque et les décompressant à la volée au moment de leur lecture.

Je n'utilise pas la compression disque pour deux raisons :

  1. Je n'ai pas envie d'ajouter une couche de difficultés additionnelles en cas de problème, matériel ou logiciel, pour récupérer mes données. Est-ce de la prudence ou suis-je frileux ?

  2. Le prix des disques durs de très haute capacité est devenu abordable/dérisoire depuis longtemps.

Mais, répondons à la question : Est-ce que la compression a une incidence sur la vitesse et dans quel sens ?

Dans son brevet sur le « PreFetch » (US6317818 B1 déposé le 30 mars 1999 par Microsoft Corporation), Microsoft explique que les fichiers du Prefetch seraient plus performants s'ils étaient d'un seul tenant (sans fragmentation) et recommande donc de pratiquer régulièrement la défragmentation, qui peut être paramétrée pour être automatique (à partir de Windows 7, la défragmentation est automatique et s'exécute en arrière-plan).

Microsoft ajoute ceci, à propos de la compression / décompression (les nombres et taux indiqués étant ceux connus à l'époque du dépôt de brevet, le 30 mars 1999) :

  • Les algorithmes de compression atteignent une moyenne de 50% de compression du volume de données et ont une capacité de décompression qui se mesure à 25 MO/s en n'utilisant que 64 KO de mémoire. Les vitesses de transfert disque sont en moyenne de 8 MO/s. Donc, dans un scénario où il a 3 MO de données du Prefetch :

    • Sans compression : 0.012 s (déplacement des têtes de lecture)+3 MO/8 MB/s (lecture)=0.3870 s.

    • Avec une compression disque diminuant de 50% la quantité de données à transférer :
      0.012 s (déplacement des têtes de lecture)+1.5 MO/8 MB/s (lecture)+3 MO/25 MB/s (décompression)=0.3195 s.

Donc, il y a une accélération de 17.5% de cette partie de la gestion du Prefetch lorsque l'on compresse les données sur le disque dur et que cette compression atteint un taux de 50%.

Calcul d'une accélération possible, dans certains cas, selon Microsoft (dans son dépôt de brevet sur le Prefetch)

Further, an exemplary embodiment includes a disk compressor/decompressor. Well-known compression algorithms may be employed to achieve approximately 50% compression with 25 MB/s decompression throughput. These results may be achieved with as little as 64 KB extra memory. Average disk transfer rates are about 8 MB/s. So, for an illustrative 3 MB pre-fetch scenario, comparative pre-fetch times are as follows:

No compression: 0.012 s (seek)+3 MB/8 MB/s (read)=0.3870 s.

50% compression: 0.012 s (seek)+1.5 MB/8 MB/s (read)+3 MB/25 MB/s (decompress)=0.3195 s.

Thus, there is a 17.5% improvement in pre-fetch time using 50% compression.


Prefetch et Defragmentation - Intérêt de la défragmentation.

On peut lire, dans le dépôt de brevet « Pre-fetching of pages prior to a hard page fault sequence » (US6317818 B1 déposé le 30 mars 1999 par Microsoft Corporation) pour le mécanisme de préchargement des pages avant une séquence d'erreur matérielle de page (" erreur de page " signifiant que la ressource demandée ne se trouve pas dans la mémoire RAM) :

« La prélecture des fichiers de scénario (du prefetching) peut être effectuée de manière plus efficace lorsque les fichiers de scénarios (du prefetching) sont physiquement stockés de manière contiguë sur le disque. De nombreux systèmes d'exploitation disponibles comprennent un défragmenteur de disque. Par exemple, le système d'exploitation Windows NT, fabriqué et produit par la société Microsoft de Redmond, Washington, permet la défragmentation des fichiers non compressés, dans les limites de 8 KO à 64 KO du système de fichiers NTFS (selon la taille du disque et les paramètres utilisateur). Ces défragmenteurs, disponibles, sont suffisants pour le fonctionnement de l'invention. Conformément à un exemple de réalisation, le défragmenteur peut être déclenché automatiquement pendant les temps morts. »