From e46b72436cab6d66fdb0263e0bf14082195b754e Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Sun, 15 Jan 2023 14:16:01 -0700 Subject: [PATCH] trace: Update documentation Revamp the documentation for the new features, including a description of the new features and documentation for the trace command. Signed-off-by: Simon Glass --- .gitattributes | 1 + doc/develop/pics/flamegraph.png | Bin 0 -> 48224 bytes doc/develop/pics/flamegraph_timing.png | Bin 0 -> 31305 bytes doc/develop/pics/flamegraph_zoom.png | Bin 0 -> 25465 bytes doc/develop/pics/kernelshark.png | Bin 0 -> 29617 bytes doc/develop/pics/kernelshark_fg.png | Bin 0 -> 28899 bytes doc/develop/trace.rst | 281 +++++++++++++++++++------ doc/usage/cmd/trace.rst | 163 ++++++++++++++ doc/usage/index.rst | 1 + 9 files changed, 382 insertions(+), 64 deletions(-) create mode 100644 doc/develop/pics/flamegraph.png create mode 100644 doc/develop/pics/flamegraph_timing.png create mode 100644 doc/develop/pics/flamegraph_zoom.png create mode 100644 doc/develop/pics/kernelshark.png create mode 100644 doc/develop/pics/kernelshark_fg.png create mode 100644 doc/usage/cmd/trace.rst diff --git a/.gitattributes b/.gitattributes index 1879a2dfb3c..d5931f03e7c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,3 +4,4 @@ *.bmp binary *.ttf binary *.gz binary +*.png binary diff --git a/doc/develop/pics/flamegraph.png b/doc/develop/pics/flamegraph.png new file mode 100644 index 0000000000000000000000000000000000000000..dbdd27e6d872668dcf6f27174382371a75751e9e GIT binary patch literal 48224 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 literal 0 Hc-jL100001 diff --git a/doc/develop/pics/flamegraph_timing.png b/doc/develop/pics/flamegraph_timing.png new file mode 100644 index 0000000000000000000000000000000000000000..b388b8b9881f26a3fc8eab4676caccd22779149c GIT binary patch literal 31305 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 literal 0 Hc-jL100001 diff --git a/doc/develop/pics/flamegraph_zoom.png b/doc/develop/pics/flamegraph_zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..38b68444b7ba5cfaa34d9efe6773d697efa5ff13 GIT binary patch literal 25465 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 literal 0 Hc-jL100001 diff --git a/doc/develop/pics/kernelshark.png b/doc/develop/pics/kernelshark.png new file mode 100644 index 0000000000000000000000000000000000000000..3450c6b5fd37c849f5b3f5b1d6793b1883d94bc4 GIT binary patch literal 29617 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

