Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
DRED, Aygıttan Kaldırılan Genişletilmiş Veriler anlamına gelir. DRED, beklenmeyen cihaz kaldırma hatalarının nedenini belirlemenize yardımcı olmak için tasarlanmış gelişen bir tanılama özellikleri kümesidir. DrED, gerekli özellikleri destekleyen donanımlarda (aşağıda tanımlandığı gibi), GPU sayfası hata raporlamasının yanı sıra otomatik içerik haritaları da sunar.
Otomatik içerik haritaları
Otomatik breadcrumb'lerin sahnesini ayarlamak için öncelikle el ile yapılan türden bahsedelim. Zaman Aşımı Algılama ve Kurtarma (TDR)süresinin dolabileceğini tahmin ederek, GPU ilerleme durumunu izlemek için içerik haritalarını GPU komut akışına yerleştirmek için ID3D12GraphicsCommandList2::WriteBufferImmediate yöntemini kullanabilirsiniz.
Özel, düşük ek yüklü bir uygulama oluşturmak istiyorsanız bu makul bir yaklaşımdır. Ancak hata ayıklayıcı uzantıları veya Windows Hata Raporlama (WER) (Watson olarak da bilinir) aracılığıyla raporlama gibi standartlaştırılmış bir çözümün çok yönlülüğünden yoksun olabilir.
Bu nedenle DRED'nin otomatik izleme bilgisi, ilerleme sayaçlarını GPU komut akışına yerleştirmek için WriteBufferImmediate fonksiyonunu çağırır. DRED, her işlemişledikten sonra bir içerik haritası ekler; bu da GPU çalışmalarıyla sonuçlanan her işlemin (örneğin, Draw, Dispatch, Copy, Resolveve diğerleri) anlamına gelir. Cihaz bir GPU iş yükünün ortasında kaldırılırsa DRED içerik haritası değeri temelde hatadan önce tamamlanan işleme işlemlerinden oluşan bir koleksiyondur.
Breadcrumb geçmişi halka arabelleği, belirli bir komut listesinde en fazla 64 KiB'lık işlemi saklar. Komut listesinde 65536'dan fazla işlem varsa, yalnızca son 64 Kb işlemleri depolanır ve en eski işlemlerin üzerine yazılır. Ancak yol gösterici sayacı değeri UINT_MAX
kadar saymaya devam etmektedir. Bu nedenle, LastOpIndex = (BreadcrumbCount - 1) % 65536.
DRED 1.0 ilk olarak Windows 10, sürüm 1809'da (Windows 10 Ekim 2018 Güncelleştirmesi) kullanıma sunulmuş ve temel otomatik kök izleme özelliklerini tanıtmıştır. Ancak, api'ler yoktu ve DRED 1.0'ı etkinleştirmenin tek yolu, Apps & Games>Oyun Performansı ve Uyumluluğuiçin bir TDR çoğaltması (yeniden oluşturma) yakalamak için Geri Bildirim Merkezi kullanmaktı. DRED 1.0'ın birincil amacı, müşteri geri bildirimleri aracılığıyla oyun kilitlenmelerinin kök neden analizine yardımcı olmaktı.
Uyarılar
- Gpu yoğun şekilde işlem hattına alındığından içerik haritası sayacının tam olarak başarısız olan işlemi gösterdiği garanti değildir. Aslında bazı kutucuk tabanlı ertelenmiş işleme cihazlarında içerik haritası sayacının gerçek GPU ilerlemesinin ardındaki tam kaynak veya sıralanmamış erişim görünümü (UAV) engeli olması mümkündür.
- Görüntü sürücüsü komutları yeniden sıralayabilir, bir komutu yürütmeden önce kaynak bellekten önceden yükleyebilir veya bir komutun tamamlanmasından sonra önbellekteki belleği temizleyebilir. Bunlardan herhangi biri GPU hatası oluşturabilir. Bu gibi durumlarda otomatik içerik haritası sayaçları daha az yararlı veya yanıltıcı olabilir.
Performans
Otomatik içerik haritaları düşük ek yük olacak şekilde tasarlanmış olsa da, bunlar ücretsiz değildir. Ampirik ölçümler tipik bir AAA Direct3D 12 grafik oyun motorunda 2-5% performans kaybı gösteriyor. Bu nedenle otomatik içerik haritaları varsayılan olarak kapalıdır.
Donanım gereksinimleri
İçerik haritası sayacı değerlerinin cihaz kaldırıldıktan sonra korunması gerektiğinden, içerik haritalarını içeren kaynağın sistem belleğinde bulunması ve cihazın kaldırılması durumunda kalıcı olması gerekir. Bu, görüntü sürücüsünün D3D12_FEATURE_EXISTING_HEAPSdesteklemesi gerektiği anlamına gelir. Neyse ki, Windows 10, sürüm 1903'te çoğu Direct3D 12 ekran sürücüsü için bu durum geçerlidir.
GPU sayfası hata raporlama
DRED 1.1 için yeni bir özellik, DRED GPU sayfası hata raporlama özelliğidir. Gpu sayfası hatası genellikle bu koşullardan biri altında oluşur.
- Bir uygulama, silinen bir nesneye başvuran GPU üzerinde çalışmayı yanlışlıkla yürütür. Bu, beklenmeyen bir cihazın kaldırılmasının en önemli nedenlerinden biridir.
- Bir uygulama, çıkarılan kaynağa veya yerleşik olmayan bir kutucuğa erişen GPU üzerinde yanlışlıkla çalışma yürütür.
- Gölgelendirici başlatılmamış veya eski bir tanımlayıcıya başvurur.
- Gölgelendirici, kök bağlamanın sonunun ötesinde dizin oluşturur.
DRED, GPU tarafından bildirilen sayfa hatasının sanal adresiyle (VA) eşleşen mevcut veya yakın zamanda serbest kalan API nesnelerinin adlarını ve türlerini bildirerek bu senaryolardan bazılarını ele almaya çalışır.
Uyarı
Tüm GPU'lar sayfa hatalarını desteklemez (ancak çoğu destekler). Bazı GPU'lar bellek hatalarına şu şekilde yanıt verir: bit kovası yazmaları; simülasyon verilerini okuma (örneğin, sıfırlar); veya yalnızca sistem askıda kalarak. Ne yazık ki GPU'nun hemen yanıt vermediği durumlarda Zaman Aşımı Algılama ve Kurtarma (TDR) kanalda daha sonra gerçekleşerek kök nedeni bulmayı daha da zorlaştırabilir.
Performans
Direct3D 12 çalışma zamanı ortamı, sanal adrese (VA) göre dizine alınabilen mevcut ve yeni silinen API nesnelerinin bir koleksiyonunu aktif olarak yönetmelidir. Bu, sistem belleği ek yükünü artırır ve nesne oluşturma ve yok etme işlemine küçük bir performans isabeti getirir. Bu nedenle, bu davranış varsayılan olarak kapalıdır.
Donanım gereksinimleri
Sayfa hatasını desteklemeyen bir GPU, otomatik iz bırakma özelliğinden yine de faydalanabilir.
Kodda DRED'i ayarlama
DRED ayarları işlemin genel ayarlarıdır ve Direct3D 12 Cihazı oluşturmadan önce bunları yapılandırmanız gerekir. Bunu yapmak için D3D12GetDebugInterface işlevini çağırarak ID3D12DeviceRemovedExtendedDataSettingsalın.
CComPtr<ID3D12DeviceRemovedExtendedDataSettings> pDredSettings;
VERIFY_SUCCEEDED(D3D12GetDebugInterface(IID_PPV_ARGS(&pDredSettings)));
// Turn on auto-breadcrumbs and page fault reporting.
pDredSettings->SetAutoBreadcrumbsEnablement(D3D12_DRED_ENABLEMENT_FORCED_ON);
pDredSettings->SetPageFaultEnablement(D3D12_DRED_ENABLEMENT_FORCED_ON);
Dikkat
DRED ayarlarında yapılan değişikliklerin önceden oluşturulmuş cihazlar üzerinde hiçbir etkisi yoktur. Ancak D3D12CreateDevice sonraki çağrılarda en son DRED ayarları kullanılır.
Koddaki DRED verilerine erişme
Cihazın kaldırıldığı algılandıktan sonra (örneğin, PresentDXGI_ERROR_DEVICE_REMOVEDdöndürdüğünde), kaldırılan cihazın DRED verilerine erişmek için ID3D12DeviceRemovedExtendedData arabiriminin yöntemlerini kullanın.
ID3D12DeviceRemovedExtendedData arabirimini almak için, ID3D12Device (veya türetilmiş) arabiriminde ID3D12DeviceRemovedExtendedDataarabirim tanımlayıcısını (IID) geçirerek QueryInterface çağırın.
void MyDeviceRemovedHandler(ID3D12Device * pDevice)
{
CComPtr<ID3D12DeviceRemovedExtendedData> pDred;
VERIFY_SUCCEEDED(pDevice->QueryInterface(IID_PPV_ARGS(&pDred)));
D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT DredAutoBreadcrumbsOutput;
D3D12_DRED_PAGE_FAULT_OUTPUT DredPageFaultOutput;
VERIFY_SUCCEEDED(pDred->GetAutoBreadcrumbsOutput(&DredAutoBreadcrumbsOutput));
VERIFY_SUCCEEDED(pDred->GetPageFaultAllocationOutput(&DredPageFaultOutput));
// Custom processing of DRED data can be done here.
// Produce telemetry...
// Log information to console...
// break into a debugger...
}
DRED'ye hata ayıklayıcısı erişimi
Hata ayıklama araçları, d3d12 üzerinden DRED verilerine erişebilir! D3D12DeviceRemovedExtendedData veri ihracı.
WinDbg kullanıcıları için Direct3D 12 DRED durumunda hata ayıklamayı çok daha kolay hale getiren bir WinDBG uzantısı için DirectX-Debugging-Tools GitHub deposuna bakınız.
DRED telemetrisi
Uygulamanız DRED özelliklerini denetlemek ve sorunları analiz etmeye yardımcı olmak için telemetri toplamak için DRED API'lerini kullanabilir. Bu, yeniden üretilmeyen TDR'leri yakalamak için size çok daha geniş bir ağ sağlar.
Windows 10, sürüm 1903 itibarıyla, kullanıcı modu cihazlarının kaldırılmasıyla ilgili tüm olaylar, Watson olarak da bilinen Windows Hata Bildirimi (WER)bildirilir. Uygulama, GPU ve görüntü sürücüsünün belirli bir bileşimi yeterli sayıda cihazdan kaldırılan olay oluşturuyorsa, DRED benzer bir yapılandırmada aynı uygulamayı başlatan müşteriler için geçici olarak etkinleştirilebilir.
DRED hakkında daha fazla bilgi
- DirectX Hata Ayıklama Araçları GitHub deposu
- DRED için Hata Ayıklayıcı uzantısı blog gönderisi
- DRED v1.2, Otomatik İz Bırakma blog gönderisinde PIX işaretleyici ve olay dizelerini destekler.