다음을 통해 공유


스토리지 드라이버의 BypassIO

BypassIO 정보

Windows 11 바이패스IO는 파일에서 읽기 위한 최적화된 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 바이패스IO는 다음과 같이 지원됩니다.

  • Windows 클라이언트 시스템에서만. 서버 시스템 지원은 향후 릴리스에서 추가될 예정입니다.

  • NVMe 스토리지 디바이스에서만. 다른 스토리지 기술에 대한 지원은 향후 릴리스에서 추가될 예정입니다.

  • NTFS 파일 시스템에서만. 다른 파일 시스템에 대한 지원은 향후 릴리스에서 추가될 예정입니다.

  • 캐시되지 않은 읽기만 지원됩니다. 캐시되지 않은 쓰기에 대한 지원은 향후 릴리스에서 추가될 예정입니다.

  • 파일에서만 지원됩니다(디렉터리 또는 볼륨 핸들에서는 지원되지 않음).

BypassIO에 대한 DPI 변경 및 추가

BypassIO 지원을 제공하기 위해 스토리지 드라이버와 관련된 다음 DDI가 추가되었습니다.

BypassIO를 지원하기 위해 스토리지 스택 드라이버가 수행해야 하는 작업

Windows 11 저장소 드라이버 개발자는 다음과 같이 BypassIO용 STORAGE_SUPPORTED_FEATURES_BYPASS_IOStorageSupportedFeatures 인프라를 추가하기 위해 드라이버의 INF 또는 MANIFEST 파일을 업데이트해야 합니다.

  • 서비스 정의에서 "매개 변수" 키 정의
  • "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 대응하는 것과 유사합니다. 파일 시스템은 볼륨 및 스토리지 스택의 IOCTL_STORAGE_MANAGE_BYPASS_IO 출력을 최대 FSCTL_MANAGE_BYPASS_IO 전파합니다.