[Concept,v2,08/29] sandbox: Add gprof profiling support
Commit Message
From: Simon Glass <simon.glass@canonical.com>
Add a GPROF=1 build option to enable gprof profiling for sandbox. This
adds the -pg flag to both compiler and linker when GPROF=1 is set,
following the same pattern as the existing FTRACE option.
Usage:
make GPROF=1 sandbox_defconfig all
./u-boot -T -c "ut dm"
...
gprof u-boot gmon.out
Co-developed-by: Claude <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
---
(no changes since v1)
arch/sandbox/config.mk | 4 ++++
config.mk | 4 ++++
doc/develop/trace.rst | 40 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 48 insertions(+)
@@ -10,6 +10,10 @@ PLATFORM_LIBS += -L$(GCC_LIB_DIR) -lbacktrace
endif
PLATFORM_LIBS += -lrt
+ifdef GPROF
+PLATFORM_LIBS += -pg
+endif
+
SDL_CONFIG ?= sdl2-config
# Define this to avoid linking with SDL, which requires SDL libraries
@@ -63,6 +63,10 @@ ifdef FTRACE
PLATFORM_CPPFLAGS += -finstrument-functions -DFTRACE
endif
+ifdef GPROF
+PLATFORM_CPPFLAGS += -pg
+endif
+
#########################################################################
RELFLAGS := $(PLATFORM_RELFLAGS)
@@ -491,6 +491,46 @@ can dramatically increase the size of the trace output as well as the execution
time.
+Wall-clock Profiling with gprof (Sandbox)
+-----------------------------------------
+
+For sandbox builds, an alternative to U-Boot's internal tracing is to use
+the standard GNU gprof profiler. This provides wall-clock profiling with
+less overhead than function instrumentation, and produces output that can
+be analysed with standard tools.
+
+To build sandbox with gprof support::
+
+ make GPROF=1 O=/tmp/b/sandbox sandbox_defconfig
+ make GPROF=1 O=/tmp/b/sandbox
+
+Then run U-Boot. A `gmon.out` file is created in the current directory when
+the program exits::
+
+ cd /tmp/b/sandbox
+ ./u-boot -T -c "ut dm dm_test_rtc_set_get"
+
+Analyse the results with gprof::
+
+ gprof u-boot gmon.out | less
+
+This shows a flat profile (functions sorted by time) and a call graph. The
+flat profile shows which functions consume the most CPU time::
+
+ % cumulative self self total
+ time seconds seconds calls ms/call ms/call name
+ 29.41 0.05 0.05 36922 0.00 0.00 memset
+ 17.65 0.08 0.03 read_uleb128
+ 11.76 0.10 0.02 328472 0.00 0.00 string
+ ...
+
+The call graph shows the call hierarchy and time spent in each call chain.
+
+Note that gprof measures CPU time, not wall-clock time, so I/O wait time is
+not captured. For boot-time optimisation where I/O is significant, use
+bootstage or the internal trace system instead.
+
+
Future Work
-----------