在與 ATG 合作之前,請一律先透過您的開發人員關係聯絡人 / DPM。他們提供的資源可能在問題提報之前就協助您解決問題。
前置作業:先執行執行緒調查
在與 ATG 合作之前,請先逐步完成 尋找執行緒問題。這些步驟與 ATG 在合作開始時執行的第一步相同,而您最了解自己的程式碼和預期行為,因此由您的團隊先行調查,通常能更快找出熱點。 接著請與您的開發人員合作夥伴經理 (DPM) 協調。他們會設定合作範圍,並擔任您的聯絡窗口。理想的提供資訊
請在數天前將下列內容提供給 ATG,以便在正式開始日期之前解決任何問題:- 遊戲的可運作分析組建 (含 PIX 標記)
- 組建中每個可執行檔和 DLL 的符號 (PDB)
- 如果執行遊戲需要,請在對應的沙箱中提供至少五個使用者帳戶
- 有問題區域的清單,以及跳至各區域的偵錯命令
- 已知在預算內區域的清單,作為基準
- 已知問題的清單,以及進行中的解決方案
- 高階架構概觀 (預期的執行緒親和性、優先順序、預算)
- 開發團隊中的聯絡人 (姓名 + 電子郵件),以處理後續問題
遊戲的可運作組建
可運作的組建讓 ATG 能以最相關的選項自行擷取,並根據先前擷取所揭示的內容,反覆進行聚焦的擷取。請提供所有可執行檔和 DLL 的對應符號。 若需要沙箱測試帳戶,請自行在 Partner Center 中產生;如果您沒有直接存取權,請詢問您的 DPM。有問題的區域與基準區域
請提供可直接跳至已知熱點的偵錯命令或可重現步驟。由於 ATG 無從得知您遊戲的預算,將熱點與在預算內執行的區域搭配提供,可為他們提供關鍵的比較基準。其他
- 列出已知問題,避免 ATG 重複工作。
- 提供調查期間可詢問問題的聯絡人。
- 包含架構 / 預算概觀 (執行緒親和性、優先順序、記憶體集區)。
擷取
如果無法提供可運作的組建,請提供已知有問題區域的 PIX 擷取以及對應的符號。擷取長度
- 理想長度:15–30 秒。
- 若為突增情況,請包含突增前後數秒的內容。
- 如果需要追蹤啟動行為,請使用 Capture Title Startup。
- 所有擷取都應針對已封裝的組建進行。
建議的 PIX Timing 擷取選項
最低設定:- File Accesses:分析載入模式時所需。
- Memory:至少前三個選項,用於配置模式分析。
- GPU timings:僅在遊戲以檢測圖形驅動程式啟動時可用 (在程式碼中設定,或透過 XBOX Manager 主機設定覆寫)。
自訂配置器
如果您的遊戲使用自訂記憶體配置器,請使用 GDK 自訂配置器事件加以標記: 在 Timing 擷取選項中啟用 Custom allocator events。等待符號處理
儲存擷取之前,請讓 PIX 完成符號處理 (進度列會出現在右上角)。在處理完成前儲存會觸發警告,並產生較難分享的擷取。PIX 事件、標記和執行緒名稱
Timing 擷取需要具備足夠細微度的 PIX 事件 / 標記,才能識別時間花費在哪裡。紀律很重要:- 注意未成對的
PIXBeginEvent/PIXEndEvent,它們會使擷取失效。建議使用PIXScopedEvent,它會在離開範圍時關閉。 - 除非需要 DBCS,否則請使用 CHAR (ANSI) 版本的 PIX 事件,其記憶體用量為 WCHAR 版本的一半。
- 使用細微的標記 (細至每個實體更新的層級),以便找出熱點。
- 為事件提供描述性名稱,並盡可能包含資產名稱。
- 將自旋迴圈包在事件中,讓 ATG 能測量閒置 / 停滯時間。
- 為主要階段新增高階事件:模擬、轉譯、背景工作、串流。
- 使用
SetThreadDescription為遊戲建立的每個執行緒命名。PIX 和 Visual Studio 都會顯示這些名稱,您的遊戲也可以透過GetThreadDescription讀回這些名稱。
摘要
高品質的效能資料是合作是否有成效的關鍵。ATG 首先要求的就是上述擷取和中繼資料,事先準備好可加速整個合作過程。如有疑慮,寧可提供更多資料。相關 API 文件
- PIX3 API 參考:
PIXBeginEvent/PIXEndEvent/PIXScopedEvent/PIXRecordMemoryAllocationEvent/PIXRecordMemoryFreeEvent。
