預估 CPU 和 GPU 影格的處理時間

評估 CPU 和 GPU 影格的處理時間 (影格時間) 是瞭解應用程式效能及找出瓶頸的關鍵。使用 AGI 剖析應用程式時,系統分析器會提供追蹤記錄資料,方便您估算影格時間。

CPU 時間

在 AGI 中,您可以在系統設定檔的 CPU 追蹤中,查看 CPU 影格的總和使用中影格時間。

CPU 作業時間總計

如要測量 CPU 花費總時間,請選取時間範圍,其中包括連續影格提交事件之間的時間。影格提交事件為 eglSwapBuffers (適用於 OpenGL) 和 vkQueuePresentKHR (適用於 Vulkan)。

多個 eglSwapBuffer 事件的螢幕截圖。
圖 1. 幾個 eglSwapBuffer 事件。


vkQueuePresentKHR 事件的螢幕截圖。
圖 2. vkQueuePresentKHR 事件。

測量結果是預估 CPU 作業時間總計,但不一定代表使用中的 CPU 作業時間。舉例來說,在受 GPU 限制的應用程式中,CPU 可能會等待 GPU 完成工作,再提交新的影格。如果 dequeueBuffereglSwapBuffer (適用於 OpenGL) 或 vkQueuePresent (適用於 Vulkan) 事件佔用了大部分的 CPU 作業時間,就會發生這種情況。等待時間包含在 CPU 作業時間中,但不含使用中的 CPU 作業時間。

這張螢幕截圖顯示 dequeueBuffer 和 eglSwapBuffer 事件期間出現大量閒置情形。
圖 3.dequeueBuffereglSwapBuffer 事件期間大量閒置。

使用中的 CPU 作業時間

使用中的 CPU 時間會決定 CPU 執行應用程式碼的時間,而這些時間未處於閒置狀態。

如要測量使用中的 CPU 時間,請查看 CPU 事件正上方的「Running」配量。計算兩個處於「Running」狀態的影格提交事件之間的追蹤記錄所有部分。請務必加入工作執行緒。

兩段 CPU 作業時間的螢幕截圖,可用於測量使用中的 CPU 作業時間。
圖 5. 兩個 CPU 時段,可用於測量使用中的 CPU 作業時間。


螢幕截圖:多執行緒應用程式,且應用程式在主要執行緒處於閒置狀態。
圖 6. 多執行緒應用程式,在主要執行緒處於閒置狀態時具有工作執行緒。

測量使用中 CPU 時間的另一種方法,是查看 CPU 歷程中的應用程式配量。這些配量會指出 CPU 正在執行的時間,並與「Running」 配量相對應。

這張螢幕截圖顯示與 CPU 追蹤相符的固定執行緒執行狀態。
圖 x.固定執行緒的執行狀態與 CPU 測試群組相符。

為協助找出應用程式配量,您可以在應用程式中加入 ATrace 標記。這樣即可在系統分析器的 CPU 追蹤記錄中顯示標記。

CPU 追蹤中 ATrace 標記的螢幕截圖。
圖 8.CPU 測試群組中的 ATrace 標記。

估算 GPU 影格時間

如要估算 GPU 影格時間,您可以在系統分析器中使用 GPU 配量或 GPU 計數器。使用 GPU 配量時,預估值會更加準確。

GPU 配量

如果系統分析器提供 GPU 配量資訊,您可以測量應用程式處理與單一影格相關的工作所花費的總時間,藉此取得非常準確的 GPU 影格時間資訊。

Mali 裝置

在 Mali 裝置上,GPU 配量具有「片段」、「非片段」,有時也會「補充非片段」軌跡。如果是較複雜的影格,片段和非片段作業會依序執行,因此,可以透過尋找使用中的 GPU 作業之間的間隔來區分某影格的工作。

如果您熟悉要提交至 GPU 的工作,建議您找出已提交的算繪傳遞模式,藉此瞭解影格開始和結束時間。

多個連續執行的影格的螢幕截圖。
圖 9.依序執行多個影格。
放大 AGI 放大個別影格工作的螢幕截圖。
圖 10.放大個別畫面的工作。

如果應用程式的 GPU 工作流程更加平行,您可以在每個切片的「Selection」窗格中尋找所有具有相同 submissionID 的影格時間。

