記憶域ドライバーの BypassIO

BypassIO について

Windows 11 以降、BypassIO は、ファイルから読み取るための最適化された I/O パスとして追加されました。 このパスの目的は、読み取りの CPU オーバーヘッドを削減することです。これは、Windows で次世代ゲームを読み込んで実行する I/O の要求を満たすのに役立ちます。 BypassIO は、Windows で DirectStorage をサポートするためのインフラストラクチャの一部です。

記憶域ドライバーは BypassIO のサポートを実装し、可能な限り BypassIO を有効にしておくことが重要です。 記憶域スタックのサポートがないと、ゲームのパフォーマンスが低下し、エンド ユーザーのゲーム エクスペリエンスが低下します。

今後の Windows リリースでは、ゲーム以外にも広範なアプリケーションの使用が予定されています。

このインフラストラクチャの一部として、IOCTL_STORAGE_MANAGE_BYPASS_IO と同等の FSCTL_MANAGE_BYPASS_IO が追加されました。 IOCTL_STORAGE_MANAGE_BYPASS_IO はファイル システムによってボリューム/記憶域スタックに送信されますが、ミニフィルターは FSCTL_MANAGE_BYPASS_IOを処理します。 これらの制御コードは、診断できるように設計されています。これらはどちらも BypassIO 要求に失敗したドライバーの ID と、拒否する理由を返します。

ファイル システム フィルターと記憶域スタック全体の BypassIO システム アーキテクチャの詳細については、フィルター ドライバーの BypassIO に関するページを参照してください。

BypassIO サポートの範囲

Windows 11 以降では、BypassIO は次のようにサポートされています。

  • Windows クライアント システムのみ。 サーバー システムのサポートは、将来のリリースで追加されます。

  • NVMe 記憶域デバイスのみ。 他の記憶域テクノロジのサポートは、今後のリリースで追加される予定です。

  • NTFS ファイル システムのみ。 その他のファイル システムのサポートは、今後のリリース時に追加されます。

  • キャッシュされていない読み取りのみがサポートされます。 キャッシュされていない書き込みのサポートは、将来のリリースで追加されます。

  • ファイルでのみサポートされます (ディレクトリまたはボリューム ハンドルではサポートされません)。

BypassIO の DDI の変更と追加

BypassIO サポートを提供するために、記憶域ドライバーに関連する次の DDI が追加されました。

BypassIO をサポートするために必要な記憶域スタック ドライバー

Windows 11 以降、記憶域ドライバーの開発者は、ドライバーの INF または MANIFEST ファイルを更新して、次のように、BypassIO のSTORAGE_SUPPORTED_FEATURES_BYPASS_IOを使用して StorageSupportedFeatures インフラストラクチャを追加する必要があります。

  • サービス定義の下に "Parameters" キーを定義する
  • "StorageSupportedFeatures" という名前の DWORD 値を追加し、この値を 0x1 に設定して BypassIO のサポートを示します。

このレジストリ キーは、ドライバーがバイパス I/O を認識していることをシステムに示します。 ドライバーは、バイパス I/O をサポートする論理ユニット (ディスク) を示すために、 BypassIOSupported が 1 に設定されたStorPortSetUnitAttributesも呼び出す必要があります。

その後、ドライバーは必要に応じてIOCTL_STORAGE_MANAGE_BYPASS_IO を処理します。 FS_BPIO_OP_QUERY操作は、オプトインしていない記憶域スタック ドライバーがある場合に失敗します。

Note

BypassIO をサポートできないドライバーでは、引き続き StorageSupportedFeatures 状態を INF に追加し、その理由を指定してドライバー内で適切に拒否する必要があります。

記憶域ドライバーが INF または MANIFEST ファイルを更新して BypassIO のサポートを示さない場合、そのボリュームまたは記憶域ドライバーに対するすべての BypassIO 操作はすぐにブロックされます。 システムは従来の I/O パスにフォールバックするため、ゲームのパフォーマンスが低下します。

IOCTL_STORAGE_MANAGE_BYPASS_IO 実装の詳細

ファイル システム (現在 NTFS) は、必要に応じて生成されたFSCTL_MANAGE_BYPASS_IOに応答してIOCTL_STORAGE_MANAGE_BYPASS_IO コントロール コードを生成します。

IOCTL_STORAGE_MANAGE_BYPASS_IOへの入力は、対応するFSCTL_MANAGE_BYPASS_IOに似ていますが、BypassIO の有効化、無効化、クエリのみをサポートします。

IOCTL_STORAGE_MANAGE_BYPASS_IOからの出力は、対応するFSCTL_MANAGE_BYPASS_IOに似ています。失敗したドライバーの名前と理由、およびドライバーが BypassIO を拒否した理由に関する操作の状態を識別します。 ファイル システムは、ボリュームおよび記憶域スタックからのIOCTL_STORAGE_MANAGE_BYPASS_IO出力を最大FSCTL_MANAGE_BYPASS_IO伝達します。