# Prefetcher

Prefetcher (traduction littérale: prélecteur) est un composant du système d'exploitation Windows qui a été introduit dans Windows XP. Il s'agit d'un composant du gestionnaire de mémoire qui accélère le démarrage de Windows et des programmes utilisés.
Le prefetcher accélère le démarrage de Windows ou d'un programme en mettant en cache dans la mémoire vive certaines informations qui sont nécessaires au démarrage, consolidant ainsi les lectures disque et réduisant les mouvements du bras du disque. Cette technique est couverte par le brevet américain 6,633,968. Une explication détaillée de la technique se trouve sur la page MSDN Windows XP: Kernel Improvements Create a More Robust, Powerful, and Scalable OS page du site de Microsoft.
Depuis Windows Vista, le Prefetcher a été amélioré par les techniques SuperFetch et ReadyBoost. SuperFetch accélère le démarrage d'une application par le suivi et l'adaptation aux habitudes d'utilisation de l'application sur une période de temps et la mise en cache dans la mémoire vive de la majorité des fichiers et des données nécessaires au lancement afin que ces informations soient accessibles très rapidement. ReadyBoost (lorsqu'il est activé) utilise de la mémoire externe comme une mémoire flash pour étendre la mémoire cache du système au-delà de la mémoire vive de l'ordinateur. ReadyBoost possède également un composant appelé ReadyBoot qui remplace le prefetcher pour le processus de démarrage si le système dispose de 700 Mo ou plus de mémoire vive.

## Fonctionnement

Quand un système Windows démarre, les composants de nombreux fichiers doivent être lus en mémoire et traités. Souvent les différentes parties d'un même fichier (par exemple, d'une ruche de la base de registre de Windows) sont chargées à des moments différents. En conséquence, une quantité importante de temps est consacrée à « sauter » d'un fichier à un autre et à revenir à un fichier lu partiellement antérieurement. Il est évidemment plus efficace de lire un fichier une seule fois. Le prefetcher regarde les données lues pendant le processus de démarrage (y compris les données lues dans la Master File Table NTFS) et enregistre cette information dans un fichier de traces qui identifie toutes les informations lues lors du démarrage. Le prefetcher continue ce processus d'enregistrement de traces jusqu'à 30 secondes après le démarrage du bureau de l'utilisateur, ou jusqu'à 60 secondes après l'initialisation des services Windows, ou jusqu'à 120 secondes après le démarrage du système, selon le processus qui se termine en premier.
Par la suite, les démarrages peuvent utiliser le fichier de traces pour charger le code et les données de manière plus efficace (par exemple, lors d'un accès à un fichier, le système lit immédiatement et conserve en mémoire vive les données dont il aura besoin plus tard ; lorsque le système a besoin de ces données, il est plus rapide de les lire de la mémoire vive plutôt que d'aller les chercher sur le disque dur).
Le processus de prefetch pour une application fonctionne d'une façon similaire, mais dans ce cas, seules les 10 premières secondes d'activité de l'application sont surveillées pour construire le fichier de traces. Windows conserve des fichiers de traces pour les 120 programmes les plus récemment utilisés.
Le prefetcher enregistre ses fichiers de traces dans le dossier Prefetch du dossier Windows (généralement C:\Windows\Prefetch). Le nom du fichier de traces de démarrage de Windows est toujours NTOSBOOT-B00DFAAD.PF. Les noms des fichiers de traces des applications sont une concaténation du nom de l'exécutable de l'application, d'un trait d'union, d'une représentation hexadécimale de la valeur de hachage du chemin d'accès du fichier et de l'extension de fichier .pf.
Le planificateur de tâches (Task Scheduler) est le processus responsable de l'analyse des traces recueillies par le prefetcher et de l'écriture des fichiers dans le dossier prefetch. En conséquence, la prefetcher ne fonctionnera pas correctement si le planificateur de tâches n'est pas démarré.
Pour améliorer encore plus les temps d'accès, le planificateur de tâches effectue une défragmentation des fichiers impliqués dans les démarrages de Windows et des applications tous les trois jours : lorsque l'appareil est en veille, les listes des fichiers et des dossiers utilisés dans les démarrages sont identifiées ; ces listes sont enregistrées dans le fichier Layout.ini du dossier Prefetch et sont ensuite transmises au défragmenteur de disque pour que les fichiers et les dossiers soient réorganisés séquentiellement sur le disque dur. Cela améliore les performances en réduisant la distance que les têtes de lecture du disque dur doivent parcourir pour se déplacer d'un fichier au suivant.

## Configuration

La configuration du prefetcher est stockée dans la base de registre de Windows dans la clé HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters. Les valeurs possibles de la clé sont :
* 0 = prélecture (prefietching) désactivée ;
* 1 = prélecture activée pour les applications ;
* 2 = prélecture activée pour Windows (option de défaut pour Windows XP uniquement) ;
* 3 = prélecture activée pour les applications et Windows (par défaut pour les versions Windows Vista et suivantes).
La valeur recommandée est 3. Des valeurs supérieures à 3 n'augmentent pas la performance et une valeur de 2 n'accélérera pas le démarrage de Windows.

## Ajustements incorrects du prefetcher

Un mythe répandu veut que la suppression du contenu du dossier Prefetch accélère l'ordinateur. Il n'en est rien. Si les fichiers du dossier Prefetch sont supprimés, Windows devra recréer tous ces fichiers, ce qui ralentira le démarrage de Windows et des programmes jusqu'à ce que les fichiers aient été recréés$^,$.