GPU 除錯¶
通用除錯選項¶
DebugFS 部分提供了有關許多檔案的文件,以幫助除錯 GPU 上的問題。
GPUVM 除錯¶
為了幫助除錯與 GPU 虛擬記憶體相關的問題,驅動程式支援許多選項模組引數
vm_fault_stop - 如果非 0,則在 GPU 頁面錯誤時停止 GPU 記憶體控制器。
vm_update_mode - 如果非 0,則使用 CPU 而不是 GPU 來更新 GPU 頁表。
解碼 GPUVM 頁面錯誤¶
如果在核心日誌中看到 GPU 頁面錯誤,您可以對其進行解碼以找出應用程式中出現的問題。核心日誌中的頁面錯誤可能如下所示
[gfxhub0] no-retry page fault (src_id:0 ring:24 vmid:3 pasid:32777, for process glxinfo pid 2424 thread glxinfo:cs0 pid 2425)
in page starting at address 0x0000800102800000 from IH client 0x1b (UTCL2)
VM_L2_PROTECTION_FAULT_STATUS:0x00301030
Faulty UTCL2 client ID: TCP (0x8)
MORE_FAULTS: 0x0
WALKER_ERROR: 0x0
PERMISSION_FAULTS: 0x3
MAPPING_ERROR: 0x0
RW: 0x0
首先,您有 memory hub,gfxhub 和 mmhub。 gfxhub 是用於某些晶片上的圖形、計算和 sdma 的 memory hub。 mmhub 是用於某些晶片上的多媒體和 sdma 的 memory hub。
接下來,您有 vmid 和 pasid。 如果 vmid 為 0,則此錯誤可能是由核心驅動程式或韌體引起的。 如果 vmid 不為 0,則通常是使用者應用程式中的錯誤。 pasid 用於將 vmid 連結到系統程序 ID。 如果程序在發生錯誤時處於活動狀態,則會列印程序資訊。
接下來是導致錯誤的 GPU 虛擬地址。
客戶端 ID 指示導致錯誤的 GPU 塊。 一些常見的客戶端 ID
CB/DB:圖形管道的顏色/深度後端
CPF:命令處理器前端
CPC:命令處理器計算
CPG:命令處理器圖形
TCP/SQC/SQG:著色器
SDMA:SDMA 引擎
VCN:影片編碼/解碼引擎
JPEG:JPEG 引擎
PERMISSION_FAULTS 描述遇到的錯誤
位 0:PTE 無效
位 1:未設定 PTE 讀取位
位 2:未設定 PTE 寫入位
位 3:未設定 PTE 執行位
最後,RW 指示訪問是讀取 (0) 還是寫入 (1)。
在上面的示例中,著色器(客戶端 ID = TCP)生成了一個到 GPU 虛擬地址 0x0000800102800000 的無效頁面(PERMISSION_FAULTS = 0x3)的讀取(RW = 0x0)。 然後,使用者可以檢查他們的著色器程式碼和資源描述符狀態以確定導致 GPU 頁面錯誤的原因。