스토리지 드라이버의 BypassIO
BypassIO 정보
BypassIO는 파일에서 읽기에 최적화된 I/O 경로입니다. 이 경로의 목표는 읽기를 수행하는 CPU 오버헤드를 줄이는 것이며, 이는 Windows에서 차세대 게임을 로드하고 실행하는 I/O 요구를 충족하는 데 도움이 됩니다. BypassIO는 Windows에서 DirectStorage를 지원하는 인프라의 일부이며 Windows 11부터 사용할 수 있습니다.
스토리지 드라이버가 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 지원을 제공하기 위해 스토리지 드라이버와 관련된 다음 DPI가 추가되었습니다.
- IOCTL_STORAGE_MANAGE_BYPASS_IO(파일 시스템에서만 생성됨)
- BPIO_INPUT
- BPIO_OUTPUT
- BPIO_OPERATIONS
- BPIO_INFLAGS 열거자
- BPIO_OUTFLAGS 열거자
- BPIO_RESULTS 구조체
BypassIO를 지원하기 위해 수행해야 하는 스토리지 스택 드라이버
Windows 11부터 스토리지 드라이버 개발자는 드라이버의 INF 또는 MANIFEST 파일을 업데이트하여 다음과 같이 BypassIO용 STORAGE_SUPPORTED_FEATURES_BYPASS_IO StorageSupportedFeatures 인프라를 추가해야 합니다.
- 서비스 정의에서 "매개 변수" 키 정의
- "StorageSupportedFeatures"라는 DWORD 값을 추가하고 이 값을 0x1 설정하여 BypassIO 지원을 나타냅니다.
이 레지스트리 키는 드라이버가 바이패스 I/O를 이해한다는 것을 시스템에 나타냅니다. 또한 드라이버는 BypassIOSupported가 1로 설정된 StorPortSetUnitAttributes를 호출하여 바이패스 I/O를 지원하는 논리 단위(디스크)를 나타내야 합니다.
그런 다음 드라이버는 필요에 따라 IOCTL_STORAGE_MANAGE_BYPASS_IO 처리합니다. 옵트인하지 않은 스토리지 스택 드라이버가 있는 경우 FS_BPIO_OP_QUERY 작업이 실패합니다.
참고 항목
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 출력은 실패한 드라이버의 이름과 이유 및 드라이버가 BypassIO를 거부한 이유에 대한 작업 상태를 식별하는 FSCTL_MANAGE_BYPASS_IO 대응과 유사 합니다. 파일 시스템은 볼륨 및 스토리지 스택에서 최대 FSCTL_MANAGE_BYPASS_IO IOCTL_STORAGE_MANAGE_BYPASS_IO 출력을 전파합니다.