Magma:追蹤

如需 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 上執行指令緩衝區時,應啟動虛擬執行緒時間長度,並在指令完成時結束。

虛擬執行緒流程應將時間長度連結至裝置執行緒上的時間長度,以便提交工作並處理完成作業。