# Debug

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

For performance profiling of the applications, you can use the Snapdragon Profiler and
            kernel commands. The procedures to collect information for profiling and debugging using
            the kernel commands, and to collect logs, are described here.

Attention: Use the commands described here with
                caution because these commands may impact the power consumption of the
                device.

## Weston/Wayland logs

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

To capture the Weston/Wayland debug logs, run the following command before launching the
            Weston or any other
            application:

    export WAYLAND_DEBUG=server/clientCopy to clipboard

## Kernel/KGSL

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

Before debugging the kernel or KGSL, remount the file system using the following
            command:

    mount -o remount,rw /Copy to clipboard

### Set CPU to Performance mode

1. To set all CPU cores, replace `cpux` with
                            `cpu0`, `cpu1`, and
                        `cpun`.

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

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

Sample
                        output:

        ondemand userspace performance schedutilCopy to clipboard
2. If any CPU clock is running at a low frequency, set the CPU to Performance
                        mode and verify the issue by running the following
                        command:

        echo performance > /sys/devices/system/cpu/[cpux]/cpufreq/scaling_governorCopy to clipboard
3. To validate the trial
                        settings

        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

### Set GPU frequency

1. For the power level, check the `available_frequencies` sys
                            node.

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

Sample
                            output:

        812000000 700000000 608000000 550000000 450000000 315000000Copy to clipboard

From
                            the sample output, GPU power levels are interpreted as:

| **Frequency** | 812000000 | 700000000 | 608000000 | 550000000 | 450000000 | 315000000 |
    | --- | --- | --- | --- | --- | --- | --- |
    | **Power level** | 0 | 1 | 2 | 3 | 4 | 5 |
2. Increment the GPU power level by one and perform the GPU power-level test by
                        substituting `<level>` with 0, 1, 2, 3, 4, and so on, in
                        the following
                        commands:

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

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

Note: The Adreno GPU frequency for QCS5430 is fixed at
                    315 MHz. For QCS5430, the power levels mentioned here are not supported and the
                    output of the `available_frequencies` command will be
                    315000000.

### Set GPU to Performance mode

- To set the GPU to Performance mode, run the following
                            commands:

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

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

Note:  These commands force the GPU to always run at the
                            maximum frequency.
- To ensure that the GPU does not enter the Low-Power state even if the device
                        is idle for 10000000 ms, run the following
                        command:

        echo 10000000 > /sys/class/kgsl/kgsl-3d0/idle_timerCopy to clipboard
- To set the GPU to Performance mode while ensuring that the GPU does not
                        enter the Low-Power state, run the following
                        commands:

        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: The Performance mode is not supported on QCS5430 because
                    the frequency of the Adreno GPU is fixed at 315 MHz.

### Check other KGSL settings

- To enable the KGSL clock, run the following
                        command:

        echo 1 > /sys/class/kgsl/kgsl-3d0/force_clk_onCopy to clipboard
- To enable the KGSL rail, run the following
                        command:

        echo 1 > /sys/class/kgsl/kgsl-3d0/force_rail_onCopy to clipboard
- To enable the KGSL bus, run the following
                        command:

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

## OpenGL ES applications

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

The Snapdragon Profiler tool is used to capture snapshots and real-time traces of OpenGL
            ES applications. For more information, see [Snapdragon Profiler](https://docs.qualcomm.com/doc/80-70015-19/topic/graphics_developer_tools.html#graphics_developer_tools__section_mwq_r4x_31c).

## OpenCL applications

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

The Snapdragon Profiler tool is used to capture snapshots and real-time traces of OpenCL
            applications. For more information, see [Snapdragon Profiler](https://docs.qualcomm.com/doc/80-70015-19/topic/graphics_developer_tools.html#graphics_developer_tools__section_mwq_r4x_31c).

For performance profiling of OpenCL applications based on events, along with the
            Snapdragon Profiler, see the Performance profiling section in the [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).

Note: Some sections in the [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) are applicable only for
                Android platforms and are not applicable to the Qualcomm Linux devices. However,
                some of the profiling options are purely based on the OpenCL API and are therefore
                supported on the Qualcomm Linux devices. For example, the
                    `clGetEventProfilingInfo` API.

## Vulkan applications

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

### About this task

The Snapdragon Profiler tool is used to capture snapshots and real-time traces of
                Vulkan applications. For more information, see [Snapdragon Profiler](https://docs.qualcomm.com/doc/80-70015-19/topic/graphics_developer_tools.html#graphics_developer_tools__section_mwq_r4x_31c). Along with the Snapdragon Profiler, you can also use validation layers to debug
                Vulkan applications.

To debug a Vulkan application using the validation layers, do the following on the
                host machine:

### Procedure

1. To set the source environment, run the following command:
                
source <path-to-installed-platform-eSDK>/environment-setup-armv8-2a-qcom-linuxCopy to clipboard
2. To download the validation layers, run the following command:
                
git clone https://github.com/KhronosGroup/Vulkan-ValidationLayersCopy to clipboard
3. Run the following commands:
                
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: If the /tmp/local/debug/vulkan
                        path is not available, create a similar path.
4. To enable the validation layers on Vulkan applications, set the
                        `VK_INSTANCE_LAYERS` environment variable as follows:
                
export VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validationCopy to clipboard
5. To edit or append the settings in the
                        layers/vk\_layer\_settings.txt file, run the following
                    commands:
                
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. To push the layers/vk\_layer\_settings.txt file to the
                    device, run the following command:
                
scp -r vk_layer_settings.txt root@[IP-address-of-device]:/tmp/local/debug/vulkan/Copy to clipboard
7. To dump the log, add the path of the validation layers by running the following
                    command:
                
export VK_LAYER_SETTINGS_PATH=/tmp/local/debug/vulkan/vk_layer_settings.txtCopy to clipboard

Dumps are generated in the same directory where the Vulkan application binary
                        was pushed. 
Note: To avoid data flush in the
                                tmp directory, save the Vulkan application
                            binary to other suitable location. If you change the location of the
                            binary, ensure that the path is correctly set in the environment
                            variables after rebooting.

Last Published: Oct 14, 2024

[Previous Topic
Tools](https://docs.qualcomm.com/bundle/publicresource/80-70015-19/topics/graphics_developer_tools.md) [Next Topic
Supported extensions](https://docs.qualcomm.com/bundle/publicresource/80-70015-19/topics/supported_extensions.md)