1*61046927SAndroid Build Coastguard Workeru_trace GPU Performance Tracing 2*61046927SAndroid Build Coastguard Worker=============================== 3*61046927SAndroid Build Coastguard Worker 4*61046927SAndroid Build Coastguard WorkerMesa has its own GPU performance tracing framework which drivers may 5*61046927SAndroid Build Coastguard Workerchoose to implement. ``gpu.renderstages.*`` producer for 6*61046927SAndroid Build Coastguard Worker:doc:`Perfetto Tracing <perfetto>` is based on u_trace. 7*61046927SAndroid Build Coastguard Worker 8*61046927SAndroid Build Coastguard WorkerIt doesn't require external dependencies and much simpler to use. Though 9*61046927SAndroid Build Coastguard Workerit provides information only about GPU timings and is harder to analyze 10*61046927SAndroid Build Coastguard Workerfor complex rendering. 11*61046927SAndroid Build Coastguard Worker 12*61046927SAndroid Build Coastguard Workeru_trace is useful when one needs to quickly identify performance bottleneck, 13*61046927SAndroid Build Coastguard Workeror to build a tool to analyze the raw performance data. 14*61046927SAndroid Build Coastguard Worker 15*61046927SAndroid Build Coastguard WorkerDrivers which support u_trace: 16*61046927SAndroid Build Coastguard Worker - Intel drivers: ANV, Iris 17*61046927SAndroid Build Coastguard Worker - Adreno drivers: Freedreno, Turnip 18*61046927SAndroid Build Coastguard Worker 19*61046927SAndroid Build Coastguard WorkerUsage 20*61046927SAndroid Build Coastguard Worker----- 21*61046927SAndroid Build Coastguard Worker 22*61046927SAndroid Build Coastguard Workeru_trace is controlled by environment variables: 23*61046927SAndroid Build Coastguard Worker 24*61046927SAndroid Build Coastguard Worker.. envvar:: MESA_GPU_TRACES 25*61046927SAndroid Build Coastguard Worker 26*61046927SAndroid Build Coastguard Worker controls whether u_trace is enabled and trace output 27*61046927SAndroid Build Coastguard Worker 28*61046927SAndroid Build Coastguard Worker ``print`` 29*61046927SAndroid Build Coastguard Worker prints in a human readable text format. It should be noted that this 30*61046927SAndroid Build Coastguard Worker is mutually exclusive with ``print_json`` and both cannot be enabled 31*61046927SAndroid Build Coastguard Worker at the same time. 32*61046927SAndroid Build Coastguard Worker ``print_json`` 33*61046927SAndroid Build Coastguard Worker prints in JSON format, suitable for parsing. Application should 34*61046927SAndroid Build Coastguard Worker appropriately finish its rendering in order for trace's json to be 35*61046927SAndroid Build Coastguard Worker valid. For the Vulkan API, it is expected to destroy the device, 36*61046927SAndroid Build Coastguard Worker for GL it's expected to destroy the context. 37*61046927SAndroid Build Coastguard Worker ``perfetto`` 38*61046927SAndroid Build Coastguard Worker enables Perfetto instrumentation prior to connecting, Perfetto 39*61046927SAndroid Build Coastguard Worker traces can be collected without setting this but it may miss some 40*61046927SAndroid Build Coastguard Worker events prior to the tracing session being started. 41*61046927SAndroid Build Coastguard Worker ``markers`` 42*61046927SAndroid Build Coastguard Worker enables marker instrumentation, will print trace markers into 43*61046927SAndroid Build Coastguard Worker the CS which can then be viewed by dumping the CS from the driver. 44*61046927SAndroid Build Coastguard Worker 45*61046927SAndroid Build Coastguard Worker - For Turnip, ``cffdump`` can be used to view the markers in 46*61046927SAndroid Build Coastguard Worker the trace. 47*61046927SAndroid Build Coastguard Worker ``indirects`` 48*61046927SAndroid Build Coastguard Worker enables indirect data capture for some of the tracepoints (like 49*61046927SAndroid Build Coastguard Worker indirect draw count or indirect dispatch size) 50*61046927SAndroid Build Coastguard Worker 51*61046927SAndroid Build Coastguard Worker.. envvar:: MESA_GPU_TRACEFILE 52*61046927SAndroid Build Coastguard Worker 53*61046927SAndroid Build Coastguard Worker specifies a file where to write the output instead of ``stdout`` 54*61046927SAndroid Build Coastguard Worker 55*61046927SAndroid Build Coastguard Worker.. envvar:: *_GPU_TRACEPOINT 56*61046927SAndroid Build Coastguard Worker 57*61046927SAndroid Build Coastguard Worker tracepoints can be enabled or disabled using driver specific environment 58*61046927SAndroid Build Coastguard Worker variable. Most tracepoints are enabled by default. For instance 59*61046927SAndroid Build Coastguard Worker ``TU_GPU_TRACEPOINT=-blit,+render_pass`` will disable the 60*61046927SAndroid Build Coastguard Worker ``blit`` tracepoints and enable the ``render_pass`` tracepoints. 61*61046927SAndroid Build Coastguard Worker 62*61046927SAndroid Build Coastguard Worker .. list-table:: 63*61046927SAndroid Build Coastguard Worker :header-rows: 1 64*61046927SAndroid Build Coastguard Worker 65*61046927SAndroid Build Coastguard Worker * - Driver 66*61046927SAndroid Build Coastguard Worker - Environment Variable 67*61046927SAndroid Build Coastguard Worker - Tracepoint Definitions 68*61046927SAndroid Build Coastguard Worker * - Freedreno 69*61046927SAndroid Build Coastguard Worker - .. envvar:: FD_GPU_TRACEPOINT 70*61046927SAndroid Build Coastguard Worker - ``src/gallium/drivers/freedreno/freedreno_tracepoints.py`` 71*61046927SAndroid Build Coastguard Worker * - Turnip 72*61046927SAndroid Build Coastguard Worker - .. envvar:: TU_GPU_TRACEPOINT 73*61046927SAndroid Build Coastguard Worker - ``src/freedreno/vulkan/tu_tracepoints.py`` 74*61046927SAndroid Build Coastguard Worker * - ANV 75*61046927SAndroid Build Coastguard Worker - .. envvar:: INTEL_GPU_TRACEPOINT 76*61046927SAndroid Build Coastguard Worker - ``src/intel/vulkan/intel_tracepoints.py`` 77