Android GPU 检查器 (AGI)

//

使用这款强大的图形分析器分析您的游戏对 Android 设备的影响,以便您识别性能问题和需要优化的区域。

https://developer.android.com/agi

AGI 下载 

AGI 可在下方或 GitHub 上下载。有关要求和设置信息,请参阅快速入门。发行说明和开发者版本也可以在 GitHub 上找到。
平台
SHA-256 校验和
尺寸
视窗 agi-2022-3.0.1-windows.msi
2cf5e1e5f57257f836c5b2bfd98b54acbc29f8e44e98a5ae3b225c2307269dcd
121 兆字节
agi-2022-3.0.1-windows.zip
e4400fb166b9d109557b058324ffeed73e7fd0b110a9dd6abfbff4d26d52aa6c
121 兆字节
苹果电脑 agi-2022-3.0.1-macos.dmg
17b67329b5e1074d5836d73441587ee851ee0f6f1062784002e0f733e71aaedb
164 兆字节
agi-2022-3.0.1-macos.zip
7a7166eaecc36afb1483e663a8ddcf417a482b7ab1f2d2446fd4a155d2623a0a
152 兆字节
Linux agi-2022-3.0.1-linux.deb
e4a2f48bda46730c4978fdeac9e846cb49945c011446d4772bef8e9ae8181306
70 MB
agi-2022-3.0.1-linux.zip
b0f9fb94290ecf0a2e2deb256ea41f7ce5c4e21f4cb9608f0843bd911c5a5789
82 兆字节

//

Android GPU Inspector 快速入门

本主题介绍如何 使用 Android GPU Inspector (AGI) 在您的 Android 应用程序上执行系统分析和 帧分析。

本快速入门适用于熟悉 Android 图形开发的开发人员。

计算机要求

运行 AGI 的计算机必须满足以下要求:

  • 需要以下操作系统之一:

    • Windows:Windows 7 或更高版本。

    • macOS:El Capitan (10.11) 或更高版本。

    • Linux:需要 Java 64 位 JDK 或 JRE 8(或更新版本); 推荐使用Ubuntu Trusty Tahr(14.04 或更高版本) 。

  • adb 命令行工具。

下载并安装 AGI

为您的操作系统下载并安装 AGI。

安卓应用要求

本节介绍了正在分析的 Android 应用程序的要求:

  • 您的 Android 应用程序必须是可调试的;应用程序的 Android 清单中的 debuggable 属性 必须设置为true. 此属性启用来自图形驱动程序的正确检测。对于 Vulkan 应用程序,此属性允许 AGI 在应用程序启动时添加自己的 Vulkan 层。

     [...] android:debuggable="true">
    

如果您的应用程序原生使用 Vulkan,AGI 还需要以下内容:

  • 您的应用必须 启用Vulkan 验证层。如果它们未启用,您可以运行以下命令来强制您的应用程序使用 AGI apk ( com.google.android.gapid.) 中包含的验证层运行:

    app_package=
    abi=arm64v8a # Possible values: arm64v8a, armeabi-v7a, x86
    
    adb shell settings put global enable_gpu_debug_layers 1
    adb shell settings put global gpu_debug_app ${app_package}
    adb shell settings put global gpu_debug_layer_app com.google.android.gapid.${abi}
    adb shell settings put global gpu_debug_layers VK_LAYER_KHRONOS_validation
    

    完成分析后,可以使用以下命令禁用这些验证层:

    adb shell settings delete global enable_gpu_debug_layers
    adb shell settings delete global gpu_debug_app
    adb shell settings delete global gpu_debug_layers
    adb shell settings delete global gpu_debug_layer_app
    
  • 您的应用在启用Vulkan 验证层的情况下运行时不得报告任何警告或错误 。在分析之前修复任何 Vulkan 验证错误。

  • 如果您使用的是测试版 GPU 驱动程序,请 在 Android 清单的标记中包含以下元数据:

    
              android:name="com.android.graphics.developerdriver.enable"
              android:value="true" />
    

安卓设备要求

AGI 具有以下 Android 设备要求:

  • 运行 Android 11 或更高版本的受支持的 Android 设备。

  • 一根 USB 电缆。

  • 必须启用 adb 调试,并且必须可以通过 adb 访问设备。如果存在通过 USB 安装选项,请启用它。

设备验证

AGI 需要兼容的 GPU 驱动程序。为确保它提供有效的分析数据,AGI 会在您首次连接新设备时运行验证检查,这大约需要十秒钟。通过检查后,您可以使用该设备对 Android 应用进行分析。

验证过程中请勿打扰设备。这可能会导致设备验证失败。如果设备验证失败但设置正确,您可以通过重新选择设备来重试验证。

验证是设备的一次性步骤,结果被缓存以备将来使用 AGI。但是,如果设备设置发生变化,例如 GPU 驱动程序或 Android 版本更新,AGI 将再次运行验证。

如果设备被列为受支持的设备,您可以期望 AGI 通过验证。如果设备未列出,则其 GPU 驱动程序很可能与 AGI 不兼容。

如果您的设备受支持但验证失败

确保您已满足前面部分中描述的所有Android 要求和 计算机要求,并且设备已使用 USB 电缆正确连接到计算机。

如果满足所有要求,请 在我们的 GitHub 存储库中提交一个问题来描述该行为。

