OmitirIO en controladores de almacenamiento

Acerca de BypassIO

A partir de Windows 11, BypassIO se agregó como una ruta de acceso de E/S optimizada para leer archivos. El objetivo de esta ruta de acceso es reducir la sobrecarga de CPU de realizar lecturas, lo que ayuda a satisfacer las demandas de E/S de carga y ejecución de juegos de próxima generación en Windows. BypassIO forma parte de la infraestructura para admitir DirectStorage en Windows.

Es importante que los controladores de almacenamiento implementen la compatibilidad con BypassIO y que mantenga BypassIO habilitado tanto como sea posible. Sin compatibilidad con la pila de almacenamiento, el rendimiento del juego se degrada, lo que da lugar a una mala experiencia de juego para los usuarios finales.

Habrá usos más amplios de la aplicación más allá de los juegos en futuras versiones de Windows.

IOCTL_STORAGE_MANAGE_BYPASS_IO y un FSCTL_MANAGE_BYPASS_IO equivalente se agregaron como parte de esta infraestructura. IOCTL_STORAGE_MANAGE_BYPASS_IO los sistemas de archivos envían a las pilas de almacenamiento o volumen, mientras que los minifiltros procesan FSCTL_MANAGE_BYPASS_IO. Estos códigos de control están diseñados para ser diagnosticables: ambos devuelven la identidad del controlador que produjo un error en la solicitud BypassIO y el motivo de la vetación.

Consulte BypassIO en los controladores de filtro para los detalles de la arquitectura del sistema BypassIO en los filtros del sistema de archivos y las pilas de almacenamiento.

Ámbito de compatibilidad con BypassIO

A partir de Windows 11, BypassIO se admite de la siguiente manera:

  • Solo en los sistemas cliente de Windows. La compatibilidad con el sistema de servidor se agregará en una versión futura.

  • Solo en dispositivos de almacenamiento NVMe. La compatibilidad con otras tecnologías de almacenamiento se agregará en una versión futura.

  • Solo en el sistema de archivos NTFS. La compatibilidad con otros sistemas de archivos se agregará en una versión futura.

  • Solo se admiten las lecturas no almacenadas en caché. La compatibilidad con escrituras no almacenadas en caché se agregará en una versión futura.

  • Solo se admite en archivos (no se admiten en identificadores de directorio o volumen).

Cambios y adiciones de DDIs para BypassIO

Se agregaron los siguientes DDIs relevantes para los controladores de almacenamiento para proporcionar compatibilidad con BypassIO:

Qué controladores de pila de almacenamiento deben hacer para admitir BypassIO

A partir de Windows 11, los desarrolladores de controladores de almacenamiento deben actualizar los archivos INF o MANIFEST de sus controladores para agregar la infraestructura StorageSupportedFeatures con STORAGE_SUPPORTED_FEATURES_BYPASS_IO para BypassIO de la siguiente manera:

  • Definición de una clave "Parámetros" en la definición del servicio
  • Agregue un valor DWORD denominado "StorageSupportedFeatures" y establezca este valor en 0x1 para indicar la compatibilidad con BypassIO.

Esta clave del Registro indica al sistema que el controlador entiende la omisión de E/S. El controlador también debe llamar a StorPortSetUnitAttributes con BypassIOSupported establecido en 1 para indicar qué unidad lógica (disco) admite la E/S de omisión.

A continuación, el controlador procesa IOCTL_STORAGE_MANAGE_BYPASS_IO según sea necesario. Se produce un error en la operación de FS_BPIO_OP_QUERY si hay un controlador de pila de almacenamiento que no ha optado por participar.

Nota

Un controlador que nunca puede admitir BypassIO debe agregar el estado StorageSupportedFeatures al INF y, a continuación, vetar adecuadamente dentro del controlador, especificando el motivo.

Si un controlador de almacenamiento no actualiza su archivo INF o MANIFEST para indicar la compatibilidad con BypassIO, todas las operaciones BypassIO en ese volumen o controlador de almacenamiento se bloquean inmediatamente. El sistema vuelve a la ruta de acceso de E/S tradicional, lo que da como resultado un rendimiento degradado del juego.

detalles de implementación de IOCTL_STORAGE_MANAGE_BYPASS_IO

El sistema de archivos (actualmente NTFS) genera un código de control IOCTL_STORAGE_MANAGE_BYPASS_IO en respuesta a un FSCTL_MANAGE_BYPASS_IO generado según sea necesario.

La entrada para IOCTL_STORAGE_MANAGE_BYPASS_IO es similar a su homólogo de FSCTL_MANAGE_BYPASS_IO , pero solo admite BypassIO habilitando, deshabilitando y consultando.

La salida de IOCTL_STORAGE_MANAGE_BYPASS_IO es similar a su homólogo de FSCTL_MANAGE_BYPASS_IO , identificando el nombre y el motivo del controlador con errores, y el estado de la operación en cuanto a por qué el controlador vetó BypassIO. El sistema de archivos propaga el IOCTL_STORAGE_MANAGE_BYPASS_IO salida del volumen y las pilas de almacenamiento hasta FSCTL_MANAGE_BYPASS_IO.