# SPDX-License-Identifier: GPL-2.0+
#
# Copyright (c) 2013 The Chromium OS Authors.

Tracing in U-Boot
=================

U-Boot supports a simple tracing feature which allows a record of excecution
to be collected and sent to a host machine for analysis. At present the
main use for this is to profile boot time.


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.

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.


Quick-start using Sandbox
-------------------------

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 include/configs/sandbox.h (if not already there)

#define CONFIG_TRACE
#define CONFIG_CMD_TRACE
#define CONFIG_TRACE_BUFFER_SIZE		(16 << 20)
#define CONFIG_TRACE_EARLY_SIZE		(8 << 20)
#define CONFIG_TRACE_EARLY
#define CONFIG_TRACE_EARLY_ADDR		0x00100000

Build sandbox U-Boot with tracing enabled:

$ make FTRACE=1 O=sandbox sandbox_config
$ make FTRACE=1 O=sandbox

Run sandbox, wait for a bit of trace information to appear, and then capture
a trace:

$ ./sandbox/u-boot


U-Boot 2013.04-rc2-00100-ga72fcef (Apr 17 2013 - 19:25:24)

DRAM:  128 MiB
trace: enabled
Using default environment

In:    serial
Out:   serial
Err:   serial
=>trace stats
	671,406 function sites
	 69,712 function calls
	      0 untracked function calls
	 73,373 traced function calls
	     16 maximum observed call depth
	     15 call depth limit
	 66,491 calls not traced due to depth
=>trace stats
	671,406 function sites
      1,279,450 function calls
	      0 untracked function calls
	950,490 traced function calls (333217 dropped due to overflow)
	     16 maximum observed call depth
	     15 call depth limit
      1,275,767 calls not traced due to depth
=>trace calls 0 e00000
Call list dumped to 00000000, size 0xae0a40
=>print
baudrate=115200
profbase=0
profoffset=ae0a40
profsize=e00000
stderr=serial
stdin=serial
stdout=serial

Environment size: 117/8188 bytes
=>sb save host 0 trace 0 ${profoffset}
11405888 bytes written in 10 ms (1.1 GiB/s)
=>reset


Then run proftool to convert the trace information to ftrace format.

$ ./sandbox/tools/proftool -m sandbox/System.map -p trace dump-ftrace >trace.txt

Finally run pytimechart to display it:

$ pytimechart trace.txt

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
function.


CONFIG Options
--------------

- CONFIG_TRACE
		Enables the trace feature in U-Boot.

- CONFIG_CMD_TRACE
		Enables the trace command.

- CONFIG_TRACE_BUFFER_SIZE
		Size of trace buffer to allocate for U-Boot. This buffer is
		used after relocation, as a place to put function tracing
		information. The address of the buffer is determined by
		the relocation code.

- CONFIG_TRACE_EARLY
		Define this to start tracing early, before relocation.

- CONFIG_TRACE_EARLY_SIZE
		Size of 'early' trace buffer. Before U-Boot has relocated
		it doesn't have a proper trace buffer. On many boards
		you can define an area of memory to use for the trace
		buffer until the 'real' trace buffer is available after
		relocation. The contents of this buffer are then copied to
		the real buffer.

- CONFIG_TRACE_EARLY_ADDR
		Address of early trace buffer


Building U-Boot with Tracing Enabled
------------------------------------

Pass 'FTRACE=1' to the U-Boot Makefile to actually instrument the code.
This is kept as a separate option so that it is easy to enable/disable
instrumenting from the command line instead of having to change board
config files.


Collecting Trace Data
---------------------

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
will notice this particularly with trvial 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 optimisations, turn off tracing before
doing end-to-end timing.

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
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.

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
command. Therefore this implementation provides a way to collect trace
data after bootm has finished processing, but just before it jumps to
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, accesed 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
__attribute__((no_instrument_function)) 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 [<addr> <size>]
		Dump a list of functions into the buffer

- calls  [<addr> <size>]
		Dump function call trace into buffer

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.


Environment Variables
---------------------

The following are used:

- profbase
		Base address of trace output buffer

- profoffset
		Offset of first unwritten byte in trace output buffer

- profsize
		Size of trace output buffer

All of these are set by the 'trace calls' command.

These variables keep track of the amount of data written to the trace
output buffer by the 'trace' command. The trace commands which write data
to the output buffer can use these to specify the buffer to write to, and
update profoffset each time. This allows successive commands to append data
to the same buffer, for example:

	trace funclist 10000 e00000
	trace calls

(the latter command appends more data to the buffer).


- fakegocmd
		Specifies commands to run just before booting the OS. This
		is a useful time to write the trace data to the host for
		processing.


Writing Out Trace Data
----------------------

Once the trace data is in an output buffer in memory there are various ways
to transmit it to the host. Notably you can use tftput to send the data
over a network link:

fakegocmd=trace pause; usb start; set autoload n; bootp;
	trace calls 10000000 1000000;
	tftpput ${profbase} ${profoffset} 192.168.1.4:/tftpboot/calls

This starts up USB (to talk to an attached USB Ethernet dongle), writes
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.


Converting Trace Output Data
----------------------------

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.

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.

Options
	-m <map_file>
		Specify U-Boot map file

	-p <trace_file>
		Specifiy profile/trace file

Commands:

- dump-ftrace
	Write a text dump of the file in Linux ftrace format to stdout


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.


Workflow Suggestions
--------------------

The following suggestions may be helpful if you are trying to reduce boot
time:

1. Enable CONFIG_BOOTSTAGE and CONFIG_BOOTSTAGE_REPORT. This should get
you are helpful overall snapshot of the boot time.

2. Build U-Boot with tracing and run it. Note the difference in boot time
(it is common for tracing to add 10% to the time)

3. Collect the trace information as descibed above. Use this to find where
all the time is being spent.

4. Take a look at that code and see if you can optimise it. Perhaps it is
possible to speed up the initialisation of a device, or remove an unused
feature.

5. Rebuild, run and collect again. Compare your results.

6. Keep going until you run out of steam, or your boot is fast enough.


Configuring Trace
-----------------

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.


Future Work
-----------

Tracing could be a little tidier in some areas, for example providing
run-time configuration options for trace.

Some other features that might be useful:

- Trace filter to select which functions are recorded
- Sample-based profiling using a timer interrupt
- Better control over trace depth
- Compression of trace information


Simon Glass <sjg@chromium.org>
April 2013