如果您的设备不受支持

我们正在与我们的 OEM 合作伙伴合作,以增加对更多设备的支持。您可以 在我们的 GitHub 存储库中提交问题以请求对设备的支持。

捕获分析数据

以下部分介绍如何捕获分析数据,并打开生成的跟踪文件以便分析结果。

配置安卓设置

在开始分析之前,您必须配置这些 Android 应用程序和设备设置,这些设置指定要分析的应用程序和设备。

  1. 使用 USB 数据线,将您的 Android 设备连接到您的计算机。

  2. 在您的计算机上启动 AGI。

    第一次启动 AGI 时,它会显示欢迎屏幕,提示您输入 adb 可执行文件的路径。AGI 将这些设置保存.agic在您HOME文件夹中的文件中。如果你已经这样做了,你可以跳过这一步。

    Android GPU 检查器 (AGI)_第1张图片

  3. Path to adb字段中输入 adb 可执行文件的路径。此字段后面的复选框是可选的。

  4. 单击开始以显示启动屏幕。

    Android GPU 检查器 (AGI)_第2张图片

  5. 在启动屏幕中,单击Capture a new trace。这将显示Capture A New Trace对话框。或者,您可以单击 捕获系统配置文件跟踪按钮。

    Android GPU 检查器 (AGI)_第3张图片

    图 3:Capture A New Trace对话框。

  6. 在“设备和类型”部分中,选择您要分析的 Android 设备。如果它未显示在设备列表中,请单击重新加载箭头以刷新列表。

  7. 在“应用程序”部分中,选择您要配置的应用程序。如果包中只有一个活动,您可以选择包而不是活动。

    AGI 包括一个示例 Vulkan 应用程序。要使用示例应用程序而不是您自己的应用程序,请执行以下步骤:

    1. 单击应用程序字段旁边的...按钮。

      这将显示“选择要跟踪的应用程序”对话框,其中显示了在所选设备上可跟踪的应用程序列表。

    2. 过滤器文本框中,键入gapid以仅显示包含gapid在其包名称中的应用程序。

    3. 展开包并选择 com.google.android.gapid.VkSampleActivity,然后单击OK

      这会将您返回到Capture A New Trace对话框,其中 Application字段由您选择的应用程序填充。

  8. 在“应用程序”部分,将其他字段留空。

  9. 单击确定

现在您已准备好使用 AGI 执行系统和帧分析。

分析系统

要分析系统,请执行以下步骤:

  1. 在 AGI 启动屏幕中,单击Capture a new trace以显示 Capture System Profile对话框。

  2. 类型列表中,选择系统配置文件

  3. 开始和持续时间部分中,将开始时间设置为手动,将持续时间设置为2

  4. 跟踪选项部分中,单击配置。这将显示分析选项列表。

    Android GPU 检查器 (AGI)_第4张图片

  5. 选择要捕获的分析数据。

  6. GPU部分中,单击选择

    这将显示要选择的计数器列表。

    Android GPU 检查器 (AGI)_第5张图片

  7. 单击默认选择一组默认计数器,然后单击确定 返回分析选项。

  8. 单击确定返回到主捕获系统配置文件对话框。

  9. 在“输出”部分中,选择一个输出目录来存储分析期间生成的跟踪文件。文件名字段应该是自动填充的,但您也可以对其进行编辑。

  10. 单击确定这会在 Android 设备上启动选定的应用程序,并显示一个带有“开始”按钮的弹出窗口。

  11. 单击“开始”按钮开始捕获分析数据,然后等待几秒钟以完成该过程。

  12. 单击打开跟踪。显示的初始视图类似于systrace。

    Android GPU 检查器 (AGI)_第6张图片

    除了 systrace 中可用的数据外,AGI 还显示 GPU 性能信息。有关查看系统配置文件数据的更多信息,请参阅查看 AGI 系统配置文件。

有关其他设置的信息,请参阅 系统分析选项。

配置框架

要从您的应用中分析单个框架,请执行以下步骤:

  1. 在 AGI 启动屏幕中,单击Capture a new trace以显示 Capture A New Trace对话框。或者,您可以单击 捕获帧配置文件跟踪按钮。

  2. 类型列表中,根据您的应用程序使用的图形 API,在 ANGLE上选择Vulkan或OpenGL。确保您选择了正确的,否则 AGI 将无法捕获任何图形命令。

  3. 在“开始和持续时间”部分中,将“开始于”设置为“手动”。如果您单击捕获帧配置文件跟踪按钮,则此步骤已完成。

  4. 输出部分,选择一个输出目录来存储跟踪文件。文件名字段应该是自动填充的,但您也可以对其进行编辑。

  5. 可选:某些应用程序会产生一个不同的进程来执行所有图形处理。要捕获该进程,请指定其名称。

  6. 单击确定这会在 Android 设备上启动您的应用程序,并显示一个带有“开始”按钮的弹出窗口。

  7. 单击“开始”按钮并等待几秒钟以完成分析。

  8. 单击Open Trace查看分析数据。有关 Frame Profiler UI 中每个窗格的信息,请参阅 Frame profiling Overview。

有关其他设置的信息,请参阅 帧分析选项。

/

AGI 支持的设备

此页面包含越来越多受 AGI 支持的 Android 设备。

