„BypassIO“ in Speichertreiber
Informationen zu BypassIO
BypassIO ist ein optimierter E/A-Pfad zum Lesen von Dateien. Ziel dieses Pfads ist es, den CPU-Aufwand der Lesevorgänge zu reduzieren, was dazu beiträgt, die Anforderungen des Ladens und Ausführens von Spielen der nächsten Generation unter Windows zu erfüllen. BypassIO ist Teil der Infrastruktur zur Unterstützung von DirectStorage unter Windows und steht ab Windows 11 zur Verfügung.
Es ist wichtig, dass Speichertreiber Unterstützung für BypassIO implementieren und dass BypassIO so weit wie möglich aktiviert bleibt. Ohne Speicherstapelunterstützung wird die Spielleistung beeinträchtigt, was zu einer schlechten Spielerfahrung für Endbenutzer führt.
In zukünftigen Windows-Versionen wird eine breitere Anwendung verwendet, die über das Spielen hinausgeht.
IOCTL_STORAGE_MANAGE_BYPASS_IO und entsprechende FSCTL_MANAGE_BYPASS_IO wurden als Teil dieser Infrastruktur hinzugefügt. IOCTL_STORAGE_MANAGE_BYPASS_IO werden von Dateisystemen an die Volume-/Speicherstapel gesendet, während Minifilter FSCTL_MANAGE_BYPASS_IO verarbeiten. Diese Steuercodes sind so konzipiert, dass sie diagnostizieren können: Beide geben die Identität des Treibers zurück, der die BypassIO-Anforderung nicht bestanden hat, und den Grund für das Vetoing.
Siehe BypassIO in FIltertreibern für Einzelheiten zur BypassIO-Systemarchitektur im gesamten Dateisystemfilter und den Speicherstapeln
Umfang der BypassIO-Unterstützung
Ab Windows 11 wird BypassIO wie folgt unterstützt:
Nur auf Windows-Clientsystemen. Serversystem-Unterstützung wird in einer zukünftigen Version hinzugefügt.
Nur auf NVMe-Speichergeräten. Support für andere Speichertechnologien wird in einer zukünftigen Version hinzugefügt.
Nur im 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.
Wird nur für Dateien unterstützt (nicht für Verzeichnis- oder Volumehandles unterstützt).
DDIs-Änderungen und Ergänzungen für BypassIO
Die folgenden DDIs, die für Speichertreiber relevant sind, wurden hinzugefügt, um BypassIO-Unterstützung bereitzustellen:
- IOCTL_STORAGE_MANAGE_BYPASS_IO (nur vom Dateisystem generiert)
- BPIO_INPUT
- BPIO_OUTPUT
- BPIO_OPERATIONS
- BPIO_INFLAGS-Enumerator
- BPIO_OUTFLAGS-Enumerator
- BPIO_RESULTS-Struktur
Welche Speicherstapeltreiber erforderlich sind, 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 "Parameters"-Schlüssels unter Ihrer Dienstdefinition
- Fügen Sie einen DWORD-Wert namens "StorageSupportedFeatures" hinzu, und legen Sie diesen Wert auf 0x1 fest, um die BypassIO-Unterstützung anzugeben.
Dieser Registrierungsschlüssel gibt für das System an, dass der Treiber die Umgehung von E/A versteht. Der Treiber muss außerdem StorPortSetUnitAttributes aufrufen, wobei BypassIOSupported auf 1 gesetzt ist, um anzugeben, welche logische Einheit (Festplatte) Bypass-E/A unterstützt.
Der Treiber verarbeitet dann IOCTL_STORAGE_MANAGE_BYPASS_IO nach Bedarf. Der FS_BPIO_OP_QUERY Vorgang schlägt fehl, wenn ein Speicherstapeltreiber vorhanden ist, der sich nicht angemeldet hat.
Hinweis
Ein Treiber, der BypassIO niemals unterstützen kann, sollte den StorageSupportedFeatures-Status weiterhin dem INF hinzufügen und dann innerhalb des Treibers entsprechend vetoieren, wobei der Grund angegeben wird.
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ächtigten Spielleistung führt.
IOCTL_STORAGE_MANAGE_BYPASS_IO Implementierungsdetails
Das Dateisystem (derzeit NTFS) generiert bei Bedarf einen IOCTL_STORAGE_MANAGE_BYPASS_IO-Steuercode als Reaktion auf einen generierten FSCTL_MANAGE_BYPASS_IO.
Eingaben an IOCTL_STORAGE_MANAGE_BYPASS_IO ähneln dem FSCTL_MANAGE_BYPASS_IO Gegenstück, unterstützen jedoch nur bypassIO-Aktivierung, Deaktivierung und Abfrage.
Die Ausgabe von IOCTL_STORAGE_MANAGE_BYPASS_IO ähnelt ihrem FSCTL_MANAGE_BYPASS_IO Gegenstück, identifiziert den Namen und den Grund des fehlerhaften Treibers und den Betriebsstatus, warum der Treiber BypassIO vetoiert hat. Das Dateisystem verteilt die IOCTL_STORAGE_MANAGE_BYPASS_IO Ausgabe des Volumes und der Speicherstapel bis zu FSCTL_MANAGE_BYPASS_IO.