Rapidité du temps de démarrage dans Windows 8

Nous souhaitons entamer la discussion sur les « fondamentaux » en parlant du temps de démarrage (aucune fonctionnalité n'est plus discutée ni mesurée). Nous avons conçu Windows 8 afin que vous n'ayez pas à démarrer aussi souvent (et nous allons encore essayer de réduire le nombre de redémarrages nécessaires dus aux correctifs du code d'exécution). Mais lorsque vous avez besoin d'effectuer un démarrage, vous souhaitez qu'il dure le moins longtemps possible. Ce sujet suscite beaucoup de réactions et un grand intérêt parmi les utilisateurs. Avec Windows 8, nous avons fait un plus grand bond dans ce domaine que nous ne l'avions fait depuis longtemps, en raison principalement de la coopération dans tout l'écosystème. Gabe Aul, directeur de la gestion de projet dans Windows, a rédigé ce billet (le premier de la série à venir des billets sur les fondamentaux).
--Steven

Peu d'opérations Windows sont aussi scrutées, mesurées et détaillées que le démarrage. Cela est compréhensible : les temps de démarrage représentent un proxy efficace pour les performances globales du système et nous savons tous que le démarrage est un point très important pour satisfaire les clients. Les données montrent que 57 % des utilisateurs d'ordinateurs de bureau et 45 % des utilisateurs d'ordinateurs portables arrêtent leurs ordinateurs au lieu de les mettre en veille. Globalement, la moitié de tous les utilisateurs arrêtent leurs ordinateurs au lieu de les mettre en veille.

Graphique en secteurs des transitions d'alimentation sur des ordinateurs portables Windows 7, montrant le mode Veille à 45 %, Veille prolongée à 11 % et l'arrêt (y compris le redémarrage) à 45 %
Graphique en secteurs des transitions d'alimentation sur des ordinateurs de bureau Windows 7, montrant le mode Veille à 42 %, Veille prolongée à 1 % et l'arrêt (y compris le redémarrage) à 57 %

Qualitativement, les utilisateurs indiquent préférer arrêter l'ordinateur afin qu'il soit complètement hors tension et n'utilise plus d'énergie (soit pour préserver la durée de vie de la batterie, soit pour consommer moins d'énergie). La veille prolongée représente également une bonne alternative, car elle ne consomme pas non plus d'énergie et de nombreux utilisateurs l'apprécient beaucoup. Ce mode n'est toutefois pas destiné à tout le monde, car de nombreuses personnes souhaitent allumer leur PC pour bénéficier d'un « nouveau départ » au lieu de récupérer toutes les données de leur session précédente. La veille/reprise est le meilleur choix pour allumer et arrêter rapidement les PC actuels, mais ce mode utilise de l'énergie afin de préserver le contenu de la RAM, ce qui signifie que la batterie est sollicitée (même si c'est dans une moindre mesure sur des systèmes bien optimisés). Nous pouvons comparer tous ces modes avec la façon dont nous utilisons nos téléphones portables aujourd'hui, c'est-à-dire en ne les rallumant presque jamais et en utilisant en permanence un état proche du mode veille.

Notre défi a été de trouver le moyen de répondre à tous ces souhaits sur un PC sans qu'un nouveau matériel particulier soit nécessaire. Voici les objectifs que nous nous sommes fixés :

  • Zéro consommation d'énergie effective à l'arrêt
  • Une nouvelle session après démarrage
  • Une durée très courte entre le moment où on appuie sur le bouton d'alimentation et le moment où on peut utiliser le PC.

Dans Windows 7, nous avons apporté de nombreuses améliorations au chemin de démarrage, notamment l'initialisation parallèle des pilotes de périphériques et les services déclenchés au démarrage, mais il était évident que nous devions être plus créatifs (et moins incrémentiels) si nous voulions accélérer suffisamment les performances de démarrage pour répondre à tous ces besoins.

Notre solution est un nouveau mode de démarrage rapide, qui est un hybride du démarrage à froid traditionnel et de la reprise après une veille prolongée.

Avant d'expliquer plus en détail le fonctionnement, il n'est sans doute pas inutile de rappeler comment l'arrêt et le démarrage actuels fonctionnent dans Windows 7.

L'arrêt implique les étapes suivantes :

  1. L'utilisateur initie un arrêt en sélectionnant « Arrêter » dans le menu Démarrer ou en appuyant sur le bouton d'alimentation. Une application peut également initier un arrêt en appelant une API, telle que ExitWindowsEx() ou InitiateShutdown().
  2. Windows diffuse les messages aux applications en cours d'exécution, ce qui leur donne une chance d'enregistrer les données et les paramètres. Les applications peuvent également demander un peu plus de temps pour terminer leurs opérations en cours.
  3. Windows ferme les sessions utilisateur pour chaque utilisateur connecté.
  4. Windows envoie des messages aux services pour les informer qu'un arrêt a commencé, puis il les arrête. Il arrête les services ordonnés qui ont une dépendance séquentielle, et le reste en parallèle. Si un service ne répond pas, son arrêt est forcé.
  5. Windows diffuse les messages aux périphériques, en leur demandant d'arrêter.
  6. Windows ferme la session système (connue également sous le nom de « session 0 »).
  7. Windows purge les données en attente sur le lecteur système pour s'assurer qu'elles sont entièrement enregistrées.
  8. Windows envoie un signal via l'interface ACPI au système pour fermer le PC.

Et le démarrage implique les étapes suivantes :

  1. Après avoir appuyé sur le bouton d'alimentation, le microprogramme du PC initie un autotest de mise sous tension (POST) et charge les paramètres du microprogramme. Ce processus préalable au démarrage se termine lorsqu'un disque système valide est détecté.
  2. Le microprogramme lit l'enregistrement de démarrage principal (MBR) et démarre Bootmgr.exe. Bootmgr.exe recherche et démarre le chargeur de Windows (Winload.exe) sur la partition de démarrage de Windows.
  3. Les pilotes essentiels requis pour démarrer le noyau Windows sont chargés et le noyau commence à s'exécuter, chargeant en mémoire la ruche du Registre système et les pilotes supplémentaires marqués comme BOOT_START.
  4. Le noyau transmet le contrôle au processus du gestionnaire de session (Smss.exe) qui initialise la session système, puis charge et démarre les périphériques et pilotes non marqués comme BOOT_START.
  5. Winlogon.exe démarre, l'écran d'ouverture de session utilisateur apparaît, le gestionnaire de contrôle des services démarre les services et les scripts Stratégie de groupe sont exécutés. Lorsque l'utilisateur se connecte, Windows crée une session pour cet utilisateur.
  6. Explorer.exe démarre, le système crée le processus Gestionnaire de fenêtrage (DWM) qui initialise le Bureau et l'affiche.

Vous trouverez beaucoup d'autres détails précis ici, si vous souhaitez approfondir le sujet : https://msdn.microsoft.com/en-us/windows/hardware/gg463386

Le point important à ne pas oublier, c'est que dans un arrêt traditionnel, nous fermons toutes les sessions utilisateur et dans la session de noyau, nous fermons les services et périphériques pour préparer un arrêt complet.

Voici maintenant la principale différence pour Windows 8 : comme dans Windows 7, nous fermons les sessions utilisateur, mais au lieu de fermer la session de noyau, nous la mettons en veille prolongée. Par rapport à une veille prolongée complète, qui comprend un grand nombre de pages mémoire utilisées par les applications, les données de veille prolongée de la session 0 sont beaucoup plus limitées et leur écriture sur le disque prend beaucoup moins de temps. Si vous ne connaissez pas bien le mode de veille prolongée, nous enregistrons réellement l'état du système et le contenu de la mémoire sur un fichier du disque (hiberfil.sys), puis nous le relisons en cas de reprise et et restaurons le contenu en mémoire. L'utilisation de cette technique lors du démarrage nous donne un avantage significatif en termes de temps de démarrage, car la lecture du fichier hiberfil.sys et la réinitialisation des pilotes sont beaucoup plus rapides sur la plupart des systèmes (30 à 70 % plus rapides sur la plupart des systèmes que nous avons testés).

Graphique à barres comparant les temps rapides de démarrage de Windows 8 aux temps de démarrage à froid de Windows 7 sur 30 configurations de PC différentes. Les temps de démarrage de Windows 8 se situent tous entre 15 et 33 secondes, tandis que les temps de démarrage à froid de Windows 7 se situent entre 25 et 72 secondes.
Échantillon des résultats du test d'intégration système.
Cliquez pour agrandir le graphique.

Il est plus rapide, car la reprise de la session système en veille prolongée représente comparativement moins de travail que l'initialisation d'un système complet. Mais la rapidité s'explique également par le fait que nous avons ajouté une nouvelle fonction de reprise à plusieurs phases qui est capable d'utiliser tous les cœurs d'un système multicœur en parallèle et de diviser le travail de lecture du fichier hiberfil.sys et de décompression du contenu. Pour ceux d'entre vous qui préfèrent la veille prolongée, cette technique permet également d'obtenir une reprise plus rapide après la veille prolongée.

Graphique à barres illustrant le temps relatif nécessaire aux différentes phases de démarrage. Pour le démarrage à froid de Windows 7, le démarrage POST/Pre-boot prend environ un tiers du temps, l'initialisation système prend plus de la moitié du temps et l'initialisation de la session utilisateur prend environ 1/5 du temps. Pour le démarrage rapide de Windows 8, le démarrage POST/Pre-boot prend environ un tiers du temps, puis la lecture du fichier Hiberfil.sys et l'initialisation de la session utilisateur prennent chacun environ un quart du temps. L'initialisation des pilotes occupe une part légèrement inférieure au fichier Hiberfil.sys et à l'initialisation de la session utilisateur.
Représentation des différentes phases entre le démarrage à froid et le démarrage rapide.
Cliquez pour agrandir le graphique.

Il est probablement utile d'expliquer rapidement comment nous traitons le fichier hiberfil.sys : si vous avez lu ces informations et avez immédiatement effectué une opération dir /s /ah hiberfile.sys, vous avez dû trouver que la taille du fichier sur le disque est assez importante. La taille du fichier hiberfil.sys est définie par défaut à 75 % de la RAM physique. Le fichier est essentiellement une réservation destinée aux données de veille prolongée qui seront écrites lors de la mise en veille prolongée du système. En général, l'espace utilisé est beaucoup moins important et dans le cas de notre démarrage rapide, il représente habituellement dans les 10 à 15 % de la RAM physique (ce pourcentage peut varier en fonction des pilotes, des services et d'autres facteurs). Par ailleurs, le système traite le fichier hiberfil.sys de façon légèrement différente des autres fichiers présents sur le disque, par exemple, le service Cliché instantané de volume l'ignore (ce qui présente léger avantage en termes de performances.) Vous pouvez désactiver la veille prolongée et récupérer cet espace en exécutant powercfg /hibernate off à partir d'une invite de commandes avec élévation de privilèges. N'oubliez pas toutefois que lorsque vous procédez ainsi, la veille prolongée est totalement désactivée, y compris certaines fonctionnalités appréciables comme le démarrage rapide et la veille mode hybride, qui permet aux systèmes de bureautiques d'entrer simultanément en mode de veille et de veille prolongée afin qu'en cas de panne d'alimentation, vous ayez toujours la possibilité d'effectuer une reprise de l'état de veille prolongée. Vous pouvez également exécuter powercfg /hibernate /size et attribuer une valeur entre 0 et 100 au pourcentage de RAM physique à réserver au fichier hiberfil.sys, mais soyez prudent ! Si la valeur que vous indiquez est trop petite, la veille prolongée risque d'échouer. Je conseille en général de conserver la valeur par défaut, sauf si votre système ne dispose que d'un espace disque extrêmement limité.

Concernant le mode de démarrage rapide de Windows 8, il est également important de noter que même si vous n'effectuez pas une énumération « Plug & Play » complète de tous les pilotes, nous initialisons tout de même les pilotes dans ce mode. Ceux d'entre vous qui préfèrent le démarrage à froid pour « rafraîchir » les pilotes et périphériques seront heureux d'apprendre que cela est toujours en vigueur dans ce nouveau mode, même si le processus n'est pas identique à celui d'un démarrage à froid.

Ce nouveau mode de démarrage rapide bénéficiera à presque tous les systèmes, qu'ils soient dotés d'une unité HDD en rotation ou d'un disque SSD, mais pour les systèmes plus récents dotés de disques SSD rapide, le résultat est tout simplement incroyable. Jugez par vous-même en regardant la vidéo ci-dessous :

Votre navigateur ne prend pas en charge les vidéos HTML5.

Téléchargez cette vidéo pour la regarder sur votre lecteur habituel :
MP4 haute qualité | MP4 faible qualité

Ce que vous pourrez noter dans la vidéo, c'est la vitesse à laquelle s'est produite la remise POST vers Windows. Les systèmes conçus avec l'interface UEFI (Unified Extensible Firmware Interface) sont les mieux placés pour atteindre des temps de démarrage préliminaire (« Pre-boot ») très rapides, par rapport aux systèmes dotés de BIOS traditionnels. Cela ne signifie pas que l'interface UEFI est plus rapide en elle-même, mais les rédacteurs UEFI qui recommencent à zéro sont davantage en mesure d'optimiser leur implémentation qu'en s'appuyant sur une implémentation BIOS susceptible de dater de plusieurs années. La bonne nouvelle, c'est que la plupart des fabricants de systèmes et de cartes mères ont commencé à implémenter UEFI et que ces types de démarrages rapides sont donc amenés à prévaloir sur les nouveaux systèmes.

Bien sûr, il peut arriver que vous souhaitiez réaliser un arrêt complet. Par exemple, si vous ouvrez le système pour ajouter ou modifier un matériel. Nous avons prévu une option dans l'interface utilisateur qui permet de revenir au comportement du démarrage à froid/de l'arrêt de Windows 7. En outre, comme vous n'utiliserez probablement que peu souvent cette option, vous pouvez faire appel au nouveau commutateur /full avec shutdown.exe. À partir d'une invite de commandes, exécutez : shutdown /s /full / t 0 pour invoquer un arrêt complet et immédiat. De plus, lorsque vous choisissez l'option Arrêter dans l'interface utilisateur, l'arrêt est complet, suivi d'un démarrage à froid.

Le travail effectué sur le démarrage est principalement l'œuvre de notre groupe dédié à la plateforme Kernel, mais plusieurs équipes ont participé à la modification du système d'exploitation Windows 8 afin de prendre en charge ce nouveau mode. D'autres modifications passionnantes concernant le démarrage ont également été réalisées ; nous en parlerons très bientôt. Nous sommes réellement ravis des performances de démarrage de Windows 8 que nous utilisons en interne et nous avons hâte que vous puissiez l'essayer par vous-même et de connaître vos réactions.

Gabe Aul