AGI 需要 Android 操作系统、OEM 驱动程序和用于 GPU 分析的硬件的支持。首次连接新设备时,AGI 会运行验证检查以检查配置文件支持。下面列出的设备和搭载 Android 12 的新设备(部分 Android-Go 设备除外)有望通过此验证检查。

我们建议在 Pixel 4 或 6 上进行分析,因为这些已在 AGI 上的大多数应用程序中进行了测试。将来,这种级别的测试将扩展到更多设备。

不支持 Android 模拟器。AGI 支持以下 Android 设备(运行 Android 11 或更高版本时):

设备名称 GPU 名称
Google Pixel 4(标准和 XL) 高通® Adreno™ 640
谷歌像素 4a 高通® Adreno™ 618
谷歌像素 4a 5G 高通® Adreno™ 620
谷歌像素 5 高通® Adreno™ 620
Google Pixel 6(标准版和专业版) Arm® Mali™ G78
三星 Galaxy S10 系列 Qualcomm® Adreno™ 640 和 Arm® Mali™ G76
三星 Galaxy S20 系列 Qualcomm® Adreno™ 650 和 Arm® Mali™ G77
三星 Galaxy Note 10 系列 Qualcomm® Adreno™ 640 和 Arm® Mali™ G76
三星 Galaxy Note 20 系列 Qualcomm® Adreno™ 650 和 Arm® Mali™ G77
三星 Galaxy S21 系列 Qualcomm® Adreno™ 660 和 Arm® Mali™ G78
OPPO Find X3 Pro 高通® Adreno™ 660
OPPO Find X3 高通® Adreno™ 650
OPPO Reno 6 Pro+ 高通® Adreno™ 650
一加 9R 高通® Adreno™ 650

有关设备验证的信息,请参阅 AGI 快速入门。

系统分析概述

借助 Android GPU Inspector (AGI),您可以执行系统分析,其中包括针对您的 Android 应用的各种跟踪选项和 GPU 性能测量。与 Android Studio 分析工具相比,AGI 将其中许多功能组合到一个工具中,然后提供更深入的 GPU 覆盖和分析。可用的系统分析数据包括以下内容:

  • 应用程序跟踪数据,包括 ATrace标记
  • CPU和进程调度数据
  • GPU 性能信息,例如计数器、活动和生命周期数据
  • Vulkan API 调用的跟踪数据
  • 内存使用统计
  • 电池使用情况统计

System Profiler 是一个 AGI 组件,它管理 UI 和仪器,以便在多个应用程序框架上进行系统分析。它建立在Perfetto追踪系统之上。有关用于分析单个应用程序框架的 AGI 组件的信息,请参阅 框架分析器概述。

开始使用

AGI快速入门介绍了如何设置 AGI、捕获系统配置文件,然后打开生成的跟踪文件。下一节将更详细地描述配置选项。

分析选项

本部分介绍了在分析应用程序时可用的主要选项 。

应用程序设置

应用程序设置标识要在系统分析期间运行和跟踪的 Android 应用程序。在系统分析期间选择要跟踪的 Android 应用程序是可选的,但建议这样做,因为没有它,生成的跟踪文件将不包含应用程序的ATrace 标记和 GPU 活动。

跟踪选项

跟踪选项指定要收集的分析数据。配置按钮显示可用的 数据源。

为了在您分析系统时尽量减少对 Android 设备的性能影响,如果您将跟踪持续时间设置为超过一分钟,我们建议您选择更少的数据源 。但是,对于不到一分钟的跟踪,您可以选择影响最小的所有数据源。

CPU 选项

CPU选项启用通过ftrace收集 CPU 和进程调度数据 。这使您可以查看每个 CPU 内核上正在运行的进程和线程。您还可以启用以下选项:

  • 频率和空闲状态:收集 CPU 核心频率和空闲状态更改事件,这使您可以检查 CPU 如何根据负载向上或向下扩展。
  • 调度链/延迟:收集有关线程调度延迟和抢占的额外线程状态数据。
  • 线程切片:收集进程视图中的 ATrace 标记。

GPU 选项

GPU选项可以分析您的应用程序的 GPU 使用情况,例如收集 GPU 频率和内存使用数据。要收集此数据,您必须在应用程序设置中指定要跟踪的应用程序。选项包括以下内容:

  • Counters:收集 GPU 计数器样本。此数据用于确定 GPU 的繁忙程度并定位瓶颈,因此我们建议您配置这些设置。

    计数器是特定于硬件的。例如,样本收集的最低频率 ( Poll Rate ) 可能因计数器类型而异。有关支持的计数器的信息,请参阅 GPU 性能计数器。

  • 帧生命周期:跟踪 SufaceFlinger 事件,这有助于确定帧缓冲区如何在您的应用程序、合成器和窗口管理器中移动。这些事件允许您定位丢失的应用程序帧并识别渲染管道中的延迟源。

  • Renderstage slices收集有助于确定您的应用程序如何使用 GPU 的数据。

Vulkan 选项

Vulkan选项启用跟踪 Vulkan API 调用,然后可以通过函数类型启用。您可以使用此数据来确定 Vulkan API 调用的 CPU 开销。跟踪记录每个函数调用的持续时间,当您分析 Vulkan 事件跟踪中的数据时,它会显示在应用程序的线程切片中。

其他选项

