Share via


BypassIO in Speichertreibern

Informationen zu BypassIO

Ab Windows 11 wurde BypassIO als optimierter E/A-Pfad zum Lesen aus Dateien hinzugefügt. Das Ziel dieses Pfads besteht darin, den CPU-Aufwand für Lesevorgänge zu reduzieren, was dazu beiträgt, die E/A-Anforderungen beim Laden und Ausführen von Spielen der nächsten Generation unter Windows zu erfüllen. BypassIO ist Teil der Infrastruktur zur Unterstützung von DirectStorage unter Windows.

Es ist wichtig, dass Speichertreiber unterstützung für BypassIO implementieren und BypassIO so weit wie möglich aktiviert halten. Ohne Unterstützung des Speicherstapels wird die Spielleistung beeinträchtigt, was zu einer schlechten Spielerfahrung für Endbenutzer führt.

In zukünftigen Windows-Releases wird es eine breitere Anwendungsverwendung geben, die über das Gaming hinausgeht.

IOCTL_STORAGE_MANAGE_BYPASS_IO und eine entsprechende FSCTL_MANAGE_BYPASS_IO wurden als Teil dieser Infrastruktur hinzugefügt. IOCTL_STORAGE_MANAGE_BYPASS_IO wird von Dateisystemen an die Volume-/Speicherstapel gesendet, während Minifilter FSCTL_MANAGE_BYPASS_IO verarbeiten. Diese Steuercodes sind so konzipiert, dass sie diagnosierbar sind: Beide geben die Identität des Treibers zurück, bei dem die BypassIO-Anforderung fehlgeschlagen ist, und den Grund für ihr Veto.

Informationen zur BypassIO-Systemarchitektur in den Dateisystemfilter- und Speicherstapeln finden Sie unter BypassIO in Filtertreibern .

Umfang der BypassIO-Unterstützung

Ab Windows 11 wird BypassIO wie folgt unterstützt:

  • Nur auf Windows-Clientsystemen. Die Serversystemunterstützung wird in einer zukünftigen Version hinzugefügt.

  • Nur auf NVMe-Speichergeräten. Unterstützung für andere Speichertechnologien wird in einem zukünftigen Release hinzugefügt.

  • Nur auf dem NTFS-Dateisystem. Unterstützung für andere Dateisysteme wird in einer zukünftigen Version hinzugefügt.

  • Nur nicht zwischengespeicherte Lesevorgänge werden unterstützt. Unterstützung für nicht zwischengespeicherte Schreibvorgänge wird in einer zukünftigen Version hinzugefügt.

  • Nur für Dateien unterstützt (in Verzeichnis- oder Volumehandles nicht unterstützt).

DDIs-Änderungen und Ergänzungen für BypassIO

Die folgenden für Speichertreiber relevanten DDIs wurden hinzugefügt, um BypassIO-Unterstützung bereitzustellen:

Was müssen Speicherstapeltreiber tun, um BypassIO zu unterstützen

Ab Windows 11 müssen Speichertreiberentwickler die INF- oder MANIFEST-Dateien ihres Treibers aktualisieren, um die StorageSupportedFeatures-Infrastruktur mit STORAGE_SUPPORTED_FEATURES_BYPASS_IO für BypassIO wie folgt hinzuzufügen:

  • Definieren eines "Parameter"-Schlüssels unter Ihrer Dienstdefinition
  • Fügen Sie einen DWORD-Wert mit dem Namen "StorageSupportedFeatures" hinzu, und legen Sie diesen Wert auf 0x1 fest, um BypassIO-Unterstützung anzugeben.

Dieser Registrierungsschlüssel gibt dem System an, dass der Treiber die Umgehung von E/A versteht. Der Treiber muss auch StorPortSetUnitAttributes aufrufen, wobei BypassIOSupported auf 1 festgelegt ist, um anzugeben, welche logische Einheit (Datenträger) Umgehungs-E/A unterstützt.

Der Treiber verarbeitet dann nach Bedarf IOCTL_STORAGE_MANAGE_BYPASS_IO . Der FS_BPIO_OP_QUERY-Vorgangs schlägt fehl, wenn ein Speicherstapeltreiber vorhanden ist, der sich nicht angemeldet hat.

Hinweis

Ein Treiber, der BypassIO nie unterstützen kann, sollte dem INF weiterhin den Status StorageSupportedFeatures hinzufügen und dann ein entsprechendes Veto innerhalb des Treibers unter Angabe des Grunds ausführen.

Wenn ein Speichertreiber seine INF- oder MANIFEST-Datei nicht aktualisiert, um die BypassIO-Unterstützung anzugeben, werden alle BypassIO-Vorgänge auf diesem Volume oder Speichertreiber sofort blockiert. Das System greift auf den herkömmlichen E/A-Pfad zurück, was zu einer Beeinträchtigung der Spielleistung führt.

IOCTL_STORAGE_MANAGE_BYPASS_IO Implementierungsdetails

Das Dateisystem (derzeit NTFS) generiert nach Bedarf einen IOCTL_STORAGE_MANAGE_BYPASS_IO-Steuerungscode als Reaktion auf eine generierte FSCTL_MANAGE_BYPASS_IO.

Die Eingabe an IOCTL_STORAGE_MANAGE_BYPASS_IO ähnelt der FSCTL_MANAGE_BYPASS_IO Entsprechung, unterstützt jedoch nur bypassIO-Aktivierung, -Deaktivierung und -Abfrage.

Die Ausgabe von IOCTL_STORAGE_MANAGE_BYPASS_IO ähnelt der FSCTL_MANAGE_BYPASS_IO Entsprechung, die den Namen und den Grund des fehlerhaften Treibers sowie den Vorgang identifiziert, status warum der Treiber BypassIO veto hat. Das Dateisystem verteilt die IOCTL_STORAGE_MANAGE_BYPASS_IO Ausgabe aus dem Volume und den Speicherstapeln bis zu FSCTL_MANAGE_BYPASS_IO.