다음을 통해 공유


더티 비트 추적

이 문서에서는 Windows 11 버전 24H2(WDDM 3.2)부터 지원되는 더티 비트 추적 기능에 대해 설명합니다. GPU 병렬 처리 디바이스에서 실시간 마이그레이션을 지원하는 드라이버도 더티 비트 추적을 지원해야 합니다.

소개

클라우드 시나리오에서 GPU의 인기가 높아짐에 따라 가상 머신을 한 물리적 호스트에서 다른 호스트로 마이그레이션해야 기본 합리적인 성능을 얻을 수 있는지 확인해야 합니다. 이러한 요구 사항은 사용자 영향을 줄이는 것뿐만 아니라 VM이 마이그레이션될 때 TCP 요청 시간 제한과 같은 문제를 방지하기 위한 것입니다.

실제 호스트 간에 메모리 콘텐츠를 전송하는 작업은 두 가지 전체 패스로 수행됩니다.

  1. 브라운아웃: 브라운아웃 기간 동안 가상 머신이 계속 실행되고 있지만 시스템은 더티 데이터를 반복적으로 저장합니다. 목표는 빠르게 복사할 수 있는 작은 데이터 하위 집합에 수렴될 때까지 각 반복 중에 더러워지는 데이터의 양이 더 작아지는 것입니다. 이 데이터 양은 컴퓨터의 워크로드에 따라 다르며 특정 크기로 수렴되도록 보장되지 않습니다.

  2. 정전: 중단 기간 동안 가상 머신이 일시 중지되고 모든 다시 기본 더티 데이터가 복사됩니다. 이 복사본을 사용하면 대상 컴퓨터의 결과 데이터가 원본과 동일한 상태가 됩니다.

더티 비트 추적이 없으면 시스템은 정전 기간 동안 GPU의 VRAM(프레임 버퍼)의 전체 복사본을 하나만 사용해야 합니다. 브라운아웃 패스를 지원하려면 하드웨어에서 더러워진 메모리 페이지를 적극적으로 추적하고 OS에서 복사할 메모리만 알 수 있도록 OS에 다시 보고할 수 있어야 합니다.

세부 설계

보고 기능

어댑터 초기화 중에 Dxgkrnl은 드라이버를 쿼리하여 하드웨어에서 사용하는 더티 비트플레인의 형식, 즉 각 비트가 나타내는 페이지 크기(또는 데이터 양)에 대한 정보를 요청합니다.

더티 캡처 시작 및 중지

더티 정보 추적이 하드웨어 성능에 높은 비용이 드는 경우 브라운아웃 기간 동안에만 더티 추적을 사용하도록 설정하는 것이 좋습니다. 이 시간 동안 마이그레이션 비용을 최소화하는 것이 추적의 잠재적 성능 영향보다 더 중요합니다.

그러나 성능에 미미하거나 전혀 영향을 주지 않는 경우 항상 이 동작을 사용하도록 설정하는 이점이 있습니다. 일부 사용자는 VM에서 무거운 GPU 워크로드를 수행하지 않을 수 있으므로 메모리가 처음부터 크게 더러워지지 않을 수 있습니다. 시작 시 더티 비트 추적을 사용하도록 설정하면 브라운아웃의 첫 번째 반복에서 프레임 버퍼의 전체 복사본 없이도 더티 데이터를 즉시 사용할 수 있습니다. 사용자가 더러워진 메모리의 양이 작으면(예: 사용자가 주로 CPU 워크로드를 수행하는 경우) 마이그레이션 비용 절감이 상당히 클 수 있습니다.

더티 비트 쿼리

더티 정보는 더티 페이지의 비트플레인으로 표시됩니다. 비트 평면의 각 비트는 하나의 메모리 "페이지"를 나타냅니다. 더티 데이터의 페이지 크기는 GPU에서 가상 주소 지정의 자연스러운 페이지 크기(예: 4KB/64KB)와 일치할 필요가 없습니다. 특정 하드웨어에 가장 적합한 것이 무엇이든 될 수 있습니다. 드라이버는 초기화 중에 이 페이지 크기를 보고합니다.

브라운아웃 기간 동안 Dxgkrnl은 각 반복 간에 더티 데이터에 대한 하드웨어를 쿼리합니다. 이때 드라이버는 비트플레인 데이터를 원자성으로 쿼리하고 다시 설정할 수 있어야 합니다. 즉, 하드웨어는 값을 쿼리하고 단일 원자성 작업에서 0으로 다시 설정하여 더티 정보의 데이터 손실을 방지할 수 있어야 합니다.

가상 머신이 모두 동일한 대상으로 마이그레이션되는 것은 아니므로 각 가상 GPU 인스턴스에 대해 프레임 버퍼의 마이그레이션이 발생합니다. 따라서 드라이버는 해당 특정 가상 GPU 인스턴스를 나타내는 전체 프레임 버퍼의 지정된 하위 범위에 대한 비트플레인 정보를 쿼리할 수 있어야 합니다. 예를 들어 8GB GPU는 다른 더티 비트 데이터에 영향을 주지 않고 VRAM의 각 2GB 범위에 대해 비트플레인의 비트를 개별적으로 쿼리하고 다시 설정할 수 있어야 합니다.

DDI 변경 내용

기능

다음 대문자는 DXGK_QUERYADAPTERINFOTYPE 추가됩니다.

메모리 기반 DDI

VRAM에서 수정 작업의 추적은 연속적으로 백업되지 않을 수 있는 할당을 위한 것입니다. 예를 들어 Live Migration초기 사용은 가상 함수에 대한 프레임 버퍼 예약 추적에 적용됩니다. 따라서 더티 비트 추적에 표시되는 실제 주소는 작동 중인 할당을 나타내는 범위 컬렉션으로 구성됩니다.

작업이 동일한 범위와 일치하도록 하는 것이 중요합니다. 대부분의 경우 이 일치는 적절한 상태 추적을 보장하기 위해 인터페이스의 고정이 적용되어야 합니다. KMD를 사용하여 이 추적을 지원하기 위해 다음 인터페이스가 도입되었습니다.