xref: /openbmc/linux/tools/power/pm-graph/bootgraph.8 (revision dfd4f649)
BOOTGRAPH 8
NAME
bootgraph - Kernel boot timing analysis
SYNOPSIS
bootgraph [ OPTIONS ] [ COMMAND ]
DESCRIPTION
bootgraph reads the dmesg log from kernel boot and creates an html representation of the initcall timeline. It graphs every module init call found, through both kernel and user modes. The timeline is split into two phases: kernel mode & user mode. kernel mode represents a single process run on a single cpu with serial init calls. Once user mode begins, the init process is called, and the init calls start working in parallel.

If no specific command is given, the tool reads the current dmesg log and outputs a new timeline.

The tool can also augment the timeline with ftrace data on custom target functions as well as full trace callgraphs.

Generates output files in subdirectory: boot-yymmdd-HHMMSS html timeline : <hostname>_boot.html raw dmesg file : <hostname>_boot_dmesg.txt raw ftrace file : <hostname>_boot_ftrace.txt

OPTIONS

-h Print this help text

-v Print the current tool version

-addlogs Add the dmesg log to the html output. It will be viewable by clicking a button in the timeline.

-result file Export a results table to a text file for parsing.

-o name Overrides the output subdirectory name when running a new test. Use {date}, {time}, {hostname} for current values. e.g. boot-{hostname}-{date}-{time}

"advanced"

-f or -callgraph Use ftrace to create initcall callgraphs (default: disabled). If -func is not used there will be one callgraph per initcall. This can produce very large outputs, i.e. 10MB - 100MB.

-fstat Use ftrace to add function detail (default: disabled)

-maxdepth level limit the callgraph trace depth to level (default: 2). This is the best way to limit the output size when using -callgraph.

-mincg t Discard all callgraphs shorter than t milliseconds (default: 0=all). This reduces the html file size as there can be many tiny callgraphs which are barely visible in the timeline. The value is a float: e.g. 0.001 represents 1 us.

-cgfilter "func1,func2,..." Reduce callgraph output in the timeline by limiting it to a list of calls. The argument can be a single function name or a comma delimited list. (default: none)

-cgskip file Reduce callgraph output in the timeline by skipping over uninteresting functions in the trace, e.g. printk or console_unlock. The functions listed in this file will show up as empty leaves in the callgraph with only the start/end times displayed. (default: none)

-timeprec n Number of significant digits in timestamps (0:S, 3:ms, [6:us])

-expandcg pre-expand the callgraph data in the html output (default: disabled)

-func "func1,func2,..." Instead of tracing each initcall, trace a custom list of functions (default: do_one_initcall)

-reboot Reboot the machine and generate a new timeline automatically. Works in 4 steps. 1. updates grub with the required kernel parameters 2. installs a cron job which re-runs the tool after reboot 3. reboots the system 4. after startup, extracts the data and generates the timeline

-manual Show the requirements to generate a new timeline manually. Requires 3 steps. 1. append the string to the kernel command line via your native boot manager. 2. reboot the system 3. after startup, re-run the tool with the same arguments and no command

COMMANDS
"rebuild"

-dmesg file Create HTML output from an existing dmesg file.

-ftrace file Create HTML output from an existing ftrace file (used with -dmesg).

"other"

-flistall Print all ftrace functions capable of being captured. These are all the possible values you can add to trace via the -func argument.

-sysinfo Print out system info extracted from BIOS. Reads /dev/mem directly instead of going through dmidecode.

EXAMPLES
Create a timeline using the current dmesg log.
$ bootgraph

Create a timeline using the current dmesg and ftrace log.

$ bootgraph -callgraph

Create a timeline using the current dmesg, add the log to the html and change the folder.

$ bootgraph -addlogs -o "myboot-{date}-{time}"

Capture a new boot timeline by automatically rebooting the machine.

$ sudo bootgraph -reboot -addlogs -o "latest-{hostname)"

Capture a new boot timeline with function trace data.

$ sudo bootgraph -reboot -f

Capture a new boot timeline with trace & callgraph data. Skip callgraphs smaller than 5ms.

$ sudo bootgraph -reboot -callgraph -mincg 5

Capture a new boot timeline with callgraph data over custom functions.

$ sudo bootgraph -reboot -callgraph -func "acpi_ps_parse_aml,msleep"

Capture a brand new boot timeline with manual reboot.

$ sudo bootgraph -callgraph -manual
$ vi /etc/default/grub # add the CMDLINE string to your kernel params
$ sudo reboot # reboot the machine
$ sudo bootgraph -callgraph # re-run the tool after restart

"rebuild timeline from logs"

Rebuild the html from a previous run's logs, using the same options.

$ bootgraph -dmesg dmesg.txt -ftrace ftrace.txt -callgraph

Rebuild the html with different options.

$ bootgraph -dmesg dmesg.txt -ftrace ftrace.txt -addlogs
"SEE ALSO"
dmesg(1), update-grub(8), crontab(1), reboot(8)

AUTHOR
Written by Todd Brandt <todd.e.brandt@linux.intel.com>