使用計時擷取來分析 CPU 和 GPU
計時擷取會將CPU和 GPU 分析數據結合成單一擷取,以深入分析您的應用程式。 遊戲執行時會收集該數據,而且額外負荷最小,因此您可以看到工作如何分散到 CPU 核心、GPU 提交圖形工作與 GPU 執行之間的延遲,以及檔案 IO 存取和記憶體配置發生時等等。 這也包括 透過 PixEvents 的應用程式定義事件、標記和計數器。
擷取時間
從 [連線] 檢視中,啟動或附加至您想要的程序(確保未核取與 GPU 擷取選項相關)。
視需要設定您的計時擷取選項,並在準備就緒時,按兩下 [ 開始計時擷取 ] 按鈕開始錄製。 按兩下 [ 停止計時擷取 ] (或終止您的應用程式),以結束錄製。 在短暫的處理期間之後,擷取將會開啟。
計時擷取選項
名稱 | 描述 |
---|---|
擷取模式 | 循序:記錄開始和停止擷取之間的整個事件。 迴圈:將事件記錄到固定大小緩衝區,只儲存最後 n 秒的數據。 如需詳細資訊,請參閱此 循環計時擷取部落格文章 。 |
CPU 範例 | 執行範例分析以查看 CPU 花費時間的位置。 取樣率可設定。 |
內容交換器的呼叫堆疊 | 在線程切換內容時收集 callstack。 |
檔案存取 | 追蹤檔案存取。 |
GPU 計時 | 收集 GPU 工作何時啟動和停止的詳細計時資訊。 |
GPU 資源 | 收集 D3D 對象的詳細資訊 ,例如堆積和資源。 同時追蹤 GPU 落地、降級配置和配置移轉。 |
VirtualAlloc/VirtualFree 事件 | 追蹤透過 VirtualAlloc 和 VirtualFree 函式所做的配置。 |
HeapAlloc/HeapFree 事件 | 追蹤透過 HeapAlloc 和 HeapFree 函式所做的配置。 |
自訂配置器事件 | 追蹤使用 PixEvents 檢測的自訂記憶體配置器所做的配置。 |
頁面錯誤事件 | 收集在擷取執行時發生的頁面錯誤數據。 頁面錯誤會顯示在時間軸和元素詳細數據檢視中。 |
非標題程式的 Callstacks | 擷取標題程式以外的進程呼叫堆疊(已啟動或附加至進程)。 |
核心映像資訊 | 收集資訊需要顯示核心二進位檔的呼叫堆疊。 |
產生 .etl 檔案,而不是 .wpix 檔案 | 產生的 .etl 檔案稍後可以轉換成檔案中的 .wpix 檔案 |轉換功能表。 當您向 PIX 小組回報 Bug 重現時,或如果您有其他工具來處理 ETW 數據,這個選項很有用。 |
程序設計擷取
您可以使用 WinPixEventRuntime 以程式設計方式擷取擷取。 如需詳細資訊,請參閱部落格文章 程序設計擷取。
CPU 分析
取得 擷取時啟用 [CPU 範例 ] 選項,可協助您找出應用程式熱路徑中的緩慢函式,以及找出與線程等候和內容切換相關的問題。 您也可以追蹤不同類型的配置(啟用適當的擷取選項)。
有數篇部落格文章詳細涵蓋這些功能:
- 計時擷取概觀
- 在計時擷取部落格文章中分析 CPU 範例。
- 分析計時擷取中的停滯和內容切換
- 分析計時擷取中的記憶體使用量和效能
- 您也可以檢測自己的自訂配置器。 如需詳細資訊,請參閱部落格文章 記憶體分析支援從標題的自定義配置器所建立的配置。
GPU 分析
您的應用程式是否遇到間歇性畫面中斷? 過度使用VRAM? 系統記憶體與 VRAM 之間的非預期的分頁作業? PIX 中的 GPU 分析功能可協助您了解這些常見且難以分析的情況。
GPU 計時
在擷取擷取以收集 GPU 工作的計時數據時,啟用 GPU 計時選項。 在 [時程表] 檢視中,您可以找到每個 GPU 佇列的通道(在 Lane Selector 中,您可以使用 API 佇列釘選組態快速釘選這些通道)。 這些車道包含數個子蘭:
- PIX 事件 (GPU):GPU 工作的階層式應用程式定義區域。 請參閱 PixEvents。
- GPU 執行:執行會對應至 API 層級的工作提交;例如,透過 ExecuteCommandLists。
- GPU 工作:GPU 上發生的任何工作;例如,Draws、Dispatches、Copies。
- PIX 標記 (GPU):應用程式定義的標記。 請參閱 PixEvents。
當您在車道中選取事件時,您會看到箭號顯示事件產生所在 CPU 的位置。 車道選項功能表中也有各種視覺效果選項(車道名稱旁的齒輪圖示)。 最值得注意的是, 預設會啟用 Flatten Events 和 Flatten GPU Work 選項來保留空間,但您可能會想要在跳入特定畫面時看到完整的 PIX 事件階層或 GPU 工作剖析。
該資料也可透過 [範圍詳細數據] 檢視表格式來取得,方法是選取 [要顯示的專案] 下拉式清單中的相關類別。
簡報和顯示資訊
Vsync 會顯示為個別監視器通道中的標記,而且可以在 [其他] 類別的 [範圍詳細數據] 檢視中找到。
GPU 記憶體和 Direct3D 物件
擷取擷取以收集 Direct3D 對象的相關信息時,啟用 GPU 資源選項。 若要繪製整體記憶體使用量的圖表,您可以在 [計量] 檢視中找到數個計數器。 您可以設定各種預算行,以快速瞭解您是否符合記憶體使用量目標。 當您找到感興趣的區域時,您可以選取時間範圍、單擊滑鼠右鍵操作選單中的 [縮放時程表] 檢視來選取 [範圍],然後將 [選取的時間範圍] 下拉式清單設定為 [選取可見範圍] 來進一步調查。
提示
將線條樣式設定為 Square 可讓您更輕鬆地查看配置的位置。
在 [範圍詳細數據 ] 檢視中,您可以檢視 Direct3D API 對象的各種資訊,例如堆積、資源和管線狀態物件。 為了更輕鬆地找出任何可疑的物件,該資訊會在配置和釋放時分組。
居住
如需落地相關問題,請參閱 [範圍詳細數據] 檢視的 [居住作業]、[降級配置] 和 [配置移轉] 類別。 這些標記和事件也會顯示在 住宅運營 車道上。
居住作業包括MakeResident和收回作業(透過 Direct3D 12 API 起始),以及任何 PageIn 和 PageOut 作業(如需詳細資訊,請參閱 落地)。 當圖形核心 (DXGK) 無法在您的 GPU VRAM 中配置資源時,就會發生降級配置(因為記憶體壓力或分散)。 如果發生這種情況,DXGK 也會嘗試針對那些降級的配置執行配置移轉。 請注意,這些移轉是昂貴的作業,因為它們需要暫停 GPU。
GPU 使用率和簡報計數器
在擷取擷取以收集系統監視器中存在的計數器時,啟用擷取 SysMon 計數器選項,其中包含與 GPU 效能相關的各種計數器。 值得注意的是,有下列計數器:
- 針對目標進程和所有進程,GPU 引擎會細分 GPU 使用率。
- 簡報數據,例如每秒的畫面格(以毫秒為單位,以毫秒為單位,MsBetweenPresents) 和 MsUntilRenderComplete (目前開始時間與 GPU 工作完成之間的時間)。
- GPU 記憶體資訊,包括本機和非本機記憶體使用量、居住和預算。
提示
將滑鼠停留在系統監視器中的計數器名稱上,以取得描述。
這些計數器也可以在擷取時間時即時監視,或按兩下 [系統監視器] 檢視中的 [啟動計數器集合] 按鈕。 圖表可以重新排列,而且可以動態新增或移除計數器。 按兩下 [ 計數器] 以檢視所有可用的計數器。
Win32 file-I/O
請參閱在計時擷取中分析 Win32 檔案 IO 效能的部落格文章。
其他分析功能
- 統計比較有助於判斷 PIX 事件階層的哪些部分在統計上有不同的持續時間,以統計方式比較一組點。 如需詳細資訊,請參閱部落格文章 計時擷取統計比較功能。
- 設定效能預算可協助您快速識別擷取有問題的區域。 如需詳細資訊,請參閱計時擷取計量檢視中使用效能預算的部落格文章。
- 另請參閱部落格文章 計時擷取中的重大路徑分析。