<5w3ey 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 literal 0 Hc-jL100001 diff --git a/doc/develop/pics/kernelshark_fg.png b/doc/develop/pics/kernelshark_fg.png new file mode 100644 index 0000000000000000000000000000000000000000..a54efd1c4cf8d6d6f2f3dc5085fba167d01ebefe GIT binary patch literal 28899 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 literal 0 Hc-jL100001 diff --git a/doc/develop/trace.rst b/doc/develop/trace.rst index 5c7802da51a..8425d843e9c 100644 --- a/doc/develop/trace.rst +++ b/doc/develop/trace.rst @@ -15,12 +15,16 @@ Overview The trace feature uses GCC's instrument-functions feature to trace all function entry/exit points. These are then recorded in a memory buffer. The memory buffer can be saved to the host over a network link using -tftpput or by writing to an attached memory device such as MMC. +tftpput or by writing to an attached storage device such as MMC. On the host, the file is first converted with a tool called 'proftool', which extracts useful information from it. The resulting trace output resembles that emitted by Linux's ftrace feature, so can be visually -displayed by pytimechart. +displayed by kernelshark (see kernelshark_) and used with +'trace-cmd report' (see trace_cmd_). + +It is also possible to produce a flame graph for use with flamegraph.pl +(see flamegraph_pl_). Quick-start using Sandbox @@ -30,7 +34,7 @@ Sandbox is a build of U-Boot that can run under Linux so it is a convenient way of trying out tracing before you use it on your actual board. To do this, follow these steps: -Add the following to config/sandbox_defconfig +Add the following to `config/sandbox_defconfig`: .. code-block:: c @@ -75,7 +79,7 @@ a trace: 16 maximum observed call depth 15 call depth limit 1,275,767 calls not traced due to depth - =>trace calls 0 e00000 + =>trace calls 1000000 e00000 Call list dumped to 00000000, size 0xae0a40 =>print baudrate=115200 @@ -87,7 +91,7 @@ a trace: stdout=serial Environment size: 117/8188 bytes - =>host save host 0 trace 0 ${profoffset} + =>host save hostfs - 1000000 trace ${profoffset} 11405888 bytes written in 10 ms (1.1 GiB/s) =>reset @@ -96,18 +100,107 @@ Then run proftool to convert the trace information to ftrace format .. code-block:: console - $ ./sandbox/tools/proftool -m sandbox/System.map -p trace dump-ftrace >trace.txt + $ ./sandbox/tools/proftool -m sandbox/System.map -t trace dump-ftrace >trace.dat -Finally run pytimechart to display it +Finally run kernelshark to display it (note it only works with `.dat` files!): .. code-block:: console - $ pytimechart trace.txt + $ kernelshark trace.dat -Using this tool you can zoom and pan across the trace, with the function -calls on the left and little marks representing the start and end of each +Using this tool you can view the trace records and see the timestamp for each function. +.. image:: pics/kernelshark.png + :width: 800 + :alt: Kernelshark showing function-trace records + + +To see the records on the console, use trace-cmd: + +.. code-block:: console + + $ trace-cmd report trace.dat | less + cpus=1 + u-boot-1 [000] 3.116364: function: initf_malloc + u-boot-1 [000] 3.116375: function: initf_malloc + u-boot-1 [000] 3.116386: function: initf_bootstage + u-boot-1 [000] 3.116396: function: bootstage_init + u-boot-1 [000] 3.116408: function: malloc + u-boot-1 [000] 3.116418: function: malloc_simple + u-boot-1 [000] 3.116429: function: alloc_simple + u-boot-1 [000] 3.116441: function: alloc_simple + u-boot-1 [000] 3.116449: function: malloc_simple + u-boot-1 [000] 3.116457: function: malloc + +Note that `pytimechart` is obsolete so cannot be used anymore. + +There is a -f option available to select a function graph: + +.. code-block:: console + + $ ./sandbox/tools/proftool -m sandbox/System.map -t trace -f funcgraph dump-ftrace >trace.dat + +Again, you can use kernelshark or trace-cmd to look at the output. In this case +you will see the time taken by each function shown against its exit record. + +.. image:: pics/kernelshark_fg.png + :width: 800 + :alt: Kernelshark showing function-graph records + +.. code-block:: console + + $ trace-cmd report trace.dat | less + cpus=1 + u-boot-1 [000] 3.116364: funcgraph_entry: 0.011 us | initf_malloc(); + u-boot-1 [000] 3.116386: funcgraph_entry: | initf_bootstage() { + u-boot-1 [000] 3.116396: funcgraph_entry: | bootstage_init() { + u-boot-1 [000] 3.116408: funcgraph_entry: | malloc() { + u-boot-1 [000] 3.116418: funcgraph_entry: | malloc_simple() { + u-boot-1 [000] 3.116429: funcgraph_entry: 0.012 us | alloc_simple(); + u-boot-1 [000] 3.116449: funcgraph_exit: 0.031 us | } + u-boot-1 [000] 3.116457: funcgraph_exit: 0.049 us | } + u-boot-1 [000] 3.116466: funcgraph_entry: 0.063 us | memset(); + u-boot-1 [000] 3.116539: funcgraph_exit: 0.143 us | } + +Flame graph +----------- + +Some simple flame graph options are available as well, using the dump-flamegraph +command: + +.. code-block:: console + + $ ./sandbox/tools/proftool -m sandbox/System.map -t trace dump-flamegraph >trace.fg + $ flamegraph.pl trace.fg >trace.svg + +You can load the .svg file into a viewer. If you use Chrome (and some other +programs) you can click around and zoom in and out. + +.. image:: pics/flamegraph.png + :width: 800 + :alt: Chrome showing the flamegraph.pl output + +.. image:: pics/flamegraph_zoom.png + :width: 800 + :alt: Chrome showing zooming into the flamegraph.pl output + + +A timing variant is also available, which gives an idea of how much time is +spend in each call stack: + +.. code-block:: console + + $ ./sandbox/tools/proftool -m sandbox/System.map -t trace dump-flamegraph -f timing >trace.fg + $ flamegraph.pl trace.fg >trace.svg + +Note that trace collection does slow down execution so the timings will be +inflated. They should be used to guide optimisation. For accurate boot timings, +use bootstage. + +.. image:: pics/flamegraph_timing.png + :width: 800 + :alt: Chrome showing flamegraph.pl output with timing CONFIG Options -------------- @@ -138,6 +231,11 @@ CONFIG_TRACE_EARLY_SIZE CONFIG_TRACE_EARLY_ADDR Address of early trace buffer +CONFIG_TRACE_CALL_DEPTH_LIMIT + Sets the limit on trace call-depth. For a broad view, 10 is typically + sufficient. Setting this too large creates enormous traces and distorts + the overall timing considerable. + Building U-Boot with Tracing Enabled ------------------------------------ @@ -148,6 +246,26 @@ instrumenting from the command line instead of having to change board config files. +Board requirements +------------------ + +Trace data collection relies on a microsecond timer, accessed through +`timer_get_us()`. So the first thing you should do is make sure that +this produces sensible results for your board. Suitable sources for +this timer include high resolution timers, PWMs or profile timers if +available. Most modern SOCs have a suitable timer for this. + +See `add_ftrace()` for where `timer_get_us()` is called. The `notrace` +attribute must be used on each function called by `timer_get_us()` since +recursive calls to `add_ftrace()` will cause a fault:: + + trace: recursion detected, disabling + +You cannot use driver model to obtain the microsecond timer, since tracing +may be enabled before driver model is set up. Instead, provide a low-level +function which accesses the timer, setting it up if needed. + + Collecting Trace Data --------------------- @@ -155,21 +273,22 @@ When you run U-Boot on your board it will collect trace data up to the limit of the trace buffer size you have specified. Once that is exhausted no more data will be collected. -Collecting trace data has an affect on execution time/performance. You +Collecting trace data affects execution time and performance. You will notice this particularly with trivial functions - the overhead of recording their execution may even exceed their normal execution time. In practice this doesn't matter much so long as you are aware of the effect. Once you have done your optimizations, turn off tracing before -doing end-to-end timing. +doing end-to-end timing using bootstage. The best time to start tracing is right at the beginning of U-Boot. The best time to stop tracing is right at the end. In practice it is hard to achieve these ideals. -This implementation enables tracing early in board_init_f(). This means +This implementation enables tracing early in `board_init_r()`, or +`board_init_f()` when `TRACE_EARLY` is enabled. This means that it captures most of the board init process, missing only the early architecture-specific init. However, it also misses the entire -SPL stage if there is one. +SPL stage if there is one. At present tracing is not supported in SPL. U-Boot typically ends with a 'bootm' command which loads and runs an OS. There is useful trace data in the execution of that bootm @@ -179,39 +298,11 @@ the OS. In practical terms, U-Boot runs the 'fakegocmd' environment variable at this point. This variable should have a short script which collects the trace data and writes it somewhere. -Trace data collection relies on a microsecond timer, accessed through -timer_get_us(). So the first think you should do is make sure that -this produces sensible results for your board. Suitable sources for -this timer include high resolution timers, PWMs or profile timers if -available. Most modern SOCs have a suitable timer for this. Make sure -that you mark this timer (and anything it calls) with -notrace so that the trace library can -use it without causing an infinite loop. - - -Commands --------- - -The trace command has variable sub-commands: - -stats - Display tracing statistics - -pause - Pause tracing - -resume - Resume tracing - -funclist [ ] - Dump a list of functions into the buffer - -calls [ ] - Dump function call trace into buffer +Controlling the trace +--------------------- -If the address and size are not given, these are obtained from environment -variables (see below). In any case the environment variables are updated -after the command runs. +U-Boot provides a command-line interface to the trace system for controlling +tracing and accessing the trace data. See :doc:`../usage/cmd/trace`. Environment Variables @@ -264,39 +355,94 @@ a trace log to address 10000000 and sends it to a host machine using TFTP. After this, U-Boot will boot the OS normally, albeit a little later. +For a filesystem you may do something like:: + + trace calls 10000000 1000000; + save mmc 1:1 10000000 /trace ${profoffset} + +The trace buffer format is internal to the trace system. It consists of a +header, a call count for each function site, followed by a list of trace +records, once for each function call. + -Converting Trace Output Data ----------------------------- +Converting Trace Output Data (proftool) +--------------------------------------- The trace output data is kept in a binary format which is not documented -here. To convert it into something useful, you can use proftool. +here. See the `trace.h` header file if you are interested. To convert it into +something useful, you can use proftool. This tool must be given the U-Boot map file and the trace data received -from running that U-Boot. It produces a text output file. +from running that U-Boot. It produces a binary output file. + +It is also possible to provide a configuration file to indicate which functions +should be included or dropped during conversion. This file consists of lines +like:: + + include-func + exclude-func -Options +where is a regular expression matched against function names. It +allows some functions to be dropped from the trace when producing ftrace +records. + +Options: + +-c + Specify the optional configuration file, to control which functions are + included in the output. + +-f + Specifies the format to use (see below) -m - Specify U-Boot map file + Specify U-Boot map file (`System.map`) + +-o + Specify the output filename --p - Specify profile/trace file +-t + Specify trace file, the data saved from U-Boot + +-v <0-4> + Specify the verbosity, where 0 is the minimum and 4 is for debugging. Commands: -dump-ftrace - Write a text dump of the file in Linux ftrace format to stdout +dump-ftrace: + Write a binary dump of the file in Linux ftrace format. Two options are + available: + + function + write function-call records (caller/callee) + + funcgraph + write function entry/exit records (graph) + + This format can be used with kernelshark_ and trace_cmd_. + +dump-flamegraph + Write a list of stack records useful for producing a flame graph. Two + options are available: + calls + create a flamegraph of stack frames + + timing + create a flamegraph of microseconds for each stack frame + + This format can be used with flamegraph_pl_. Viewing the Trace Data ---------------------- -You can use pytimechart for this (sudo apt-get pytimechart might work on -your Debian-style machine, and use your favourite search engine to obtain -documentation). It expects the file to have a .txt extension. The program -has terse user interface but is very convenient for viewing U-Boot -profile information. +You can use kernelshark_ for a GUI, but note that version 2.0.x was broken. If +you have that version you could try building it from source. +The file must have a .dat extension or it is ignored. The program has terse +user interface but is very convenient for viewing U-Boot profile information. + +Also available is trace_cmd_ which provides a command-line interface. Workflow Suggestions -------------------- @@ -329,7 +475,9 @@ There are a few parameters in the code that you may want to consider. There is a function call depth limit (set to 15 by default). When the stack depth goes above this then no tracing information is recorded. The maximum depth reached is recorded and displayed by the 'trace stats' -command. +command. While it might be tempting to set the depth limit quite high, this +can dramatically increase the size of the trace output as well as the execution +time. Future Work @@ -346,5 +494,10 @@ Some other features that might be useful: - Compression of trace information -Simon Glass -April 2013 +.. sectionauthor:: Simon Glass +.. April 2013 +.. Updated January 2023 + +.. _kernelshark: https://kernelshark.org/ +.. _trace_cmd: https://www.trace-cmd.org/ +.. _flamegraph_pl: https://github.com/brendangregg/FlameGraph/blob/master/flamegraph.pl diff --git a/doc/usage/cmd/trace.rst b/doc/usage/cmd/trace.rst new file mode 100644 index 00000000000..3bdf4f0a860 --- /dev/null +++ b/doc/usage/cmd/trace.rst @@ -0,0 +1,163 @@ +.. SPDX-License-Identifier: GPL-2.0+: + +trace command +============= + +Synopis +------- + +:: + + trace stats + trace pause + trace resume + trace funclist [ ] + trace calls [ ] + +Description +----------- + +The *trace* command is used to control the U-Boot tracing system. It allows +tracing to be paused and resumed, shows statistics for traces and provides a +way to dump out the trace information. + + +trace stats +~~~~~~~~~~~ + +This display tracing statistics, as follows: + +function sites + Functions are binned as a way of reducing the amount of space needed to + hold all the function information. This is controlled by FUNC_SITE_SIZE in + the trace.h header file. The usual value is 4, which provides the finest + granularity (assuming a minimum instruction size of 4 bytes) which means + that every function can be resolved individually. + +function calls + Total number of function calls, including those which were not traced due + to buffer space. This count does not include functions which exceeded the + depth limit. + +untracked function calls + Total number of function calls which did not appear in the U-Boot image. + This can happen if a function is called outside the normal code area. + +traced function calls + Total number of function calls which were actually traced, i.e. are included + in the recorded trace data. + +dropped due to overflow + If the trace buffer was exhausted then this shows the number of records that + were dropped. Try reducing the depth limit or expanding the buffer size. + +maximum observed call depth + Maximum observed call depth while tracing. + +calls not traced due to depth + Counts the number of function calls that were not recorded because they + exceeded the maximum call depth. + +max function calls + Maximum number of function calls which can be recorded in the trace buffer, + given its size. Once `function calls` hits this value, recording stops. + +trace buffer + Address of trace buffer + +call records + Address of first trace record. This is near the start of the trace buffer, + after the function-call counts. + + +trace pause +~~~~~~~~~~~ + +Pauses tracing, so that no more data is added to the trace buffer. + + +trace resume +~~~~~~~~~~~~ + +Resumes tracing, so that new function calls are added to the trace buffer if +there is sufficient space. + + +trace funclist [ ] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Dumps a list of functions into the provided buffer. The file uses a format +specific to U-Boot: a header, following by the function offset and call count. + +If the address and size are not given, these are obtained from +:ref:`develop/trace:environment variables`. In any case the environment +variables are updated after the command runs. + +The resulting data should be written out to the host, e.g. using Ethernet or +a filesystem. There are no tools provided to read this sdata. + + +trace calls [ ] +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Dumps a list of function calls into the provided buffer. The file uses a format +specific to U-Boot: a header, following by the list of calls. The proftool +tool can be used to convert this information ready for further analysis. + + +Example +------- + +:: + + => trace stats + 269,252 function sites + 38,025,059 function calls + 3 untracked function calls + 7,382,690 traced function calls + 17 maximum observed call depth + 15 call depth limit + 68,667,432 calls not traced due to depth + 22,190,112 max function calls + + trace buffer 6c000000 call records 6c20de78 + => trace resume + => trace pause + +This shows that resuming the trace causes the buffer to overflow:: + + => trace stats + 269,252 function sites + 49,573,694 function calls + 3 untracked function calls + 22,190,112 traced function calls (8289848 dropped due to overflow) + 17 maximum observed call depth + 15 call depth limit + 68,667,432 calls not traced due to depth + 22,190,112 max function calls + + trace buffer 6c000000 call records 6c20de78 + => trace funcs 30000000 0x100000 + Function trace dumped to 30000000, size 0x1e70 + +This shows collecting and writing out the result trace data: + +:: + => trace calls 20000000 0x10000000 + Call list dumped to 20000000, size 0xfdf21a0 + => save mmc 1:1 20000000 /trace ${profoffset} + File System is consistent + file found, deleting + update journal finished + File System is consistent + update journal finished + 266281376 bytes written in 18584 ms (13.7 MiB/s) + +From here you can use proftool to convert it: + +.. code-block:: bash + + tools/proftool -m System.map -t trace -o asc.fg dump-ftrace + + +.. _`ACPI specification`: https://uefi.org/sites/default/files/resources/ACPI_6_3_final_Jan30.pdf diff --git a/doc/usage/index.rst b/doc/usage/index.rst index 13e6939b38d..cde7dcb14a6 100644 --- a/doc/usage/index.rst +++ b/doc/usage/index.rst @@ -84,6 +84,7 @@ Shell commands cmd/sm cmd/temperature cmd/tftpput + cmd/trace cmd/true cmd/ums cmd/ut -- 2.47.3