BypassIO dans les pilotes de stockage
À propos de BypassIO
BypassIO est un chemin d’E/S optimisé pour la lecture de fichiers. L’objectif de ce chemin est de réduire la surcharge CPU liée aux lectures, ce qui aide à répondre aux exigences d’E/S pour le chargement et l’exécution des jeux de nouvelle génération sur Windows. BypassIO fait partie de l’infrastructure prenant en charge DirectStorage sur Windows, et est disponible à partir de Windows 11.
Il est important que les pilotes de stockage implémentent la prise en charge de BypassIO, et que vous gardiez BypassIO activé autant que possible. Sans la prise en charge de la pile de stockage, les performances de jeu sont dégradées, ce qui entraîne une mauvaise expérience utilisateur pour les joueurs.
Il y aura des utilisations plus larges que les jeux dans les futures versions de Windows.
IOCTL_STORAGE_MANAGE_BYPASS_IO et un équivalent FSCTL_MANAGE_BYPASS_IO ont été ajoutés dans le cadre de cette infrastructure. IOCTL_STORAGE_MANAGE_BYPASS_IO est envoyé par les systèmes de fichiers aux piles de volumes/stockage, tandis que les minifiltres traitent FSCTL_MANAGE_BYPASS_IO. Ces codes de contrôle sont conçus pour être diagnostiquables : ils renvoient tous deux l’identité du pilote qui a échoué à la demande de BypassIO, ainsi que la raison de son refus.
Veuillez consulter la section BypassIO dans les pilotes de filtres pour les détails de l’architecture système BypassIO à travers les piles de filtres de système de fichiers et de stockage.
Étendue de la prise en charge de BypassIO
À partir de Windows 11, BypassIO est pris en charge comme suit :
Uniquement sur les systèmes clients Windows. Le support des systèmes serveurs sera ajouté dans une version future.
Uniquement sur les dispositifs de stockage NVMe. Le support pour d’autres technologies de stockage sera ajouté dans une version future.
Uniquement sur le système de fichiers NTFS. Le support pour d’autres systèmes de fichiers sera ajouté dans une version future.
Seules les lectures non mises en cache sont prises en charge. Le support pour les écritures non mises en cache sera ajouté dans une version future.
Prise en charge uniquement sur des fichiers (non pris en charge sur des handles de répertoire ou de volume).
Modifications et ajouts de DDIs pour BypassIO
Les DDIs suivants, pertinents pour les pilotes de stockage, ont été ajoutés pour fournir la prise en charge de BypassIO :
- IOCTL_STORAGE_MANAGE_BYPASS_IO (généré uniquement par le système de fichiers)
- BPIO_INPUT
- BPIO_OUTPUT
- BPIO_OPERATIONS
- Énumérateur BPIO_INFLAGS
- Enumérateur BPIO_OUTFLAGS
- Structure BPIO_RESULTS
Ce que les pilotes de la pile de stockage doivent faire pour prendre en charge BypassIO
À partir de Windows 11, les développeurs de pilotes de stockage doivent mettre à jour les fichiers INF ou MANIFEST de leur pilote pour ajouter l’infrastructure StorageSupportedFeatures avec STORAGE_SUPPORTED_FEATURES_BYPASS_IO pour BypassIO comme suit :
- Définissez une clé « Parameters » sous votre définition de service
- Ajoutez une valeur DWORD nommée « StorageSupportedFeatures », et définissez cette valeur sur 0x1 pour indiquer la prise en charge de BypassIO.
Cette clé de registre indique au système que le pilote comprend l’E/S de contournement. Le pilote doit également appeler StorPortSetUnitAttributes avec BypassIOSupported défini sur 1 pour indiquer quelle unité logique (disque) prend en charge l’E/S de contournement.
Le pilote traite ensuite IOCTL_STORAGE_MANAGE_BYPASS_IO selon les besoins. L’opération FS_BPIO_OP_QUERY échoue s’il y a un pilote de la pile de stockage qui n’a pas choisi cette option.
Remarque
Un pilote qui ne peut jamais prendre en charge BypassIO doit tout de même ajouter l’état StorageSupportedFeatures à l’INF et ensuite refuser de manière appropriée dans le pilote, en précisant la raison.
Si un pilote de stockage ne met pas à jour son fichier INF ou MANIFEST pour indiquer la prise en charge de BypassIO, toutes les opérations BypassIO sur ce volume ou ce pilote de stockage sont immédiatement bloquées. Le système revient au chemin d’E/S traditionnel, ce qui entraîne une dégradation des performances de jeu.
Détails de la mise en œuvre de IOCTL_STORAGE_MANAGE_BYPASS_IO
Le système de fichiers (actuellement NTFS) génère un code de contrôle IOCTL_STORAGE_MANAGE_BYPASS_IO en réponse à un FSCTL_MANAGE_BYPASS_IO généré selon les besoins.
L’entrée de IOCTL_STORAGE_MANAGE_BYPASS_IO est similaire à son équivalent FSCTL_MANAGE_BYPASS_IO, mais ne prend en charge que l’activation, la désactivation et l’interrogation de BypassIO.
La sortie de IOCTL_STORAGE_MANAGE_BYPASS_IO est similaire à son équivalent FSCTL_MANAGE_BYPASS_IO, identifiant le nom du pilote défaillant et la raison, ainsi que le statut de l’opération expliquant pourquoi le pilote a refusé BypassIO. Le système de fichiers propage la sortie IOCTL_STORAGE_MANAGE_BYPASS_IO depuis les piles de volumes et de stockage jusqu’à FSCTL_MANAGE_BYPASS_IO.