1 .TH BOOTGRAPH 8 1 .TH BOOTGRAPH 8 2 .SH NAME 2 .SH NAME 3 bootgraph \- Kernel boot timing analysis 3 bootgraph \- Kernel boot timing analysis 4 .SH SYNOPSIS 4 .SH SYNOPSIS 5 .ft B 5 .ft B 6 .B bootgraph 6 .B bootgraph 7 .RB [ OPTIONS ] 7 .RB [ OPTIONS ] 8 .RB [ COMMAND ] 8 .RB [ COMMAND ] 9 .SH DESCRIPTION 9 .SH DESCRIPTION 10 \fBbootgraph \fP reads the dmesg log from kern 10 \fBbootgraph \fP reads the dmesg log from kernel boot and 11 creates an html representation of the initcall 11 creates an html representation of the initcall timeline. It graphs 12 every module init call found, through both ker 12 every module init call found, through both kernel and user modes. The 13 timeline is split into two phases: kernel mode 13 timeline is split into two phases: kernel mode & user mode. kernel mode 14 represents a single process run on a single cp 14 represents a single process run on a single cpu with serial init calls. 15 Once user mode begins, the init process is cal 15 Once user mode begins, the init process is called, and the init calls 16 start working in parallel. 16 start working in parallel. 17 .PP 17 .PP 18 If no specific command is given, the tool read 18 If no specific command is given, the tool reads the current dmesg log and 19 outputs a new timeline. 19 outputs a new timeline. 20 .PP 20 .PP 21 The tool can also augment the timeline with ft 21 The tool can also augment the timeline with ftrace data on custom target 22 functions as well as full trace callgraphs. 22 functions as well as full trace callgraphs. 23 .PP 23 .PP 24 Generates output files in subdirectory: boot-y 24 Generates output files in subdirectory: boot-yymmdd-HHMMSS 25 html timeline : <hostname>_boot.html 25 html timeline : <hostname>_boot.html 26 raw dmesg file : <hostname>_boot_dmesg 26 raw dmesg file : <hostname>_boot_dmesg.txt 27 raw ftrace file : <hostname>_boot_ftrac 27 raw ftrace file : <hostname>_boot_ftrace.txt 28 .SH OPTIONS 28 .SH OPTIONS 29 .TP 29 .TP 30 \fB-h\fR 30 \fB-h\fR 31 Print this help text 31 Print this help text 32 .TP 32 .TP 33 \fB-v\fR 33 \fB-v\fR 34 Print the current tool version 34 Print the current tool version 35 .TP 35 .TP 36 \fB-addlogs\fR 36 \fB-addlogs\fR 37 Add the dmesg log to the html output. It will 37 Add the dmesg log to the html output. It will be viewable by 38 clicking a button in the timeline. 38 clicking a button in the timeline. 39 .TP 39 .TP 40 \fB-result \fIfile\fR << 41 Export a results table to a text file for pars << 42 .TP << 43 \fB-o \fIname\fR 40 \fB-o \fIname\fR 44 Overrides the output subdirectory name when ru 41 Overrides the output subdirectory name when running a new test. 45 Use {date}, {time}, {hostname} for current val 42 Use {date}, {time}, {hostname} for current values. 46 .sp 43 .sp 47 e.g. boot-{hostname}-{date}-{time} 44 e.g. boot-{hostname}-{date}-{time} 48 .SS "advanced" 45 .SS "advanced" 49 .TP 46 .TP 50 \fB-f or -callgraph\fR !! 47 \fB-f\fR >> 48 Use ftrace to add function detail (default: disabled) >> 49 .TP >> 50 \fB-callgraph\fR 51 Use ftrace to create initcall callgraphs (defa 51 Use ftrace to create initcall callgraphs (default: disabled). If -func 52 is not used there will be one callgraph per in 52 is not used there will be one callgraph per initcall. This can produce 53 very large outputs, i.e. 10MB - 100MB. 53 very large outputs, i.e. 10MB - 100MB. 54 .TP 54 .TP 55 \fB-fstat\fR << 56 Use ftrace to add function detail (default: di << 57 .TP << 58 \fB-maxdepth \fIlevel\fR 55 \fB-maxdepth \fIlevel\fR 59 limit the callgraph trace depth to \fIlevel\fR 56 limit the callgraph trace depth to \fIlevel\fR (default: 2). This is 60 the best way to limit the output size when usi 57 the best way to limit the output size when using -callgraph. 61 .TP 58 .TP 62 \fB-mincg \fIt\fR 59 \fB-mincg \fIt\fR 63 Discard all callgraphs shorter than \fIt\fR mi 60 Discard all callgraphs shorter than \fIt\fR milliseconds (default: 0=all). 64 This reduces the html file size as there can b 61 This reduces the html file size as there can be many tiny callgraphs 65 which are barely visible in the timeline. 62 which are barely visible in the timeline. 66 The value is a float: e.g. 0.001 represents 1 63 The value is a float: e.g. 0.001 represents 1 us. 67 .TP 64 .TP 68 \fB-cgfilter \fI"func1,func2,..."\fR 65 \fB-cgfilter \fI"func1,func2,..."\fR 69 Reduce callgraph output in the timeline by lim 66 Reduce callgraph output in the timeline by limiting it to a list of calls. The 70 argument can be a single function name or a co 67 argument can be a single function name or a comma delimited list. 71 (default: none) << 72 .TP << 73 \fB-cgskip \fIfile\fR << 74 Reduce callgraph output in the timeline by ski << 75 functions in the trace, e.g. printk or console << 76 in this file will show up as empty leaves in t << 77 times displayed. << 78 (default: none) 68 (default: none) 79 .TP 69 .TP 80 \fB-timeprec \fIn\fR 70 \fB-timeprec \fIn\fR 81 Number of significant digits in timestamps (0: 71 Number of significant digits in timestamps (0:S, 3:ms, [6:us]) 82 .TP 72 .TP 83 \fB-expandcg\fR 73 \fB-expandcg\fR 84 pre-expand the callgraph data in the html outp 74 pre-expand the callgraph data in the html output (default: disabled) 85 .TP 75 .TP 86 \fB-func \fI"func1,func2,..."\fR 76 \fB-func \fI"func1,func2,..."\fR 87 Instead of tracing each initcall, trace a cust 77 Instead of tracing each initcall, trace a custom list of functions (default: do_one_initcall) 88 .TP 78 .TP 89 \fB-reboot\fR 79 \fB-reboot\fR 90 Reboot the machine and generate a new timeline 80 Reboot the machine and generate a new timeline automatically. Works in 4 steps. 91 1. updates grub with the required kernel par 81 1. updates grub with the required kernel parameters 92 2. installs a cron job which re-runs the too 82 2. installs a cron job which re-runs the tool after reboot 93 3. reboots the system 83 3. reboots the system 94 4. after startup, extracts the data and gene 84 4. after startup, extracts the data and generates the timeline 95 .TP 85 .TP 96 \fB-manual\fR 86 \fB-manual\fR 97 Show the requirements to generate a new timeli 87 Show the requirements to generate a new timeline manually. Requires 3 steps. 98 1. append the string to the kernel command l 88 1. append the string to the kernel command line via your native boot manager. 99 2. reboot the system 89 2. reboot the system 100 3. after startup, re-run the tool with the s 90 3. after startup, re-run the tool with the same arguments and no command 101 91 102 .SH COMMANDS 92 .SH COMMANDS 103 .SS "rebuild" 93 .SS "rebuild" 104 .TP 94 .TP 105 \fB-dmesg \fIfile\fR 95 \fB-dmesg \fIfile\fR 106 Create HTML output from an existing dmesg file 96 Create HTML output from an existing dmesg file. 107 .TP 97 .TP 108 \fB-ftrace \fIfile\fR 98 \fB-ftrace \fIfile\fR 109 Create HTML output from an existing ftrace fil 99 Create HTML output from an existing ftrace file (used with -dmesg). 110 .SS "other" 100 .SS "other" 111 .TP 101 .TP 112 \fB-flistall\fR 102 \fB-flistall\fR 113 Print all ftrace functions capable of being ca 103 Print all ftrace functions capable of being captured. These are all the 114 possible values you can add to trace via the - 104 possible values you can add to trace via the -func argument. 115 .TP 105 .TP 116 \fB-sysinfo\fR 106 \fB-sysinfo\fR 117 Print out system info extracted from BIOS. Rea 107 Print out system info extracted from BIOS. Reads /dev/mem directly instead of going through dmidecode. 118 108 119 .SH EXAMPLES 109 .SH EXAMPLES 120 Create a timeline using the current dmesg log. 110 Create a timeline using the current dmesg log. 121 .IP 111 .IP 122 \f(CW$ bootgraph\fR 112 \f(CW$ bootgraph\fR 123 .PP 113 .PP 124 Create a timeline using the current dmesg and 114 Create a timeline using the current dmesg and ftrace log. 125 .IP 115 .IP 126 \f(CW$ bootgraph -callgraph\fR 116 \f(CW$ bootgraph -callgraph\fR 127 .PP 117 .PP 128 Create a timeline using the current dmesg, add 118 Create a timeline using the current dmesg, add the log to the html and change the folder. 129 .IP 119 .IP 130 \f(CW$ bootgraph -addlogs -o "myboot-{date}-{t 120 \f(CW$ bootgraph -addlogs -o "myboot-{date}-{time}"\fR 131 .PP 121 .PP 132 Capture a new boot timeline by automatically r 122 Capture a new boot timeline by automatically rebooting the machine. 133 .IP 123 .IP 134 \f(CW$ sudo bootgraph -reboot -addlogs -o "lat 124 \f(CW$ sudo bootgraph -reboot -addlogs -o "latest-{hostname)"\fR 135 .PP 125 .PP 136 Capture a new boot timeline with function trac 126 Capture a new boot timeline with function trace data. 137 .IP 127 .IP 138 \f(CW$ sudo bootgraph -reboot -f\fR 128 \f(CW$ sudo bootgraph -reboot -f\fR 139 .PP 129 .PP 140 Capture a new boot timeline with trace & callg 130 Capture a new boot timeline with trace & callgraph data. Skip callgraphs smaller than 5ms. 141 .IP 131 .IP 142 \f(CW$ sudo bootgraph -reboot -callgraph -minc 132 \f(CW$ sudo bootgraph -reboot -callgraph -mincg 5\fR 143 .PP 133 .PP 144 Capture a new boot timeline with callgraph dat 134 Capture a new boot timeline with callgraph data over custom functions. 145 .IP 135 .IP 146 \f(CW$ sudo bootgraph -reboot -callgraph -func 136 \f(CW$ sudo bootgraph -reboot -callgraph -func "acpi_ps_parse_aml,msleep"\fR 147 .PP 137 .PP 148 Capture a brand new boot timeline with manual 138 Capture a brand new boot timeline with manual reboot. 149 .IP 139 .IP 150 \f(CW$ sudo bootgraph -callgraph -manual\fR 140 \f(CW$ sudo bootgraph -callgraph -manual\fR 151 .IP 141 .IP 152 \f(CW$ vi /etc/default/grub # add the CMD 142 \f(CW$ vi /etc/default/grub # add the CMDLINE string to your kernel params\fR 153 .IP 143 .IP 154 \f(CW$ sudo reboot # reboot the 144 \f(CW$ sudo reboot # reboot the machine\fR 155 .IP 145 .IP 156 \f(CW$ sudo bootgraph -callgraph # re-run the 146 \f(CW$ sudo bootgraph -callgraph # re-run the tool after restart\fR 157 .PP 147 .PP 158 .SS "rebuild timeline from logs" 148 .SS "rebuild timeline from logs" 159 .PP 149 .PP 160 Rebuild the html from a previous run's logs, u 150 Rebuild the html from a previous run's logs, using the same options. 161 .IP 151 .IP 162 \f(CW$ bootgraph -dmesg dmesg.txt -ftrace ftra 152 \f(CW$ bootgraph -dmesg dmesg.txt -ftrace ftrace.txt -callgraph\fR 163 .PP 153 .PP 164 Rebuild the html with different options. 154 Rebuild the html with different options. 165 .IP 155 .IP 166 \f(CW$ bootgraph -dmesg dmesg.txt -ftrace ftra 156 \f(CW$ bootgraph -dmesg dmesg.txt -ftrace ftrace.txt -addlogs\fR 167 157 168 .SH "SEE ALSO" 158 .SH "SEE ALSO" 169 dmesg(1), update-grub(8), crontab(1), reboot(8 159 dmesg(1), update-grub(8), crontab(1), reboot(8) 170 .PP 160 .PP 171 .SH AUTHOR 161 .SH AUTHOR 172 .nf 162 .nf 173 Written by Todd Brandt <todd.e.brandt@linux.int 163 Written by Todd Brandt <todd.e.brandt@linux.intel.com>
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.