如需 Magma 的總覽資訊,包括背景、硬體需求和架構說明,請參閱「Magma:總覽」。
如要瞭解 Fuchsia 追蹤功能,請參閱 Fuchsia 追蹤指南。
本頁面將概述 Magma 系統驅動程式應檢測的追蹤記錄事件。
目前並未要求使用追蹤功能檢測 ICD 程式碼。
流量事件
流程事件非常重要,因為它們可連結跨程序和執行緒的相關追蹤事件。這類事件也能協助您在同一執行緒中,連結不同時間的追蹤事件。
GFX 事件
應為 MSD 設定特定流程事件,以便將應用程式的要求連結至 GPU,並將 GPU 連結至顯示器。這些流程事件都會歸類為 gfx
。
event_signal
每當 MSD 發出信號給訊號量時,都應啟動資料流事件,並提供以下資訊:
- 追蹤類型:流程開始
- 類別:
gfx
- 暱稱:
event_signal
- 流程 ID:信號量測器的 koid
這個流程事件應由等待此訊號量用戶端結束。
信號機
當 MSD 收到來自用戶端的指令緩衝區時,應以以下資訊結束流程事件。請為每個與指令緩衝區一起顯示的信號訊號量表新增流程事件結束。
- 追蹤類型:流程結束
- 類別:
gfx
- 暱稱:
semaphore
- 流程 ID:信號量測器的 koid
在傳送指令緩衝區之前,用戶端應先啟動此流程事件。
Magma 事件
應使用流程事件對 MSD 進行檢測,這些事件可在時間和用戶端和裝置執行緒之間連結相關工作。這些流程事件應具有 magma
類別。
指令緩衝區
MSD 應在收到指令緩衝區時啟動流程事件。以下項目應進行檢測:
- 接收指令緩衝區
- 在 GPU 上排程指令緩衝區
- 在 GPU 上執行指令緩衝區
- 完成指令緩衝區
每個流程事件的名稱和追蹤資訊,由各 MSD 自行決定。
Semaphores
MSD 應在等待任何訊號量時啟動流程事件。以下項目應進行檢測:
- 等待信號量
- 傳送信號給訊號機制
- 完成信號量等待
時間長度
每個 MSD 可自行決定要新增哪些追蹤時間長度。每個 MSD 都應設定下列項目的時間長度:
- 排程及執行指令
- 對應和取消對應緩衝區
- 處理來自用戶端的 FIDL 要求
- 任何速度緩慢的作業,例如阻斷或休眠
新增檢測功能時,建議您擷取現有的追蹤記錄,並查看 MSD 執行緒的 CPU 排程。如果 MSD 在 CPU 上執行的時間長,且沒有任何有效時間長度,則應新增更多檢測功能。
命名慣例
一般來說,MSD 時間長度應使用 magma
類別。在函式上使用時間長度是最常見的情況,且時間長度名稱應與類別和函式名稱相符。函式中的時間長度應命名為子函式。就 C++ 而言,這表示時長應以 PascalCase 命名,而 Rust 則應以 snake_case 命名。
計數器
GPU 使用率
應有一個計數器,其中包含以下資訊:
- 類別:
magma
- 暱稱:
GPU Utilization
- 計數器 ID:0
- 項目:
utilization
utilization
項目應為介於 0 到 1 的雙精度值,代表 GPU 在過去 100 毫秒內主動執行工作所占的時間百分比。
虛擬執行緒
虛擬執行緒是一種可視化工作的方式,可在時間軸上同步處理 CPU 以外的工作。這類事件可用於呈現 GPU 上執行的工作。
工作時段
請為 GPU 上可同時執行指令緩衝區的每個硬體建立虛擬執行緒。
在 GPU 上執行指令緩衝區時,應啟動虛擬執行緒時間長度,並在指令完成時結束。
虛擬執行緒流程應將時間長度連結至裝置執行緒上的時間長度,以便提交工作並處理完成作業。