상주 개요
개요
현재 사용자 모드 드라이버는 빌드하는 모든 명령 버퍼와 함께 할당 및 패치 위치 목록 정보를 빌드합니다. 이 정보는 비디오 메모리 관리자가 다음 두 가지 용도로 사용합니다.
- 할당 목록 및 패치 위치 목록은 GPU(그래픽 처리 장치) 엔진에 제출되기 전에 실제 세그먼트 주소로 명령 버퍼를 패치하는 데 사용됩니다. WDDM(Windows 디스플레이 드라이버 모델) v2에서 GPU 가상 주소 지원을 사용하면 이 패치가 필요하지 않습니다.
- 할당 목록 및 패치 위치 목록은 비디오 메모리 관리자가 할당 보존을 제어하는 데 사용됩니다. 비디오 메모리 관리자는 명령 버퍼가 특정 엔진에 대한 실행으로 전송되기 전에 명령 버퍼에서 참조하는 모든 할당이 상주하도록 합니다.
새 상주 모델이 도입되면 명령별 버퍼 목록 대신 디바이스의 명시적 목록으로 상주가 이동됩니다. 비디오 메모리 관리자는 해당 디바이스에 속한 컨텍스트가 실행되도록 예약되기 전에 특정 디바이스 상주 요구 사항 목록의 모든 할당이 상주하는지 확인합니다.
상주 관리를 위해 사용자 모드 드라이버는 두 개의 새 DDI(디바이스 드라이버 인터페이스), MakeResident 및 제거에 액세스할 수 있을 뿐만 아니라 새 TrimResidency 콜백을 구현해야 합니다. MakeResident 는 디바이스 상주 요구 사항 목록에 하나 이상의 할당을 추가합니다. 제거 는 해당 목록에서 더 많은 할당 중 하나를 제거합니다. 상주 요구 사항을 줄이기 위해 사용자 모드 드라이버가 필요한 경우 비디오 메모리 관리자가 TrimResidency 콜백을 호출합니다.
MakeResident 및 Evict 는 내부 참조 수를 유지하기 위해 업데이트되었습니다. 즉, MakeResident 에 대한 여러 호출에서 실제로 할당을 제거하려면 동일한 수의 제거 호출이 필요합니다.
새 상주 모델에서 명령별 버퍼 할당 및 패치 위치 목록이 서서히 단계적으로 중단되고 있습니다. 이러한 목록은 일부 시나리오에 존재하지만 더 이상 거주를 제어할 수 없습니다.
중요 WDDM v2의 상주는 디바이스 상주 요구 사항 목록에 의해서만 제어됩니다. 이는 GPU의 모든 엔진과 모든 API에 적용됩니다.
할당 및 패치 위치 목록 단계화
할당 및 패치 위치 목록의 역할은 새 상주 모델의 도입으로 크게 줄어들고 실제로 하드웨어 지원 일정의 도입과 함께 완전히 사라질 것입니다.
패킷 기반 예약 모델에서 할당 목록은 다음과 같이 계속 존재합니다.
- GPU 가상 주소 지정을 지원하지 않는 엔진의 경우 할당 목록 및 패치 위치 목록이 계속 존재합니다. 그러나 패치 목적으로만 사용되며 더 이상 상주에 대한 제어가 없습니다. 할당 목록 및 패치 위치 목록은 다양한 일반적인 DDI에서 사용자 모드 드라이버와 커널 모드 드라이버 모두에 제공되지만, 상주하지 않는 할당에 대한 참조는 GPU 스케줄러가 제출을 거부하고 디바이스를 오류(분실)하게 만듭니다. 이 작업 모드는 레거시로 간주되며 모든 GPU 엔진이 향후 하드웨어 릴리스에서 GPU 가상 주소 지정을 지원할 것으로 예상됩니다. 이 작업 모드는 이후 버전의 WDDM에서 삭제될 것으로 예상됩니다.
- GPU 가상 주소 지정을 지원하는 엔진의 경우 특정 컨텍스트에 패치가 필요하지 않음을 나타내기 위해 새 컨텍스트 생성 플래그(DXGK_CONTEXTINFO_NO_PATCHING_REQUIRED)가 추가됩니다. 이 플래그를 지정하면 패치 위치 목록이 할당되지 않으며 매우 작은 할당 목록(16개 항목)만 할당됩니다. 할당 목록은 기본 표면에 대한 쓰기 참조를 추적하는 데 사용되며 다른 용도로는 사용되지 않습니다. GPU 스케줄러는 특정 명령 버퍼가 주 표면에 쓰이는 시기를 알고 있어야 하므로 주 표면으로 발생할 수 있는 대칭 이동과 관련하여 해당 버퍼의 실행을 제대로 동기화할 수 있습니다.
마찬가지로 할당 목록은 현재 커널 모드 드라이버 Present 경로에서 현재 작업의 원본 및 대상에 대한 정보를 드라이버에 전달하는 데 사용됩니다. 이 컨텍스트에서 할당 목록은 매개 변수를 전달하기 위해 계속 존재합니다. 그러나 할당 목록은 상주에 사용되지 않습니다. 현재 할당 목록을 패치해야 하는 GPU의 경우 현재와 같은 사전 패치 정보가 포함되며, 스케줄러에 큐에 대기하는 시간과 GPU에서 실행하도록 예약된 시간 사이에 메모리에서 리소스가 이동하는 경우 현재 패킷이 예약되기 전에 다시 패치됩니다.
아래 표에서는 WDDM v2 드라이버가 다양한 사용자 모드 드라이버 및 커널 모드 드라이버 DDI에서 할당 및 패치 위치 목록을 받아야 하는 경우를 요약합니다.
GPU 엔진 | 할당 목록? | 패치 위치 목록? |
---|---|---|
GPU 가상 주소 지원 없음(패치 필요, 기본값) | 예, 전체 크기이지만 패치 목적으로만 사용합니다. 상주하지 않는 할당에 대한 참조로 인해 제출 디바이스가 오류(손실)되고 스케줄러가 제출을 거부합니다. |
예, 전체 크기입니다. |
GPU 가상 주소 지원(DXGK_CONTEXTINFO_NO_PATCHING_REQUIRED 플래그 집합) | 예, 16개 항목입니다. 명령 버퍼에 의해 기록되는 기본 표면(있는 경우)을 참조합니다. 디스플레이 컨트롤러에서 발생하는 입술과의 동기화를 위해 GPU 스케줄러에서 사용됩니다. 기본 표면은 이미 디바이스 상주 요구 사항 목록에 있어야 합니다. 그렇지 않으면 참조가 거부됩니다. |
No |
GPU 가상 주소 지원 + 하드웨어 예약 | 아니요 | 예 |