其他系统分析选项包括:

  • 内存:收集全局和每个进程的基本内存使用统计信息。

  • 电池:收集电池统计信息。这可以让您粗略估计应用程序的功耗。

  • 强制跟踪到设备上的文件:跟踪数据通常在捕获跟踪时通过 USB 流式传输,这具有最少的开销并允许进行长跟踪。但是,如果您遇到问题或由于 USB 延迟而丢失分析数据,您可以选择此选项以将跟踪文件保存在设备上,然后 AGI 在跟踪结束后下载该文件。这需要您设备的内部存储空间有足够的空间来存储跟踪文件。

高级模式

切换到高级模式链接启动高级配置模式,允许您手动编辑存储分析选项的 Pefetto跟踪配置 。

查看和分析结果

当您打开包含系统分析数据的跟踪文件时,AGI 会在 System Profiler UI 中显示数据以进行分析。有关查看数据的信息,请参阅查看系统配置文件。

这些主题描述了如何使用 AGI 分析系统分析数据:

  • 分析帧处理时间
  • 分析内存效率
  • 分析纹理内存带宽使用情况
  • 分析顶点内存带宽使用情况
  • 分析线程调度

查看系统配置文件

在 Android GPU Inspector (AGI) 中,您可以 在 System Profiler UI 中查看和分析系统配置文件。在您分析系统并在 AGI 中打开跟踪文件后,System Profiler 会在时间线中显示 分析数据,其中包含显示其他详细信息的可扩展项目。

注意:有关执行帧分析的信息,请参阅 帧分析概述。

System Profiler UI 的主要元素包括:

  • 工具栏

    • 导航模式按钮

    • 曲目筛选文本框:筛选显示在 曲目窗格中的曲目。

    • 信息按钮 ( i ):显示跟踪和设备元数据。

    • 帮助按钮 ( ? ):显示 键盘和鼠标快捷键。

  • Timeline:表示跟踪事件的时间跨度。

  • 跟踪窗格:显示与时间线相关的分析数据。

  • 详细信息窗格:显示有关选定项目的详细信息的可展开窗格。

分析数据

在跟踪文件中,分析数据存储在称为跟踪事件的时间戳事件中。跟踪事件由各种类型的切片和计数器组成。例如,CPU 跟踪事件包括调度切片,而 GPU 跟踪事件包括 GPU 性能计数器和线程切片。

在 System Profiler UI 中,跟踪窗格包含跟踪事件,这些跟踪事件显示在称为跟踪的行中,这些跟踪事件基于时间线。相同类型的曲目显示在曲目组中。

GPU 轨道

GPU 轨迹显示 GPU 分析信息。这些是主要的 GPU 轨道类型:

  1. GPU Queue Tracks:应用程序的 GPU 活动。

  2. GPU Counter Tracks:GPU 的硬件计数器定期采样。

  3. Vulkan 事件跟踪:与 Vulkan API 相关的事件。

  4. SurfaceFlinger Tracks:SurfaceFlinger 事件,指示图形缓冲区如何在系统中移动。

GPU 队列轨道

根据在跟踪期间运行的硬件队列的数量, GPU 可以具有一个或多个GPU 队列跟踪。GPU 队列跟踪包含活动切片,这些切片代表您的应用程序使用的 GPU 工作的时期和类型。

活动切片包含您可以查看的元数据,例如 Vulkan 命令缓冲区、渲染通道和启动工作的帧缓冲区。这些对象的 Vulkan 句柄显示在详细信息 窗格中,如下所示:

  • VkCommandBuffer
  • VkRenderPass
  • VkFrameBuffer

您可以为这些对象提供用户友好的名称,这样您就可以通过使用 扩展中的 函数或扩展中 的vkSetDebugUtilsObjectNameEXT 函数,在跟踪中与它们的句柄一起轻松识别它们。这两个扩展都由 AGI 实现,并且在跟踪时可供您的应用程序使用。VK_EXT_debug_utilsvkDebugMarkerSetObjectNameEXTVK_EXT_debug_marker

GPU 计数器轨道

GPU 计数器跟踪以图表形式显示以周期性间隔采样的 GPU 性能计数器的值。这些图表显示了样本之间 GPU 底层硬件组件的性能变化。您可以使用此信息来识别 GPU 使用中的瓶颈。

可用的计数器是特定于硬件的。您可以通过将鼠标悬停在曲目名称上来查看每个计数器的简要说明。有关详细信息,请参阅 GPU 性能计数器。

Vulkan 事件轨迹

Vulkan 事件跟踪显示跟踪期间记录的 Vulkan API 事件。跟踪事件类型主要是队列提交事件(vkQueueSubmit调用)。如果单击队列提交事件,AGI 会突出显示与调用关联的 GPU 活动切片。您可以使用这些数据来检查 Vulkan API 调用排队的异步工作以及 CPU 和 GPU 之间的延迟。

SurfaceFlinger 轨道

SurfaceFlinger跟踪显示图形缓冲区(应用程序的交换链渲染目标)的生命周期,因为它们在系统中移动,直到它们被显示。这些事件按缓冲区聚合,以便更轻松地跟踪获取和发布缓冲区所需的开销和延迟。

与分析数据交互

本节介绍如何与System Profiler UI 中的分析数据进行交互。

别针

您可以使用固定按钮固定轨道和轨道组。

折叠和展开