如果是以 Vulkan 為基礎的應用程式,則可以使用多個提交內容來組合影格。使用 Vulkan 事件軌跡追蹤提交 ID,這個測試群組包含每次提交內容的配量。選取提交內容片段時,系統會醒目顯示與提交內容對應的所有 GPU 活動片段。

平行處理 GPU 工作負載的螢幕截圖,其中使用單一影格上的作業可以與其他影格重疊。
圖 11.平行處理的 GPU 工作負載,其中某個影格中的作業可能會與其他影格重疊。


特定影格的多個 Vulkan 事件的螢幕截圖。
圖 12.針對選定的影格提供多個 Vulkan 事件。

Adreno 裝置

在 Adreno 裝置上,GPU 配量會顯示在「GPU Queue 0」軌跡中,而且一律會依序表示,因此您可以查看代表影格轉譯傳遞的所有配量,並使用這些片段測量 GPU 影格時間。

多個連續執行的影格的螢幕截圖。
圖 13.依序執行多個影格。
AGI 放大含有多個算繪通道的影格。
圖 14.放大含有多個算繪通道的影格。

與前述的 Mali 情境類似:如果應用程式使用 Vulkan,則 Vulkan 事件測試群組會提供相關資訊,說明要提交哪些工作來執行影格。如要醒目顯示算繪通道,請按一下與影格相關聯的「Vulkan 事件」配量。

以 Vulkan 為基礎的應用程式螢幕截圖,其中含有針對所選影格的 Vulkan 事件。
圖 15.以 Vulkan 為基礎的應用程式,在所選影格中設有 Vulkan 事件。

在某些情況下,GPU 影格邊界較難區分,這是因為應用程式受到大量的 GPU 限制。在這些情況下,如果您熟悉提交至 GPU 的工作,您可以識別用於轉譯傳遞的模式,並從該項資訊判斷影格邊界。

這張螢幕截圖:高度受到 GPU 繫結的應用程式,具備可識別影格邊界的算繪通道。
圖 16.高度受到 GPU 繫結的應用程式,並具備有助於識別影格邊界的轉譯通道。

GPU 計數器

如果追蹤記錄中沒有 GPU 切片資訊,您可以使用「GPU 計數器」軌跡估算 GPU 影格時間。

Mali 裝置

在 Mali 裝置上,您可以使用「GPU 使用率」測試群組,針對不會大量使用 GPU 的應用程式估算 GPU 影格時間。當應用程式的 GPU 資源較少時,其 GPU 活動會經常有高和低的 GPU 活動,而非表現一致的高活動。如要使用「GPU 使用率」軌跡估算 GPU 影格時間,請測量歷程中高活動時段的持續時間。

Mali 裝置的 GPU 使用率和 GPU 佇列軌跡螢幕截圖。
圖 17.Mali 裝置上的 GPU 使用率和 GPU 佇列追蹤記錄。

如果應用程式耗用大量 GPU 資源,您可以使用「片段」和「非片段」軌跡來估算 GPU 影格時間。在「片段」和「非片段」測試群組的活動層級中尋找模式,即可取得影格邊界的粗略估計,並使用該範圍測量 GPU 影格時間。

片段和非片段音軌的螢幕截圖。
圖 18.片段非片段軌跡。

Adreno 裝置

在 Adreno 裝置上,如果應用程式不耗用大量 GPU,您可以採用與上一節 Mali 裝置相同的方式估算 GPU 影格時間。

Adreno 裝置上 GPU 使用率和 GPU 佇列軌跡的螢幕截圖。
圖 19.Adreno 裝置上的 GPU 使用率和 GPU 佇列會追蹤。

如果應用程式較耗用大量 GPU,您可以使用「Vertex 操作說明/秒」和「片段操作說明 / 秒」軌跡來估算 GPU 影格時間。只要在這些軌道的活動層級中尋找模式,就能取得影格邊界的粗估預估值,並據此測量 GPU 影格時間。

Vertex 操作說明 / 第二測試群組的螢幕截圖。
圖 20. Vertex 操作說明 / 秒課程。

這些曲目可能會提供類似資訊:

  • 陰影 / 秒
  • 陰影 / 秒的片段
  • % 時間陰影 Vertices
  • 時間片段百分比