WDDM 2.0의 GPU 가상 메모리
이 문서에서는 Windows 10(WDDM 2.0)부터 GPU 가상 메모리 관리에 대한 세부 정보를 제공합니다. GPU 가상 주소 지정을 지원하도록 WDDM이 변경된 이유와 드라이버에서 사용하는 방법을 설명합니다.
소개
WDDM(Windows Display Driver Model) 2.0 이전에는 GPU 엔진이 세그먼트 물리적 주소를 통해 메모리를 참조하도록 DDI(디바이스 드라이버 인터페이스)가 빌드되었습니다. 세그먼트가 애플리케이션 간에 공유되고 과도하게 커밋됨에 따라 리소스는 수명 동안 재배치되고 할당된 실제 주소가 변경되었습니다. 이 프로세스에서는 할당 및 패치 위치 목록을 통해 명령 버퍼 내에서 메모리 참조를 추적해야 했습니다. 그런 다음 GPU 엔진에 제출하기 전에 올바른 실제 메모리 참조를 사용하여 해당 버퍼를 패치해야 했습니다. 이 추적 및 패치는 비용이 많이 들었습니다. 기본적으로 비디오 메모리 관리자(VidMm)가 엔진에 제출하기 전에 모든 패킷을 검사해야 하는 예약 모델을 적용했습니다.
시간이 지남에 따라 더 많은 하드웨어 공급업체가 하드웨어 기반 예약 모델로 전환했습니다. 이 모델에서 작업은 사용자 모드에서 직접 GPU에 제출되고 GPU는 다양한 작업 큐 자체를 관리합니다. 이러한 진화로 인해 VidMm은 GPU 엔진에 제출하기 전에 모든 명령 버퍼를 검사하고 패치할 필요가 없습니다.
이를 위해 WDDM은 WDDM 2.0부터 GPU 가상 주소 지정을 지원합니다. 이 모델에서 각 프로세스에는 모든 GPU 컨텍스트에서 실행할 수 있는 고유한 GPU 가상 주소(GPUVA) 공간이 할당됩니다. 프로세스에서 만들거나 연 할당에는 해당 프로세스의 GPU 가상 주소 공간 내에 고유한 GPUVA가 할당됩니다. 할당된 GPUVA는 할당 수명 동안 일정하고 고유하게 유지됩니다. 따라서 UMD(사용자 모드 디스플레이 드라이버)는 수명 동안 변경되는 기본 실제 메모리에 대해 걱정할 필요 없이 GPU 가상 주소를 통해 할당을 참조할 수 있습니다.
GPU의 개별 엔진은 물리적 또는 가상 모드에서 작동할 수 있습니다.
물리적 모드에서 예약 모델은 WDDM v1.x와 동일하게 유지됩니다. UMD는 할당 및 패치 위치 목록을 계속 생성합니다. 이러한 할당 목록은 명령 버퍼와 함께 제출되며 엔진에 제출하기 전에 명령 버퍼를 실제 실제 주소에 패치하는 데 사용됩니다.
가상 모드에서 엔진은 GPU 가상 주소를 통해 메모리를 참조합니다. UMD는 사용자 모드에서 직접 명령 버퍼를 생성하고 새 서비스를 사용하여 해당 명령을 커널에 제출합니다. UMD는 할당 또는 패치 위치 목록을 생성하지 않지만 할당의 상주 관리를 담당합니다. 드라이버 상주에 대한 자세한 내용은 WDDM 2.0의 드라이버 상주를 참조 하세요.
GPU 메모리 모델
WDDM v2는 GPU 가상 주소 지정, GpuMmu 및 IoMmu에 대한 두 가지 고유 모델을 지원합니다. 드라이버는 모델 중 하나 또는 둘 다를 지원하도록 옵트인해야 합니다. 단일 GPU 노드는 두 모드를 동시에 지원할 수 있습니다.
GpuMmu 모델
GpuMmu 모델에서 VidMm은 GPU 메모리 관리 단위 및 기본 페이지 테이블을 관리합니다. 또한 VidMm은 할당에 대한 GPU 가상 주소 매핑을 관리할 수 있는 서비스를 UMD에 노출합니다. GpuMmu는 GPU가 GPU 페이지 테이블을 사용하여 데이터에 액세스한다는 것을 의미합니다. 페이지 테이블은 시스템 메모리 또는 로컬 디바이스 메모리를 가리킬 수 있습니다.
자세한 내용은 GpuMmu 모델을 참조 하세요.
IoMmu 모델
IoMmu 모델에서 CPU와 GPU는 공통 주소 공간 및 CPU 페이지 테이블을 공유합니다. 이 경우 시스템 메모리만 액세스할 수 있으므로 IoMmu는 통합 GPU에 적합합니다. IoMmu는 GPU와 CPU 모두 동일한 포인터를 사용하여 메모리에 액세스할 수 있는 더 간단한 프로그래밍 모델을 제공합니다. GPU 액세스 가능 메모리에서 별도의 페이지 테이블 집합을 관리할 필요가 없습니다. 즉, IoMmu 모델은 주소 변환 및 관리 오버헤드로 인해 성능이 저하될 수 있습니다.
자세한 내용은 IoMmu 모델을 참조하세요.