一些轨道和所有轨道组都是可折叠的。某些轨道组在折叠时会显示摘要。例如,当折叠时,CPU 跟踪组在图表中显示总体 CPU 使用率。

飞涨

AGI 根据缩放级别聚合分析数据。首次 打开跟踪文件时,System Profiler UI 会以最大缩小级别显示整个配置文件。您可以通过查找感兴趣的区域然后查看详细信息来检查配置文件。

当您放大和缩小不同的轨道类型时,它们会显示不同类型的分析数据。例如,CPU 轨迹最初显示每个线程的时间片,然后在放大时最终切换到显示 CPU 核心利用率数据。

查看详情

您可以通过选择跟踪窗格中的项目在详细信息窗格中显示详细的元数据。如果一个项目是可选择的,将鼠标悬停在它上面会将光标变为一个指针,然后您可以选择该项目。

选择时间范围

您可以选择一个时间范围,以便比较来自不同轨道的跟踪事件。为此,请启用计时模式,然后拖动以选择范围。范围之外的所有内容都会变暗并显示范围的持续时间。

您也可以通过按 选择所选切片的时间范围M。然后,您可以滚动浏览其他曲目以识别同一时间段的事件。

WASD您可以使用按键或滚动和平移来导航轨道窗格中的项目。System Profiler 使用与Systrace相同的键盘和鼠标快捷键。可用的快捷方式包括:

  • WS, 或Ctrl++Ctrl+-进行缩放。
  • AD、 或leftright箭头左右平移视图。
  • QE、 或updown箭头滚动曲目。
  • 按住shift增加导航的移动速度。
  • Ctrl+滚动放大所选项目。
  • F放大选定的项目。
  • Z+0重置并完全缩小。
  • V如果跟踪中可用,则切换突出显示 VSync。
  • M通过选择时间范围来标记当前选择。
  • H?显示键盘和鼠标快捷键备忘单。

导航模式

工具栏包含在导航模式之间切换的按钮,这些按钮选择当您在跟踪窗格中拖动项目时执行的操作。您还可以通过按1234键选择以下导航模式:

  1. 选择:拖动以框选项目。
  2. 平移:拖动以平移和滚动曲目。这是默认模式。
  3. 缩放:垂直拖动以缩放项目。
  4. 时间:拖动以选择时间范围。

您还可以通过以下修饰键使用导航模式:

  • Shift+拖动以框选项目。
  • Space+拖动以平移和滚动。
  • Ctrl+滚动缩放。
  • Ctrl+拖动以选择时间范围。

/

GPU 性能计数器

Android GPU Inspector (AGI) 可以从 Arm® Mali™、Imagination® PowerVR™ 和 Qualcomm® Adreno™ GPU 中采样 GPU 性能计数器。您可以使用此数据来识别应用程序 GPU 使用中的瓶颈。

您可以 在 AGI 中配置系统分析时启用每个支持的计数器,然后 在 System Profiler UI的GPU 计数器部分查看结果。

您的 Android 设备支持的计数器的名称和描述在Capture System Profiler对话框的GPU > Counters > Select选项中列出。有关配置计数器选项的信息,请参阅配置系统。

有关任何 GPU 性能计数器的更多详细信息,请查看您的 GPU 制造商提供的开发人员指南。以下指南包括 GPU 计数器信息;但是,详细程度可能会根据制造商选择发布的程度而有所不同:

  • 对于 Arm Mali,请参阅 Arm 开发人员指南中的Mali GPU 性能计数器 。

  • 对于 Imagination PowerVR,请参阅 PVRTune 计数器列表和说明 指南。

  • 对于 Qualcomm Adreno,请参阅 Adreno GPU 指南。

///

估计 CPU 和 GPU 帧处理时间

估计 CPU 和 GPU 帧处理时间(帧时间)对于了解应用程序的性能和定位瓶颈至关重要。当您使用 AGI 分析应用程序时,System Profiler 会提供可用于估计帧时间的跟踪数据。

CPU 时间

在 AGI 中,您可以在系统配置文件的 CPU 跟踪中查看总的和活动的 CPU 帧时间 。

总 CPU 时间

要测量所花费的总 CPU 时间, 请选择 包含连续帧提交事件之间的时间的时间范围。帧提交事件是eglSwapBuffers(对于 OpenGL)和vkQueuePresentKHR (对于 Vulkan)。

Android GPU 检查器 (AGI)_第7张图片

 Android GPU 检查器 (AGI)_第8张图片 此测量是对总 CPU 时间的估计,但不一定代表活动 CPU 时间。例如,在 GPU 绑定的应用程序中,CPU 可能会在提交新帧之前等待 GPU 完成其工作。这通常发生在dequeueBuffereglSwapBuffer对于 OpenGL)或 vkQueuePresent(对于 Vulkan)事件占用大部分 CPU 时间时。等待时间包含在总 CPU 时间中,但不包含在活动 CPU 时间中。

Android GPU 检查器 (AGI)_第9张图片

活动 CPU 时间

活动 CPU 时间确定 CPU 何时运行应用程序代码而不处于空闲状态。

要测量活动 CPU 时间,请查看CPU 事件上方的Running切片。计算处于运行状态的两个帧提交事件之间的所有跟踪部分。确保包括工作线程。

Android GPU 检查器 (AGI)_第10张图片

 Android GPU 检查器 (AGI)_第11张图片

