BypassIO en controladores de almacenamiento
Acerca de BypassIO
BypassIO es una ruta de E/S optimizada para la lectura de archivos. El objetivo de esta ruta es reducir la sobrecarga de la CPU al realizar lecturas, lo que ayuda a satisfacer las demandas de E/S de la carga y ejecución de juegos de última generación en Windows. BypassIO forma parte de la infraestructura de soporte de DirectStorage en Windows, y está disponible a partir de Windows 11.
Es importante que los controladores de almacenamiento implementen compatibilidad con BypassIO, y que mantenga BypassIO habilitado tanto como sea posible. Sin compatibilidad con la pila de almacenamiento, el rendimiento de los juegos se degrada, lo que se traduce en una mala experiencia de juego para los usuarios finales.
En futuras versiones de Windows habrá usos más amplios de las aplicaciones, además de los juegos.
IOCTL_STORAGE_MANAGE_BYPASS_IO y su equivalente FSCTL_MANAGE_BYPASS_IO se añadieron como parte de esta infraestructura. Los sistemas de archivos IOCTL_STORAGE_MANAGE_BYPASS_IO envían a las pilas de volumen/almacenamiento, 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 falló la solicitud BypassIO, y la razón para vetarla.
Consulte BypassIO en controladores de filtrado para obtener detalles sobre la arquitectura del sistema BypassIO en las pilas de filtrado y almacenamiento del sistema de archivos.
Ámbito de compatibilidad con BypassIO
A partir de Windows 11, BypassIO es compatible de la siguiente manera:
Solo en sistemas cliente Windows. La compatibilidad con sistemas de servidor se añadirá en una versión futura.
Solo en dispositivos de almacenamiento NVMe. La compatibilidad con otras tecnologías de almacenamiento se añadirá en una futura versión.
Solo en el sistema de archivos NTFS. La compatibilidad con otros sistemas de archivos se añadirá en una futura versión.
Solo se admiten lecturas sin almacenamiento en caché. La compatibilidad con escrituras no almacenadas en caché se añadirá en una futura versión.
Solo es compatible con archivos (no es compatible con gestores de directorio o volumen).
Cambios y adiciones de DDIs para BypassIO
Los siguientes DDI relevantes a los controladores de almacenamiento se han agregado para proveer compatibilidad con BypassIO:
- IOCTL_STORAGE_MANAGE_BYPASS_IO (generado solo por el sistema de archivos)
- BPIO_INPUT
- BPIO_OUTPUT
- BPIO_OPERATIONS
- enumerador BPIO_INFLAGS
- enumerador BPIO_OUTFLAGS
- estructura BPIO_RESULTS
Qué deben hacer los controladores de la pila de almacenamiento para ser compatibles con BypassIO
A partir de Windows 11, los desarrolladores de controladores de almacenamiento deben actualizar los archivos INF o MANIFEST de sus controladores para añadir la infraestructura StorageSupportedFeatures con STORAGE_SUPPORTED_FEATURES_BYPASS_IO para BypassIO de la siguiente manera:
- Defina una clave "Parámetros" en la definición del servicio.
- Añada un valor DWORD denominado "StorageSupportedFeatures", y establezca este valor en 0x1 para indicar la compatibilidad con BypassIO.
Esta clave de registro indica al sistema que el controlador entiende Bypass I/O. El controlador también debe llamar a StorPortSetUnitAttributes con BypassIOSupported establecido en 1 para indicar que unidad lógica (disco) es compatible con bypass I/O.
A continuación, el controlador procesa IOCTL_STORAGE_MANAGE_BYPASS_IO según sea necesario. La operación FS_BPIO_OP_QUERY falla si hay un controlador de pila de almacenamiento que no ha participado.
Nota:
Un controlador que nunca puede ser compatible BypassIO debe añadir 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 que es compatible con BypassIO, todas las operaciones BypassIO en ese volumen o controlador de almacenamiento se bloquean inmediatamente. El sistema vuelve a la ruta tradicional de E/S, lo que resulta en 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 a IOCTL_STORAGE_MANAGE_BYPASS_IO es similar a la de su homólogo FSCTL_MANAGE_BYPASS_IO, pero solo es compatible con la habilitación, deshabilitación y consulta de BypassIO.
La salida de IOCTL_STORAGE_MANAGE_BYPASS_IO es similar a la de su homólogo FSCTL_MANAGE_BYPASS_IO, identificando el nombre y la razón del controlador que ha fallado, y el estado de la operación en cuanto a por qué el controlador ha vetado BypassIO. El sistema de ficheros propaga la salida IOCTL_STORAGE_MANAGE_BYPASS_IO desde las pilas de volumen y almacenamiento hasta FSCTL_MANAGE_BYPASS_IO.