# 调试

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

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

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

## Weston/Wayland 日志

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

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

    export WAYLAND_DEBUG=server/clientCopy to clipboard

## 内核/KGSL

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

调试内核或者 KGSL 之前，先使用设备 IP 地址打开 SSH 终端，然后运行以下命令：

    setenforce 0Copy to clipboard

    mount -o remount rw /Copy to clipboard

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

要将 CPU 设置为性能模式，可执行以下操作：

1. 通过将 `cpux` 替换为 `cpu0`、`cpu1` 等，来设置所有 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. 运行以下命令：

        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 设置为性能模式

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

- 要将 GPU 设置为性能模式，可运行以下命令：这些命令将强制 GPU 始终以最大频率运行。

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

        echo 0 > /sys/class/kgsl/kgsl-3d0/max_pwrlevelCopy to clipboard
- 运行以下命令，确保即使设备空闲时间达到 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

### 检查其他 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-70014-19Y/topic/debug.html](https://docs.qualcomm.com/doc/80-70014-19Y/topic/debug.html)

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

## OpenCL 应用程序

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

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

关于基于事件的 OpenCL 应用程序性能分析，以及 Snapdragon Profiler，另请参见 [Qualcomm® Snapdragon™ 移动平台 OpenCL 常规编程和优化指南](https://developer.qualcomm.com/qfile/33472/80-nb295-11_a.pdf%29)中的性能分析部分。

Note: [Qualcomm® Snapdragon™ 移动平台 OpenCL 常规编程和优化指南](https://developer.qualcomm.com/qfile/33472/80-nb295-11_a.pdf%29)中某些章节的内容仅适用于 Android 平台，不适用于 Qualcomm Linux 平台。但有些分析选项完全基于 OpenCL API，因此在 Qualcomm Linux 设备上也受支持。例如 `clGetEventProfilingInfo` API。

## Vulkan 应用程序

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

### Before you begin

### About this task

可以使用 Snapdragon Profiler 捕获 Vulkan 应用程序的 snapshot 和 real-time trace。有关 Snapdragon Profiler 的更多信息，参见[Snapdragon Profiler](https://docs.qualcomm.com/doc/80-70014-19Y/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

        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 路径不可用，则创建类似路径。
3. 要为 Vulkan 应用程序强制启用验证层，可设置 `VK_INSTANCE_LAYERS` 环境变量。
                
export VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validationCopy to clipboard
4. 在 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

        scp -r vk_layer_settings.txt root@[IP-address-of-device]:/tmp/local/debug/vulkan/Copy to clipboard
5. 为了获取日志，添加 validation layer 的路径。
                
export VK_LAYER_SETTINGS_PATH=/tmp/local/debug/vulkan/vk_layer_settings.txtCopy to clipboard

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

Last Published: Aug 09, 2024

[Previous Topic
工具](https://docs.qualcomm.com/bundle/publicresource/80-70014-19Y/topics/graphics_developer_tools.md) [Next Topic
参考资料](https://docs.qualcomm.com/bundle/publicresource/80-70014-19Y/topics/references.md)