测量活动 CPU 时间的另一种方法是查看 CPU 轨道中的应用程序片。这些切片指示 CPU 何时运行,它们与运行切片相对应。

Android GPU 检查器 (AGI)_第12张图片

为了帮助识别应用切片,您可以将 ATrace标记添加到您的应用。这将在 System Profiler 的 CPU 跟踪中显示标记。

Android GPU 检查器 (AGI)_第13张图片

估计 GPU 帧时间

要估计 GPU 帧时间,您可以在 System Profiler 中使用 GPU 切片或 GPU 计数器。使用 GPU 切片时,估计值更准确。

GPU 切片

如果 System Profiler 有可用的 GPU 切片信息,您可以通过测量您的应用程序花费在与单个帧关联的任务上的总时间来获得非常准确的 GPU 帧时间信息。

马里设备

在 Mali 设备上,GPU 切片具有片段非片段和偶尔补充的​​非片段轨道。对于不太复杂的帧,片段和非片段的工作是连续的,因此可以通过寻找活动 GPU 工作之间的间隙来区分一帧的工作与另一帧的工作。

作为替代方案,如果您熟悉提交给 GPU 的工作,识别提交的渲染通道的模式可以提供有关帧开始和结束时间的信息。

Android GPU 检查器 (AGI)_第14张图片

Android GPU 检查器 (AGI)_第15张图片

对于具有高度并行化 GPU 工作流的应用程序,您可以通过在每个切片的选择窗格中查找具有相同提交 ID的所有帧来获取 GPU 帧时间。

对于基于 Vulkan 的应用程序,可以使用多个提交来组成一个框架。使用Vulkan 事件跟踪跟踪提交 ID ,其中包含每个提交的切片。选择提交切片将突出显示与提交对应的所有 GPU 活动切片。

Android GPU 检查器 (AGI)_第16张图片

Android GPU 检查器 (AGI)_第17张图片

肾上腺素装置

在 Adreno 设备上,GPU 切片出现在GPU Queue 0轨道中,并且始终按顺序表示,因此您可以查看代表一帧渲染通道的所有切片并使用它们来测量 GPU 帧时间。

Android GPU 检查器 (AGI)_第18张图片

Android GPU 检查器 (AGI)_第19张图片

与前面描述的 Mali 场景类似:如果应用程序使用 Vulkan,Vulkan 事件跟踪会提供有关为执行框架而提交的工作的信息。要突出显示渲染通道,请单击 与帧关联的Vulkan 事件切片。

Android GPU 检查器 (AGI)_第20张图片

在某些情况下,由于应用程序受大量 GPU 限制,GPU 帧边界更难以区分。在这些场景中,如果您熟悉提交给 GPU 的工作,您可以识别正在执行渲染通道的模式并根据该信息确定帧边界。

Android GPU 检查器 (AGI)_第21张图片

GPU 计数器

如果跟踪中没有 GPU 切片信息,您可以使用GPU 计数器跟踪估计 GPU 帧时间。

马里设备

在 Mali 设备上,您可以使用 GPU 利用率跟踪来估计非 GPU 密集型应用的 GPU 帧时间。当应用程序的 GPU 密集度较低时,它们会定期出现高和低 GPU 活动,而不是始终如一的高活动。要使用GPU 利用率跟踪估计 GPU 帧时间,请测量跟踪中高活动期的持续时间。

少一个图 

图 17. Mali 设备上的 GPU 利用率和 GPU 队列跟踪。

如果应用程序的 GPU 密集度更高,您可以使用片段非片段轨道来估计 GPU 帧时间。通过在片段非片段轨道的活动级别中寻找模式,您可以粗略估计帧边界的位置,并使用它来测量 GPU 帧时间。

Android GPU 检查器 (AGI)_第22张图片

肾上腺素装置

在 Adreno 设备上,如果应用程序不是 GPU 密集型应用程序,您可以使用与上一节中的Mali 设备相同的方式估计 GPU 帧时间。

Android GPU 检查器 (AGI)_第23张图片

如果应用程序的 GPU 密集度更高,您可以使用Vertex Instructions / SecondFragment Instructions / Second轨道来估计 GPU 帧时间。通过在这些轨道的活动级别中寻找模式,您可以粗略估计帧边界的位置,并使用它来测量 GPU 帧时间。

Android GPU 检查器 (AGI)_第24张图片

 这些其他轨道可能会提供类似的信息:

  • 顶点着色/秒
  • 阴影片段/秒
  • % 时间着色顶点
  • % 时间片段

///

分析内存效率

应用程序的内存使用特征是其性能的一个基本方面。您可以使用System Profiler通过查看可用的 GPU 计数器信息来分析这些特征。

肾上腺素装置

在 Adreno 设备上,首先突出显示与单个 GPU 帧一致的时间段,如估计 CPU 和 GPU 帧处理时间中所述。使用该页面上描述的技术,涉及使用GPU % Utilization 或类似的计数器轨道作为帧时间边界,因为计数器轨道都使用相同的计时技术,并且可以更准确地估计内存利用率(与使用帧相比时间边界源自 GPU 切片,其数据独立于计数器跟踪数据收集)。

Android GPU 检查器 (AGI)_第25张图片

读/写总计

