BypassIO dans les pilotes de stockage

À propos de BypassIO

À compter de Windows 11, BypassIO a été ajouté en tant que chemin d’E/S optimisé pour la lecture à partir de fichiers. L’objectif de ce chemin est de réduire la surcharge processeur liée aux lectures, ce qui permet de répondre aux demandes d’E/S liées au chargement et à l’exécution de jeux de nouvelle génération sur Windows. BypassIO fait partie de l’infrastructure pour prendre en charge DirectStorage sur Windows.

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 prise en charge de la pile de stockage, les performances des jeux sont dégradées, ce qui entraîne une mauvaise expérience de jeu pour les utilisateurs finaux.

Il y aura des utilisations d’applications plus larges au-delà des jeux dans les prochaines versions de Windows.

IOCTL_STORAGE_MANAGE_BYPASS_IO et un FSCTL_MANAGE_BYPASS_IO équivalent 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 volume/stockage, tandis que les minifiltres traitent FSCTL_MANAGE_BYPASS_IO. Ces codes de contrôle sont conçus pour être diagnostiques : ils retournent tous deux l’identité du pilote qui a échoué à la demande BypassIO et la raison du veto.

Consultez BypassIO dans les pilotes de filtre pour plus d’informations sur l’architecture du système BypassIO sur les piles de filtre et de stockage du système de fichiers.

Étendue de la prise en charge de BypassIO

À partir de Windows 11, BypassIO est pris en charge comme suit :

  • Sur les systèmes clients Windows uniquement. La prise en charge du système de serveur sera ajoutée dans une version ultérieure.

  • Sur les appareils de stockage NVMe uniquement. La prise en charge d’autres technologies de stockage sera ajoutée dans une version ultérieure.

  • Sur le système de fichiers NTFS uniquement. La prise en charge d’autres systèmes de fichiers sera ajoutée dans une version ultérieure.

  • Seules les lectures non mises en cache sont prises en charge. La prise en charge des écritures non mises en cache sera ajoutée dans une version ultérieure.

  • Pris en charge uniquement sur les fichiers (non pris en charge sur les handles de répertoire ou de volume).

Modifications et ajouts des DDIs pour BypassIO

Les DDIs suivants pertinents pour les pilotes de stockage ont été ajoutés pour fournir la prise en charge de BypassIO :

Que doivent faire les pilotes de pile de stockage pour prendre en charge BypassIO

À compter 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éfinir une clé « Paramètres » 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 le contournement des E/S. Le pilote doit également appeler StorPortSetUnitAttributes avec BypassIOSupported défini sur 1 pour indiquer quelle unité logique (disque) prend en charge le contournement des E/S.

Le pilote traite ensuite IOCTL_STORAGE_MANAGE_BYPASS_IO en fonction des besoins. L’opération de FS_BPIO_OP_QUERY échoue s’il existe un pilote de pile de stockage qui n’a pas été activé.

Notes

Un pilote qui ne peut jamais prendre en charge BypassIO doit quand même ajouter l’état StorageSupportedFeatures au fichier INF, puis mettre un veto approprié à l’intérieur du pilote, en spécifiant 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.

IOCTL_STORAGE_MANAGE_BYPASS_IO détails de l’implémentation

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é si nécessaire.

L’entrée dans IOCTL_STORAGE_MANAGE_BYPASS_IO est similaire à son équivalent FSCTL_MANAGE_BYPASS_IO , mais prend uniquement en charge 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 et la raison du pilote défaillant, et l’opération status quant à la raison pour laquelle le pilote a opposé son veto à BypassIO. Le système de fichiers propage la sortie IOCTL_STORAGE_MANAGE_BYPASS_IO des piles de volume et de stockage jusqu’à FSCTL_MANAGE_BYPASS_IO.