# 调试

Source: [https://docs.qualcomm.com/doc/80-70015-19SC/topic/debug.html](https://docs.qualcomm.com/doc/80-70015-19SC/topic/debug.html)

要对应用程序进行性能分析，可使用 Snapdragon Profiler 和内核命令。这里介绍了使用内核命令进行分析和调试所需信息的收集步骤，以及如何收集日志。

Attention: 应谨慎使用本指南介绍的命令，因为这些命令可能会影响设备的功耗。

## Weston/Wayland 日志

Source: [https://docs.qualcomm.com/doc/80-70015-19SC/topic/debug.html](https://docs.qualcomm.com/doc/80-70015-19SC/topic/debug.html)

要捕获 Weston/Wayland 调试日志，可在启动 Weston 或任何其他应用程序前运行以下命令：

    export WAYLAND_DEBUG=server/clientCopy to clipboard

## 内核/KGSL

Source: [https://docs.qualcomm.com/doc/80-70015-19SC/topic/debug.html](https://docs.qualcomm.com/doc/80-70015-19SC/topic/debug.html)

在调试内核或 KGSL 之前，使用以下命令重新挂载文件系统：

    mount -o remount,rw /Copy to clipboard

### 将 CPU 设置为性能模式

1. 通过将 `cpux` 替换为 `cpu0`、`cpu1` 和 `cpun` 等来设置所有 CPU 核心。

        echo 1 > /sys/devices/system/cpu/[cpux]/onlineCopy to clipboard

        cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governorsCopy to clipboard

示例输出：

        ondemand userspace performance schedutilCopy to clipboard
2. 如果任何 CPU 时钟以低频率运行，则将 CPU 设置为性能模式，并通过运行以下命令来验证问题：

        echo performance > /sys/devices/system/cpu/[cpux]/cpufreq/scaling_governorCopy to clipboard
3. 要验证试验设置

        cat /sys/devices/system/cpu/[cpux]/online (cpux : cpu0,cpu1 …)Copy to clipboard

        cat /sys/devices/system/cpu/[cpux]/cpufreq/scaling_governor(cpux : cpu0, cpu1 …)Copy to clipboard

### 设置 GPU 频率

1. 对于 power level，检查 `available_frquencys` 系统节点。

        cat /sys/class/kgsl/kgsl-3d0/devfreq/available_frequenciesCopy to clipboard

示例输出：

        812000000 700000000 608000000 550000000 450000000 315000000Copy to clipboard

通过示例输出，GPU power level 解析如下：

| **频率** | 812000000 | 700000000 | 608000000 | 550000000 | 450000000 | 315000000 |
    | --- | --- | --- | --- | --- | --- | --- |
    | **Power level** | 0 | 1 | 2 | 3 | 4 | 5 |
2. 将以下命令中的 `<level>` 依次替换为 0、1、2、3、4 等值，逐级增加 GPU power level 并执行 GPU power level 测试：

        echo <level> > /sys/class/kgsl/kgsl-3d0/min_pwrlevelCopy to clipboard

        echo <level> > /sys/class/kgsl/kgsl-3d0/max_pwrlevelCopy to clipboard

Note: QCS5430 的 Adreno GPU 频率固定为 315 MHz。QCS5430 不支持此处提及的 power level，
`available_freqencies` 命令的输出为
 315000000。

### 将 GPU 设置为性能模式

- 要将 GPU 设置为性能模式，可运行以下命令：

        echo 0 > /sys/class/kgsl/kgsl-3d0/min_pwrlevelCopy to clipboard

        echo 0 > /sys/class/kgsl/kgsl-3d0/max_pwrlevelCopy to clipboard

Note: 这些命令将强制 GPU 始终以最大频率运行。
- 要确保即使设备空闲时间达到 10000000 ms，GPU 也不会进入低功耗状态，可运行以下命令：

        echo 10000000 > /sys/class/kgsl/kgsl-3d0/idle_timerCopy to clipboard
- 要将 GPU 设置为性能模式，同时确保 GPU 不会进入低功耗状态，可运行以下命令：

        echo 0 > /sys/class/kgsl/kgsl-3d0/min_pwrlevelCopy to clipboard

        echo 0 > /sys/class/kgsl/kgsl-3d0/max_pwrlevelCopy to clipboard

        echo 10000000 > /sys/class/kgsl/kgsl-3d0/idle_timerCopy to clipboard

Note: QCS5430 不支持性能模式，因为 Adreno GPU 的频率固定为 315 MHz。

### 检查其他 KGSL 设置

- 要启用 KGSL 时钟，可运行以下命令：

        echo 1 > /sys/class/kgsl/kgsl-3d0/force_clk_onCopy to clipboard
- 要启用 KGSL rail，可运行以下命令：

        echo 1 > /sys/class/kgsl/kgsl-3d0/force_rail_onCopy to clipboard
- 要启用 KGSL 总线，可运行以下命令：

        echo 1 > /sys/class/kgsl/kgsl-3d0/force_bus_onCopy to clipboard

## OpenGL ES 应用程序

Source: [https://docs.qualcomm.com/doc/80-70015-19SC/topic/debug.html](https://docs.qualcomm.com/doc/80-70015-19SC/topic/debug.html)

可以使用 Snapdragon Profiler 工具捕获 OpenGL ES 应用程序的 snapshot 和 real-time trace。有关详细信息，参见[Snapdragon Profiler](https://docs.qualcomm.com/doc/80-70015-19SC/topic/graphics_developer_tools.html#graphics_developer_tools__section_mwq_r4x_31c)。

## OpenCL 应用程序

Source: [https://docs.qualcomm.com/doc/80-70015-19SC/topic/debug.html](https://docs.qualcomm.com/doc/80-70015-19SC/topic/debug.html)

可以使用 Snapdragon Profiler 工具捕获 OpenCL 应用程序的 snapshot 和 real-time trace。有关详细信息，参见[Snapdragon Profiler](https://docs.qualcomm.com/doc/80-70015-19SC/topic/graphics_developer_tools.html#graphics_developer_tools__section_mwq_r4x_31c)。

关于基于事件的 OpenCL 应用程序性能分析，以及 Snapdragon Profiler，参见 [Qualcomm® Snapdragon™ Mobile Platform OpenCL General Programming and Optimization Guide](https://docs.qualcomm.com/bundle/publicresource/80-NB295-11_REV_C_Qualcomm_Snapdragon_Mobile_Platform_Opencl_General_Programming_and_Optimization.pdf) 中的 Performance profiling 章节。

Note: [Qualcomm® Snapdragon™ Mobile Platform OpenCL General Programming and Optimization Guide](https://docs.qualcomm.com/bundle/publicresource/80-NB295-11_REV_C_Qualcomm_Snapdragon_Mobile_Platform_Opencl_General_Programming_and_Optimization.pdf) 中某些章节的内容仅适用于 Android 平台，不适用于 Qualcomm Linux 设备。但有些分析选项完全基于 OpenCL API，因此在 Qualcomm Linux 设备上也受支持。例如 `clGetEventProfilingInfo` API。

## Vulkan 应用程序

Source: [https://docs.qualcomm.com/doc/80-70015-19SC/topic/debug.html](https://docs.qualcomm.com/doc/80-70015-19SC/topic/debug.html)

### About this task

可以使用 Snapdragon Profiler 工具捕获 Vulkan 应用程序的 snapshot 和 real-time trace。有关详细信息，参见[Snapdragon Profiler](https://docs.qualcomm.com/doc/80-70015-19SC/topic/graphics_developer_tools.html#graphics_developer_tools__section_mwq_r4x_31c)。除了 Snapdragon Profiler 外，还可以使用使用 validation layer 来调试 Vulkan 应用程序。

要使用 validation layer 调试 Vulkan 应用程序，可在主机上执行以下操作：

### Procedure

1. 要设置源环境，可运行以下命令：
                
source <path-to-installed-platform-eSDK>/environment-setup-armv8-2a-qcom-linuxCopy to clipboard
2. 要下载 validation layer，可运行以下命令：
                
git clone https://github.com/KhronosGroup/Vulkan-ValidationLayersCopy to clipboard
3. 运行以下命令：
                
cmake -S . -B build -D UPDATE_DEPS=ON -D BUILD_WSI_XLIB_SUPPORT=OFF -D BUILD_TESTS=OFF -D CMAKE_BUILD_TYPE=Release -D BUILD_WSI_XCB_SUPPORT=OFF -D BUILD_WSI_WAYLAND_SUPPORT=ONCopy to clipboard

        cmake --build build --config DebugCopy to clipboard

        scp -r build/layers/libVkLayer_khronos_validation.so root@[IP-address-of-device]:/tmp/local/debug/vulkan/Copy to clipboard

        scp -r build/layers/VkLayer_khronos_validation.json root@[IP-address-of-device]:/tmp/local/debug/vulkan/Copy to clipboard

        export VK_LAYER_PATH=/tmp/local/debug/vulkan:$VK_LAYER_PATHCopy to clipboard

Note: 如果 /tmp/local/debug/vulkan 路径不可用，则创建类似路径。
4. 要在 Vulkan 应用程序上启用 validation layer，设置 `VK_INSTANCE_LAYERS` 环境变量，如下所示：
                
export VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validationCopy to clipboard
5. 要编辑或附加 layers/vk\_layer\_settings.txt 文件中的设置，可运行以下命令：
                
khronos_validation.debug_action = VK_DBG_LAYER_ACTION_LOG_MSGCopy to clipboard

        khronos_validation.report_flags = error,warn,perfCopy to clipboard

        khronos_validation.file = trueCopy to clipboard

        khronos_validation.log_filename = vk_validatedump.txtCopy to clipboard
6. 要将 layers/vk\_layer\_settings.txt 文件推送到设备，可运行以下命令：
                
scp -r vk_layer_settings.txt root@[IP-address-of-device]:/tmp/local/debug/vulkan/Copy to clipboard
7. 要转储日志，通过运行以下命令添加 validation layer 的路径：
                
export VK_LAYER_SETTINGS_PATH=/tmp/local/debug/vulkan/vk_layer_settings.txtCopy to clipboard

Dump 将在 Vulkan 应用程序二进制文件的推送目录中生成。 
Note: 为避免 tmp 路径中数据刷新，可以将 Vulkan 应用程序二进制文件保存到其他合适的位置中。如果更改二进制文件的位置，则在重启后，确保在环境变量中正确设置路径。

Last Published: Dec 02, 2024

[Previous Topic
工具](https://docs.qualcomm.com/bundle/publicresource/80-70015-19SC/topics/graphics_developer_tools.md) [Next Topic
支持的扩展](https://docs.qualcomm.com/bundle/publicresource/80-70015-19SC/topics/supported_extensions.md)