在分析器中突出显示单个帧后,首先 查看 Read Total (Bytes/sec)Write Total (Bytes/sec)计数器。这些计数器可以很好地全面了解在单个帧的过程中有多少数据通过内存总线。尽量减少通过总线发送的数据量,因为内存带宽是移动设备电池消耗的主要来源。

Android GPU 检查器 (AGI)_第26张图片

您还可以检查Vertex Memory Read (Bytes/Second)Texture Memory Read (Bytes/Second) 计数器,以确定用于顶点和纹理数据的带宽部分。

Android GPU 检查器 (AGI)_第27张图片

您认为这些值的“好”值取决于您的应用程序中看到的工作负载类型。例如,2D 应用程序可能会看到使用的纹理内存读取带宽量相对较大(~2+GB/s),但顶点内存带宽可能非常小(~50MB/s)。有关更多详细信息,请查看分析顶点内存带宽和 分析纹理内存带宽使用情况的文档。

取摊位

查看% Vertex Fetch Stall% Texture Fetch Stall% Stall on System Memory计数器,因为这些将为您提供一些关于我们应用程序的整体内存性能的提示。如果值高于大约 5%,这表明您的应用程序要么没有以有效的方式在内存中布局数据,要么正在以有效的方式访问其数据以利用缓存。查看分析顶点内存带宽和 分析纹理内存带宽使用情况,了解有关改善这些类型资产的内存使用情况的详细信息。

Android GPU 检查器 (AGI)_第28张图片

马里设备

在 Mali 设备上,首先突出显示与单个 GPU 帧一致的时间段,如估计 CPU 和 GPU 帧处理时间中所述。使用该页面上描述的技术,涉及使用GPU % Utilization 或类似的计数器轨道作为帧时间边界,因为计数器轨道都使用相同的计时技术,并且可以更准确地估计内存利用率(与使用帧相比时间边界源自 GPU 切片,其数据独立于计数器跟踪数据收集)。

Android GPU 检查器 (AGI)_第29张图片

输出外部总计

在System Profiler中突出显示单个帧后,首先查看输出外部读取字节 输出外部写入字节 计数器。这些计数器可以很好地全面了解在单个帧的过程中有多少数据通过内存总线。尽量减少通过总线发送的数据量,因为内存带宽是移动设备电池消耗的主要来源。

Android GPU 检查器 (AGI)_第30张图片

输入内部总计

还有一些计数器可以为您提供有关缓存本身的信息。您感兴趣的计数器是“输入内部 [读|写] 停顿周期”。这些值较高意味着您成功地访问了缓存,但是发出了太多的读取请求,因此着色器代码正在等待访问内存。

Android GPU 检查器 (AGI)_第31张图片

取摊位

您可以查看的下一组计数器是Vertex Prefetcher Stall CyclesTexture Fetch Stall计数器,因为它们将为您提供一些关于我们应用程序的整体内存性能的提示。如果您看到高于 ~5% 的值,这意味着您要么没有以有效的方式在内存中布置我们的数据,要么没有以有效的方式访问我们的数据以利用缓存。查看 Analyzing [Vertex|Texture] Memory Bandwidth 文章,详细了解如何提高这些类型资产的内存使用率

Android GPU 检查器 (AGI)_第32张图片

//

分析纹理内存带宽使用情况

 

纹理数据的内存带宽可能是应用程序 GPU 性能的潜在瓶颈。AGI 系统配置文件中有一些计数器可以帮助诊断纹理内存带宽问题。

高通 Adreno 计数器

在配备 Qualcomm Adreno GPU 的设备上,一些值得注意的计数器包括:

柜台 描述
纹理内存读取带宽(字节/秒) 从外部存储器读取的纹理数据的带宽。
% 纹理 L1 未命中 获取纹理导致的 L1 缓存未命中。
% 非基础级别纹理 作为 mipmap 的纹理提取的百分比。
% 各向异性过滤 经各向异性过滤的纹素百分比。

ARM Mali 计数器

在配备 ARM Mali GPU 的设备上,一些值得注意的计数器包括:

柜台 描述
从外部存储器读取纹理的节拍 纹理单元从外部存储器读取的数据节拍,在着色器核心上平均。
L2 缓存中的纹理读取节拍 纹理单元从 L2 缓存读取的数据节拍,在着色器核心上平均。
[更多的]

为了从平均读取节拍计算总带宽,计数器值乘以总线宽度(通常为 16 字节)和着色器内核的总数。

反分析

要测量这些计数器的行为,请测量单个 GPU 帧过程中的平均带宽和峰值带宽,然后用 GPU 利用率的连续块进行描述。

Android GPU 检查器 (AGI)_第33张图片

我们建议平均纹理内存读取带宽不高于 1 GBps,峰值带宽不高于 3 MBps。纹理 L1 缓存未命中率也应不高于 10%。更高的带宽或 L1 缓存值可能表明更深层次的纹理问题,包括:

  • 纹理太大:大纹理会使你的包体积膨胀,而且更昂贵,并且可能会降低缓存效率。
  • 纹理未压缩:所有 Android 手机都支持某些类型的纹理压缩,无论是 ETC1 还是 ASTC。应该压缩纹理以减小包大小并减少纹理带宽。
  • 其他:应考虑各种其他纹理问题,包括 2 次幂纹理、mipmapping、各向异性过滤等。其中一些可以从下面讨论的系统配置文件中观察到,而其他可能需要更深入的调查。

