Обход в драйверах хранилища
Об обходе
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.