필터 드라이버에 대한 BypassIO
BypassIO 정보
Windows 11 시작해서 BypassIO가 파일에서 읽기에 최적화된 I/O 경로로 추가되었습니다. 이 경로의 목표는 읽기 작업의 CPU 오버헤드를 줄이는 것이며, 이는 Windows 차세대 게임을 로드하고 실행하는 I/O 요구를 충족하는 데 도움이 됩니다. BypassIO는 Windows DirectStorage를 지원하는 인프라의 일부입니다.
미니 필터는 BypassIO에 대한 지원을 구현하고, BypassIO를 최대한 사용하도록 설정하는 것이 중요합니다. 필터 지원이 없으면 게임 성능이 저하되어 최종 사용자에게 게임 환경이 저하됩니다.
향후 Windows 릴리스에서는 게임 이외의 광범위한 애플리케이션 사용이 있을 것입니다.
BypassIO는 핸들별 개념입니다. BypassIO가 요청되면 명시적 파일 핸들에 대해 요청됩니다. BypassIO는 해당 파일의 다른 핸들에 영향을 주지 않습니다.
FSCTL_MANAGE_BYPASS_IO 및 이와 동등한 IOCTL_STORAGE_MANAGE_BYPASS_IO 이 인프라의 일부로 추가되었습니다. 미니 필터는 FSCTL_MANAGE_BYPASS_IO 처리하지만 IOCTL_STORAGE_MANAGE_BYPASS_IO 파일 시스템에서 볼륨/스토리지 스택으로 전송됩니다. 이러한 제어 코드는 진단 가능하도록 설계되었습니다. 두 코드는 모두 BypassIO 요청에 실패한 드라이버의 ID와 거부 이유를 반환합니다.
이 페이지에서는 파일 시스템 필터 및 스토리지 스택의 아키텍처 세부 정보와 미니 필터 드라이버에서 BypassIO를 구현하는 방법에 대한 정보를 제공합니다. 스토리지 드라이버와 관련된 BypassIO 정보는 스토리지 드라이버에 대한 BypassIO를 참조하세요.
BypassIO 지원 범위
Windows 11 바이패스IO는 다음과 같이 지원됩니다.
Windows 클라이언트 시스템에서만. 서버 시스템 지원은 향후 릴리스에서 추가될 예정입니다.
NVMe 스토리지 디바이스에서만. 다른 스토리지 기술에 대한 지원은 향후 릴리스에서 추가될 예정입니다.
NTFS 파일 시스템에서만. 다른 파일 시스템에 대한 지원은 향후 릴리스에서 추가될 예정입니다.
캐시되지 않은 읽기만 지원됩니다. 캐시되지 않은 쓰기에 대한 지원은 향후 릴리스에서 추가될 예정입니다.
파일에서만 지원됩니다(디렉터리 또는 볼륨 핸들에서는 지원되지 않음).
BypassIO 작동 방식
BypassIO 지원 FileHandle에서 NtReadFile이 호출되면 작업은 전체 파일 시스템 스택, 볼륨 스택 및 스토리지 스택을 트래버스하는 기존 I/O 스택을 통과하지 않습니다. 대신 IRP가 실행되지 않고 I/O 관리자에서 (NTFS) 파일 시스템, 디스크(classpnp) 드라이버, StorNVMe 드라이버로 직접 작업이 흐릅니다. BypassIO 사용 FileHandle 사용:
- 모든 파일 시스템 필터를 건너뜁니다.
- 모든 볼륨 스택 필터를 건너뜁니다.
- 디스크 드라이버 위의 모든 스토리지 스택 필터 및 드라이버와 디스크와 StorNVMe 드라이버 간에 건너뜁니다.
BypassIO에 대한 DDI 변경 및 추가
BypassIO 지원을 제공하기 위해 필터 드라이버와 관련된 다음 DPI가 추가되었습니다.
- FltVetoBypassIo 함수
- FS_BPIO_INFLAGS 열거자
- FS_BPIO_INFO 구조체
- FS_BPIO_INPUT 구조체
- FS_BPIO_OPERATIONS 열거자
- FS_BPIO_OUTFLAGS 열거자
- FS_BPIO_OUTPUT 구조체
- FS_BPIO_RESULTS 구조체
- FSCTL_MANAGE_BYPASS_IO 제어 코드
- FsRtlGetBypassIoOpenCount 함수
또한 BypassIO를 지원하도록 다음 DPI가 변경되었습니다.
- BypassIoOpenCount 필드가 FSRTL_ADVANCED_FCB_HEADER 구조체에 추가되었습니다. 파일 시스템은 이 필드를 사용하여 현재 BypassIO를 사용하도록 설정된 스트림에서 고유한 FileObjects 수를 유지 관리합니다. 이 필드를 추가하면 구조체 크기가 증가합니다. Windows 11 시작하는 데 사용할 구조 버전은 FSRTL_FCB_HEADER_V4.
BypassIO 사용 핸들에 대한 다른 작업의 영향
핸들에서 BypassIO를 사용하도록 설정해도 다른 핸들에는 영향을 주지 않습니다. 그러나 BypassIO 사용 핸들에 대한 다른 작업은 다음과 같은 BypassIO 사용에 영향을 줍니다.
BypassIO가 활성화되고 작동하는 파일에 대한 핸들 A가 열려 있고 다른 사용자(예: 다른 스레드 또는 프로세스)가 핸들 B를 열어 캐시되거나 메모리 매핑된 IO를 수행하는 경우 Handle B가 닫히기 전까지는 Handle A에서 BypassIO가 일시적으로 일시 중단됩니다. 대신 시스템은 기존 I/O 경로를 사용하여 부실 데이터가 발생하지 않도록 보장합니다. 시스템은 모든 데이터 섹션 및 캐시 맵이 삭제될 때까지 해당 핸들의 기존 I/O 경로를 계속 사용하므로 BypassIO를 다시 시작하려면 필터가 핸들의 파일을 닫아야 합니다.
BypassIO 사용 파일이 스파스로 표시된 경우 모든 BypassIO 작업은 기존 I/O 경로를 사용하기 시작합니다.
BypassIO 사용 파일을 조각 모음하면 모든 BypassIO 작업이 기존 I/O 경로를 사용합니다. 조각 모음이 완료되면 시스템은 해당 핸들의 BypassIO 경로로 다시 전환됩니다.
미니 필터에서 BypassIO 지원 구현
INF 또는 MANIFEST 파일 업데이트
Windows 11 필터 개발자는 드라이버의 SupportedFeatures에 SUPPORTED_FS_FEATURES_BYPASS_IO 추가해야 합니다. INF 또는 MANIFEST 파일. (관리자 권한 명령 프롬프트를 입력 fltmc instances 하여 모든 활성 필터에 대한 "SprtFtrs" 값을 볼 수 있습니다.)
참고
BypassIO를 지원하지 않는 필터는 여전히 supportedFeatures 상태에 SUPPORTED_FS_FEATURES_BYPASS_IO 추가한 다음 필터 내에서 적절하게 거부하여 이유를 지정해야 합니다.
미니 필터는 바이패스IO 거부를 최대한 최소화하는 것이 좋습니다.
미니 필터가 BypassIO를 사용하도록 설정된 볼륨에 연결하지만 해당 미니 필터가 SUPPORTED_FS_FEATURES_BYPASS_IO 포함하도록 SupportedFeatures 설정을 업데이트하지 않은 경우 해당 볼륨의 모든 BypassIO 작업이 즉시 차단되어 기존 I/O 경로로 되돌아가 게임 성능이 저하됩니다.
IRP_MJ_READ 또는 IRP_MJ_WRITE 필터링하지 않는 미니 필터는 SupportedFeatures에서 SUPPORTED_FS_FEATURES_BYPASS_IO 추가한 것처럼 BypassIO 지원에 자동으로 옵트인됩니다.
옵트 인 하지 않은 연결된 미니 필터가 있는 경우 스택에서 FS_BPIO_OP_ENABLE 및 FS_BPIO_OP_QUERY 작업이 실패합니다.
BypassIO 요청에 대한 지원 구현
미니 필터는 FSCTL_MANAGE_BYPASS_IO 제어 코드를 통해 전송되는 BypassIO 요청에 대한 지원을 추가해야 합니다. 자세한 내용은 BypassIO 작업 지원을 참조하세요 .
BypassIO가 작동하는지 여부 확인
FS_BPIO_OP_QUERY 작업을 지정하는 FSCTL_MANAGE_BYPASS_IO 발급하는 fsutil 명령이 추가되었습니다. 표시된 결과는 BypassIO를 방지하는 첫 번째 드라이버와 그 이유를 식별합니다.
> fsutil bypassIo state <path>
여기서 <경로> 는 볼륨, 디렉터리 또는 특정 파일 이름이 될 수 있습니다.
예를 들어 WOF 미니 필터가 BypassIO에 옵트인하지 않았다고 가정해 봅시다. 명령을 fsutil bypassIo state c:\ 실행하면 다음 출력이 생성됩니다.
BypassIo on "c:\" is not currently supported.
Status: 506 (At least one minifilter does not support bypass IO)
Driver: wof.sys
Reason: The specified minifilter does not support bypass IO.
NTFS 관련 동작
BypassIO는 NTFS 상주 파일에서 사용하도록 설정할 수 있습니다. 그러나 파일이 상주하는 한 기존 I/O 경로가 소요됩니다. 비거주자가 되도록 파일에 쓰기가 발생하면 시스템에서 BypassIO 경로를 사용하도록 전환됩니다.
BypassIO 활성 파일에서는 NTFS 압축을 사용하도록 설정할 수 없습니다.
BypassIO 활성 파일에서 NTFS 암호화를 사용하도록 설정할 수 있습니다. BypassIO가 일시 중지됩니다.
BypassIO는 읽기/쓰기 작업을 오프로드하는 데 영향을 주지 않습니다.