xref: /aosp_15_r20/external/mesa3d/docs/u_trace.rst (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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