BypassIO nei driver di archiviazione

Informazioni su BypassIO

BypassIO è un percorso di I/O ottimizzato per la lettura da file. L'obiettivo di questo percorso è ridurre il sovraccarico della CPU per le operazioni di lettura, che consente di soddisfare le richieste di I/O di caricamento ed esecuzione di giochi di nuova generazione in Windows. BypassIO fa parte dell'infrastruttura per supportare DirectStorage in Windows ed è disponibile a partire da Windows 11.

È importante che i driver di archiviazione implementino il supporto per BypassIO e che il bypassIO venga abilitato il più possibile. Senza il supporto dello stack di archiviazione, le prestazioni del gioco sono ridotte, con conseguente scarsa esperienza di gioco per gli utenti finali.

Saranno disponibili applicazioni più ampie oltre al gioco nelle versioni future di Windows.There will be broad application uses beyond gaming in future Windows release.

IOCTL_STORAGE_MANAGE_BYPASS_IO e un FSCTL_MANAGE_BYPASS_IO equivalente sono stati aggiunti come parte di questa infrastruttura. IOCTL_STORAGE_MANAGE_BYPASS_IO viene inviato dai file system agli stack di volume/archiviazione, mentre i minifiltri elaborano FSCTL_MANAGE_BYPASS_IO. Questi codici di controllo sono progettati per essere indipendenti: entrambi restituiscono l'identità del driver che non ha superato la richiesta BypassIO e il motivo del veto.

Vedere BypassIO nei driver di filtro per informazioni dettagliate sull'architettura di sistema BypassIO nei filtri del file system e negli stack di archiviazione.

Ambito del supporto bypassIO

A partire da Windows 11, BypassIO è supportato come segue:

  • Solo nei sistemi client Windows. Il supporto del sistema server verrà aggiunto in una versione futura.

  • Solo nei dispositivi di archiviazione NVMe. Il supporto per altre tecnologie di archiviazione verrà aggiunto in una versione futura.

  • Solo nel file system NTFS. Il supporto per altri file system verrà aggiunto in una versione futura.

  • Sono supportate solo le letture non memorizzate nella cache. Il supporto per le scritture non memorizzate nella cache verrà aggiunto in una versione futura.

  • Supportato solo nei file (non supportato in handle di directory o volumi).

Modifiche e aggiunte delle DDI per BypassIO

Sono state aggiunte le DDI seguenti relative ai driver di archiviazione per fornire il supporto BypassIO:

Quali driver dello stack di archiviazione devono eseguire per supportare BypassIO

A partire da Windows 11, gli sviluppatori di driver di archiviazione devono aggiornare i file INF o MANIFEST del driver per aggiungere l'infrastruttura StorageSupportedFeatures con STORAGE_SUPPORTED_FEATURES_BYPASS_IO per BypassIO come indicato di seguito:

  • Definire una chiave "Parametri" nella definizione del servizio
  • Aggiungere un valore DWORD denominato "StorageSupportedFeatures" e impostare questo valore su 0x1 per indicare il supporto bypassIO.

Questa chiave del Registro di sistema indica al sistema che il driver riconosce il bypass di I/O. Il driver deve anche chiamare StorPortSetUnitAttributes con BypassIOSupported impostato su 1 per indicare quale unità logica (disco) supporta l'I/O bypass.

Il driver elabora quindi IOCTL_STORAGE_MANAGE_BYPASS_IO in base alle esigenze. L'operazione di FS_BPIO_OP_QUERY ha esito negativo se è presente un driver dello stack di archiviazione che non ha accodato esplicitamente.

Nota

Un driver che non può mai supportare BypassIO deve comunque aggiungere lo stato StorageSupportedFeatures all'INF e quindi impostare il veto in modo appropriato all'interno del driver, specificando il motivo.

Se un driver di archiviazione non aggiorna il file INF o MANIFEST per indicare il supporto bypassIO, tutte le operazioni BypassIO su tale volume o driver di archiviazione vengono immediatamente bloccate. Il sistema esegue il fallback al percorso di I/O tradizionale, con un calo delle prestazioni del gioco.

IOCTL_STORAGE_MANAGE_BYPASS_IO dettagli sull'implementazione

Il file system (attualmente NTFS) genera un codice di controllo IOCTL_STORAGE_MANAGE_BYPASS_IO in risposta a un FSCTL_MANAGE_BYPASS_IO generato in base alle esigenze.

L'input per IOCTL_STORAGE_MANAGE_BYPASS_IO è simile alla controparte FSCTL_MANAGE_BYPASS_IO , ma supporta solo l'abilitazione, la disabilitazione e l'esecuzione di query bypassIO.

L'output di IOCTL_STORAGE_MANAGE_BYPASS_IO è simile alla controparte FSCTL_MANAGE_BYPASS_IO , identificando il nome e il motivo del driver non riuscito e lo stato dell'operazione per il motivo per cui il driver ha veto bypassIO. Il file system propaga l'output IOCTL_STORAGE_MANAGE_BYPASS_IO dal volume e dagli stack di archiviazione fino a FSCTL_MANAGE_BYPASS_IO.