Поделиться через


Обход в драйверах хранилища

Об обходе

BypassIO — это оптимизированный путь ввода-вывода для чтения из файлов. Цель этого пути заключается в сокращении нагрузки на ЦП операций чтения, что помогает удовлетворить требования ввода-вывода к загрузке и запуску игр следующего поколения в Windows. BypassIO является частью инфраструктуры для поддержки DirectStorage в Windows и доступна начиная с Windows 11.

Важно, чтобы драйверы хранилища реализовали поддержку Обходио ИО, и что вы максимально можете включить BypassIO. Без поддержки стека хранилища производительность игры снижается, что приводит к снижению производительности игр для конечных пользователей.

В будущих выпусках Windows будет использоваться более широкое приложение.

IOCTL_STORAGE_MANAGE_BYPASS_IO и эквивалентные FSCTL_MANAGE_BYPASS_IO были добавлены в рамках этой инфраструктуры. IOCTL_STORAGE_MANAGE_BYPASS_IO отправляется файловыми системами в стеки томов и хранилищ, а минифильтры FSCTL_MANAGE_BYPASS_IO. Эти коды управления предназначены для диагностики: они возвращают удостоверение драйвера, завершившемся сбоем запроса BypassIO, и причиной вето на него.

Дополнительные сведения об архитектуре системы Обходной системы см. в разделе "Обходио" в драйверах фильтров и хранилищах для обхода системы файловой системы.

Область поддержки BypassIO

Начиная с Windows 11, BypassIO поддерживается следующим образом:

  • Только в клиентских системах Windows. В будущем выпуске будет добавлена поддержка системы сервера.

  • Только на устройствах хранилища NVMe. Поддержка других технологий хранения будет добавлена в будущий выпуск.

  • Только в файловой системе NTFS. Поддержка других файловой системы будет добавлена в будущий выпуск.

  • Поддерживаются только некшированные операции чтения. Поддержка некшированных записей будет добавлена в будущий выпуск.

  • Поддерживается только в файлах (не поддерживается в дескрипторах каталогов или томов).

Изменения и дополнения DDIs для BypassIO

Для предоставления поддержки BypassIO добавлены следующие DDIs, относящиеся к драйверам хранилища.

  • IOCTL_STORAGE_MANAGE_BYPASS_IO (только для файловой системы)
  • BPIO_INPUT
  • BPIO_OUTPUT
  • BPIO_OPERATIONS
  • перечислитель BPIO_INFLAGS
  • перечислитель BPIO_OUTFLAGS
  • структура BPIO_RESULTS

Какие драйверы стека хранилища необходимо сделать для поддержки BypassIO

Начиная с Windows 11 разработчики драйверов хранилища должны обновить INF-файлы драйвера или MANIFEST, чтобы добавить инфраструктуру StorageSupportedFeatures с STORAGE_SUPPORTED_FEATURES_BYPASS_IO для BypassIO следующим образом:

  • Определение ключа Parameters в определении службы
  • Добавьте значение DWORD с именем StorageSupportedFeatures и задайте для этого значения значение 0x1, чтобы указать поддержку BypassIO.

Этот раздел реестра указывает системе, что драйвер понимает обход ввода-вывода. Драйвер также должен вызывать StorPortSetUnitAttributes с параметром BypassIOSupported значение 1, чтобы указать, какой логический блок (диск) поддерживает обход ввода-вывода.

Затем драйвер обрабатывает IOCTL_STORAGE_MANAGE_BYPASS_IO по мере необходимости. Операция FS_BPIO_OP_QUERY завершается ошибкой, если есть драйвер стека хранилища, который не отказался.

Примечание.

Драйвер, который никогда не может поддерживать BypassIO, должен добавить состояние StorageSupportedFeatures в INF, а затем вето соответствующим образом внутри драйвера, указав причину.

Если драйвер хранилища не обновляет свой INF-файл или ФАЙЛ МАНИФЕСТа, чтобы указать поддержку BypassIO, все операции BypassIO с этим томом или драйвером хранилища немедленно блокируются. Система возвращается к традиционному пути ввода-вывода, что приводит к снижению производительности игры.

сведения о реализации IOCTL_STORAGE_MANAGE_BYPASS_IO

Файловая система (в настоящее время NTFS) создает код управления IOCTL_STORAGE_MANAGE_BYPASS_IO в ответ на созданный FSCTL_MANAGE_BYPASS_IO по мере необходимости.

Входные данные для IOCTL_STORAGE_MANAGE_BYPASS_IO похожи на его FSCTL_MANAGE_BYPASS_IO аналога, но поддерживает только обход обхода, включение, отключение и запросы.

Выходные данные из IOCTL_STORAGE_MANAGE_BYPASS_IO похожи на его FSCTL_MANAGE_BYPASS_IO , определяя имя и причину сбоя драйвера, а также состояние операции по поводу того, почему драйвер ветоed BypassIO. Файловая система распространяет IOCTL_STORAGE_MANAGE_BYPASS_IO выходные данные из тома и стека хранилища до FSCTL_MANAGE_BYPASS_IO.