对于有免费摄像头的三维游戏,纹理资源应该使用mipmapping,这样远离摄像头的物体会减少内存带宽,提高纹理缓存效率和更好的图像质量。对于使用 Qualcomm Adreno GPU 的设备,% Non-Base Level Textures计数器平均低于 10% 可能表明 mipmap 不足。

Android GPU 检查器 (AGI)_第34张图片

另一个考虑因素是各向异性过滤的使用,它由 Qualcomm Adreno GPU 的% Anisotropic Filtered计数器描述,用于各向异性过滤的纹素比例。虽然这可能会提高某些游戏的视觉质量,但它也可能非常昂贵,并且它的使用应该与 GPU 性能成本进行权衡。

Android GPU 检查器 (AGI)_第35张图片

 诊断更具体问题的最佳方法是通过帧轮廓跟踪来分析纹理资产。

//

分析顶点内存带宽使用情况

 

顶点数据的内存带宽可能是游戏 GPU 性能的潜在瓶颈。AGI 系统配置文件中有一些计数器可以帮助诊断顶点内存带宽问题。

高通 Adreno 计数器

在配备 Qualcomm Adreno GPU 的设备上,一些值得注意的计数器包括:

柜台 描述
顶点内存读取 从外部存储器读取的顶点数据的带宽。
平均字节/顶点 顶点数据的平均大小,以字节为单位。
% 顶点获取停顿 GPU 在顶点数据上被阻塞的时钟周期百分比。

ARM Mali 计数器 (WIP)

在配备 ARM Mali GPU 的设备上,一些值得注意的计数器包括:

柜台 描述
从外部存储器加载/存储读取节拍 加载/存储单元从外部存储器读取的数据节拍,在着色器内核上平均。
从 L2 缓存加载/存储读取节拍 加载/存储单元从 L2 缓存读取的数据节拍,在着色器核心上平均。
[更多的]

为了从平均读取节拍计算总带宽,计数器值乘以总线宽度(通常为 16 字节)和着色器内核的总数。[更多的]

反分析

要测量这些计数器的行为,您可以测量单个 GPU 帧过程中的平均带宽和峰值带宽,这可以用GPU Utilization的连续块来描述。

Android GPU 检查器 (AGI)_第36张图片

 我们建议峰值顶点内存读取带宽不高于 1.5 GBps,平均带宽不高于 500 MBps。较高的值是几个常见问题之一的指标:

  • Vertex size is too big : 顶点可能有较大的顶点属性或大量的顶点属性,影响顶点着色时间。
  • 顶点属性流不拆分:顶点属性交错到单个缓冲区中,降低了缓存效率。
  • 每帧提交的顶点过多:复杂模型和/或大量模型可能会占用更大的带宽并需要更长的时间进行着色。

顶点大小问题也可以通过平均字节/顶点 跟踪来诊断,我们建议不高于 32 字节或顶点。

Android GPU 检查器 (AGI)_第37张图片

 诊断您可能面临的这些问题的最佳方法是采用框架轮廓跟踪来分析顶点格式。

分析线程调度

 

为了确定您的游戏进程线程是否得到适当利用和安排以获得最佳性能,需要考虑一些事项。

  • 帧步调
  • 多线程和线程并行化
  • CPU核心亲和性

多线程

许多游戏和游戏引擎使用多线程将 CPU 工作划分为逻辑任务,这些任务可能在某种程度上独立运行。一种典型的配置是用于输入和游戏逻辑的游戏线程,用于准备和提交要绘制的对象的渲染线程,以及用于其他子任务(例如动画或音频)的工作线程。

我们建议并行化线程以利用多线程的性能增益。这方面的一个例子是游戏和渲染线程在不同的内核上部分或完全同时运行的场景。这并不总是可能的,例如在共享数据依赖项的情况下;但是,在可能的情况下,这可能会导致 CPU 时间更短,从而可能导致更高的帧速率。

Android GPU 检查器 (AGI)_第38张图片

CPU核心亲和性

显着影响 CPU 工作负载性能的一个因素是它们在内核上的调度方式。这可以分为两个部分:

  • 您的游戏线程是否在性能最佳的内核上运行
  • 您的游戏线程是否经常在内核之间切换

您可以通过在进行跟踪时在配置文件配置中启用 CPU来调查 CPU使用情况下的 CPU 线程行为。通过放大小于 200 毫秒的跟踪部分,您可以查看在设备 CPU 内核上运行的各个进程。通常,小核心对应于较小的索引(例如,CPU - ),而大核心对应于更高的索引(例如,CPU - )。0367

一般来说,当游戏在前台时,游戏线程和渲染线程等持久线程应该运行在高性能的大核上,而其他进程和工作线程可能会调度在较小的核上。

Android GPU 检查器 (AGI)_第39张图片

您还可以观察您的游戏线程是否经常在内核之间切换,您的主线程和渲染线程是否在单个 CPU 帧内或两个连续的 CPU 帧之间更换内核。这种 CPU 行为可能表明您的游戏线程未正确关联。这样的核心切换会从上下文切换和核心缓存/寄存器的状态丢失中产生一些开销,从而导致 CPU 帧的长度增加。

Android GPU 检查器 (AGI)_第40张图片

///

你可能感兴趣的:(Unity,&,Android,游戏引擎,android,性能优化)