IoMmu 모델
이 페이지에서는 WDDM 2.0에 도입된 IoMmu 모델에 대해 설명합니다. 최신 IOMMU 업데이트는 IOMMU 기반 GPU 격리 및 IOMMU DMA 다시 매핑을 참조하세요.
개요
IOMMU(입력 출력 메모리 관리 단위)는 DMA 지원 I/O 버스를 시스템 메모리에 연결하는 하드웨어 구성 요소입니다. 디바이스에서 볼 수 있는 가상 주소를 실제 주소에 매핑하므로 가상화에 유용합니다.
WDDM 2.0 IoMmu 모델에서 각 프로세스에는 다음과 같은 단일 가상 주소 공간이 있습니다.
- CPU와 GPU 간에 공유됩니다.
- OS 메모리 관리자가 관리합니다.
메모리에 액세스하기 위해 GPU는 데이터 요청을 규격 IOMMU로 보냅니다. 요청에는 공유 가상 주소 및 PASID(프로세스 주소 공간 식별자)가 포함됩니다. IOMMU는 공유 페이지 테이블을 사용하여 주소 변환을 수행합니다. 이 작업은 다음 다이어그램에 설명되어 있습니다.
KMD(커널 모드 디스플레이 드라이버)는 DXGK_VIDMMCAPS::IoMmuSupported 캡을 설정하여 IoMmu 모델에 대한 지원을 표현합니다. 이 플래그가 설정되면 비디오 메모리 관리자(VidMm)는 GPU를 사용하여 IOMMU를 사용하여 모든 프로세스를 자동으로 등록하고 해당 프로세스 주소 공간에 대한 PASID를 가져옵니다. PASID는 디바이스를 만드는 동안 드라이버에 전달됩니다.
VidMm은 표시되기 전에 주 할당을 조리개 세그먼트에 매핑하여 디스플레이 컨트롤러가 이러한 할당에 물리적으로 액세스할 수 있도록 합니다.
IoMmu 모델에서 UMD(사용자 모드 디스플레이 드라이버)는 VidMm의 할당 서비스를 사용하여 GPU에 대한 비디오 메모리를 계속 할당합니다. 이 프로세스를 통해 UMD는 다음을 수행할 수 있습니다.
- 상주 모델을 따릅니다.
- DirectX 리소스 공유 모델을 지원합니다.
- 기본 표면이 커널에 표시되고 표시되기 전에 조리개에 매핑되었는지 확인합니다.
UMD는 사용자 모드에서 첫 번째 변환 수준(공유 CPU/GPU 주소 에 대한 타일 리소스 주소)을 완전히 관리합니다.