1 .TH SLEEPGRAPH 8 1 .TH SLEEPGRAPH 8 2 .SH NAME 2 .SH NAME 3 sleepgraph \- Suspend/Resume timing analysis 3 sleepgraph \- Suspend/Resume timing analysis 4 .SH SYNOPSIS 4 .SH SYNOPSIS 5 .ft B 5 .ft B 6 .B sleepgraph 6 .B sleepgraph 7 .RB [ OPTIONS ] 7 .RB [ OPTIONS ] 8 .RB [ COMMAND ] 8 .RB [ COMMAND ] 9 .SH DESCRIPTION 9 .SH DESCRIPTION 10 \fBsleepgraph \fP is designed to assist kernel 10 \fBsleepgraph \fP is designed to assist kernel and OS developers 11 in optimizing their linux stack's suspend/resu 11 in optimizing their linux stack's suspend/resume time. Using a kernel 12 image built with a few extra options enabled, 12 image built with a few extra options enabled, the tool will execute a 13 suspend and capture dmesg and ftrace data unti 13 suspend and capture dmesg and ftrace data until resume is complete. 14 This data is transformed into a device timelin 14 This data is transformed into a device timeline and an optional 15 callgraph to give a detailed view of which dev 15 callgraph to give a detailed view of which devices/subsystems are 16 taking the most time in suspend/resume. 16 taking the most time in suspend/resume. 17 .PP 17 .PP 18 If no specific command is given, the default b 18 If no specific command is given, the default behavior is to initiate 19 a suspend/resume. 19 a suspend/resume. 20 .PP 20 .PP 21 Generates output files in subdirectory: suspen 21 Generates output files in subdirectory: suspend-yymmdd-HHMMSS 22 html timeline : <hostname>_<mode>.htm 22 html timeline : <hostname>_<mode>.html 23 raw dmesg file : <hostname>_<mode>_dme 23 raw dmesg file : <hostname>_<mode>_dmesg.txt 24 raw ftrace file : <hostname>_<mode>_ftr 24 raw ftrace file : <hostname>_<mode>_ftrace.txt 25 .SH OPTIONS 25 .SH OPTIONS 26 .TP 26 .TP 27 \fB-h\fR 27 \fB-h\fR 28 Print the help text. 28 Print the help text. 29 .TP 29 .TP 30 \fB-v\fR 30 \fB-v\fR 31 Print the current tool version. 31 Print the current tool version. 32 .TP 32 .TP 33 \fB-verbose\fR 33 \fB-verbose\fR 34 Print extra information during execution and a 34 Print extra information during execution and analysis. 35 .TP 35 .TP 36 \fB-config \fIfile\fR 36 \fB-config \fIfile\fR 37 Pull arguments and config options from a file. 37 Pull arguments and config options from a file. 38 .TP 38 .TP 39 \fB-m \fImode\fR 39 \fB-m \fImode\fR 40 Mode to initiate for suspend e.g. standby, fre 40 Mode to initiate for suspend e.g. standby, freeze, mem (default: mem). 41 .TP 41 .TP 42 \fB-o \fIname\fR 42 \fB-o \fIname\fR 43 Overrides the output subdirectory name when ru 43 Overrides the output subdirectory name when running a new test. 44 Use {date}, {time}, {hostname} for current val 44 Use {date}, {time}, {hostname} for current values. 45 .sp 45 .sp 46 e.g. suspend-{hostname}-{date}-{time} 46 e.g. suspend-{hostname}-{date}-{time} 47 .TP 47 .TP 48 \fB-rtcwake \fIt\fR | off 48 \fB-rtcwake \fIt\fR | off 49 Use rtcwake to autoresume after \fIt\fR second 49 Use rtcwake to autoresume after \fIt\fR seconds (default: 15). Set t to "off" to 50 disable rtcwake and require a user keypress to 50 disable rtcwake and require a user keypress to resume. 51 .TP 51 .TP 52 \fB-addlogs\fR 52 \fB-addlogs\fR 53 Add the dmesg and ftrace logs to the html outp 53 Add the dmesg and ftrace logs to the html output. They will be viewable by 54 clicking buttons in the timeline. 54 clicking buttons in the timeline. 55 .TP << 56 \fB-noturbostat\fR << 57 By default, if turbostat is found and the requ << 58 will execute the suspend via turbostat and col << 59 This option disables the use of turbostat. << 60 .TP << 61 \fB-result \fIfile\fR << 62 Export a results table to a text file for pars << 63 .TP << 64 \fB-sync\fR << 65 Sync the filesystems before starting the test. << 66 the sys_sync call which happens in the suspend << 67 .TP << 68 \fB-rs \fIenable/disable\fR << 69 During test, enable/disable runtime suspend fo << 70 by 5 seconds to allow runtime suspend changes << 71 after the test is complete. << 72 .TP << 73 \fB-display \fIon/off/standby/suspend\fR << 74 Switch the display to the requested mode for t << 75 This helps maintain the consistency of test da << 76 .TP << 77 \fB-wifi\fR << 78 If a wifi connection is available, check that << 79 the reconnect time in the total resume time ca << 80 as resume failures. << 81 .TP << 82 \fB-wifitrace\fR << 83 Trace through the wifi reconnect time and incl << 84 55 85 .SS "advanced" 56 .SS "advanced" 86 .TP 57 .TP 87 \fB-gzip\fR << 88 Gzip the trace and dmesg logs to save space. T << 89 logs for processing. << 90 .TP << 91 \fB-cmd \fIstr\fR 58 \fB-cmd \fIstr\fR 92 Run the timeline over a custom suspend command 59 Run the timeline over a custom suspend command, e.g. pm-suspend. By default 93 the tool forces suspend via /sys/power/state s 60 the tool forces suspend via /sys/power/state so this allows testing over 94 an OS's official suspend method. The output fi 61 an OS's official suspend method. The output file will change to 95 hostname_command.html and will autodetect whic 62 hostname_command.html and will autodetect which suspend mode was triggered. 96 .TP 63 .TP 97 \fB-filter \fI"d1,d2,..."\fR 64 \fB-filter \fI"d1,d2,..."\fR 98 Filter out all but these device callbacks. The 65 Filter out all but these device callbacks. These strings can be device names 99 or module names. e.g. 0000:00:02.0, ata5, i915 66 or module names. e.g. 0000:00:02.0, ata5, i915, usb, etc. 100 .TP 67 .TP 101 \fB-mindev \fIt\fR 68 \fB-mindev \fIt\fR 102 Discard all device callbacks shorter than \fIt 69 Discard all device callbacks shorter than \fIt\fR milliseconds (default: 0.0). 103 This reduces the html file size as there can b 70 This reduces the html file size as there can be many tiny callbacks which are barely 104 visible. The value is a float: e.g. 0.001 repr 71 visible. The value is a float: e.g. 0.001 represents 1 us. 105 .TP 72 .TP 106 \fB-proc\fR 73 \fB-proc\fR 107 Add usermode process info into the timeline (d 74 Add usermode process info into the timeline (default: disabled). 108 .TP 75 .TP 109 \fB-dev\fR 76 \fB-dev\fR 110 Add kernel source calls and threads to the tim 77 Add kernel source calls and threads to the timeline (default: disabled). 111 .TP 78 .TP 112 \fB-x2\fR 79 \fB-x2\fR 113 Run two suspend/resumes back to back (default: 80 Run two suspend/resumes back to back (default: disabled). 114 .TP 81 .TP 115 \fB-x2delay \fIt\fR 82 \fB-x2delay \fIt\fR 116 Include \fIt\fR ms delay between multiple test 83 Include \fIt\fR ms delay between multiple test runs (default: 0 ms). 117 .TP 84 .TP 118 \fB-predelay \fIt\fR 85 \fB-predelay \fIt\fR 119 Include \fIt\fR ms delay before 1st suspend (d 86 Include \fIt\fR ms delay before 1st suspend (default: 0 ms). 120 .TP 87 .TP 121 \fB-postdelay \fIt\fR 88 \fB-postdelay \fIt\fR 122 Include \fIt\fR ms delay after last resume (de 89 Include \fIt\fR ms delay after last resume (default: 0 ms). 123 .TP 90 .TP 124 \fB-multi \fIn d\fR 91 \fB-multi \fIn d\fR 125 Used for endurance testing. If \fIn\fR is enti !! 92 Execute \fIn\fR consecutive tests at \fId\fR seconds intervals. The outputs will 126 Execute \fIn\fR consecutive tests at \fId\fR s !! 93 be created in a new subdirectory with a summary page: suspend-xN-{date}-{time}. 127 If \fIn\fR is an integer followed by a "d", "h << 128 Execute tests continuously over \fIn\fR days, << 129 The outputs will be created in a new subdirect << 130 for duration: suspend-{date}-{time}-Nm. When t << 131 command is called automatically to create summ << 132 use \fI-skiphtml\fR). \fI-skiphtml\fR will spe << 133 or summary html files. You can then run the to << 134 and \fI-genhtml\fR to create the timelines. << 135 .TP << 136 \fB-maxfail \fIn\fR << 137 Abort a -multi run after \fIn\fR consecutive f << 138 .TP << 139 \fB-skiphtml\fR << 140 Run the test and capture the trace logs, but s << 141 You can generate the html timelines later with << 142 by running \fI-summary\fR and \fI-genhtml\fR. << 143 94 144 .SS "ftrace debug" 95 .SS "ftrace debug" 145 .TP 96 .TP 146 \fB-f\fR 97 \fB-f\fR 147 Use ftrace to create device callgraphs (defaul 98 Use ftrace to create device callgraphs (default: disabled). This can produce 148 very large outputs, i.e. 10MB - 100MB. 99 very large outputs, i.e. 10MB - 100MB. 149 .TP 100 .TP 150 \fB-ftop\fR << 151 Use ftrace on the top level call: "suspend_dev << 152 This option implies -f and creates a single ca << 153 .TP << 154 \fB-maxdepth \fIlevel\fR 101 \fB-maxdepth \fIlevel\fR 155 limit the callgraph trace depth to \fIlevel\fR 102 limit the callgraph trace depth to \fIlevel\fR (default: 0=all). This is 156 the best way to limit the output size when usi 103 the best way to limit the output size when using callgraphs via -f. 157 .TP 104 .TP 158 \fB-expandcg\fR 105 \fB-expandcg\fR 159 pre-expand the callgraph data in the html outp 106 pre-expand the callgraph data in the html output (default: disabled) 160 .TP 107 .TP 161 \fB-fadd \fIfile\fR 108 \fB-fadd \fIfile\fR 162 Add functions to be graphed in the timeline fr 109 Add functions to be graphed in the timeline from a list in a text file 163 .TP 110 .TP 164 \fB-mincg \fIt\fR 111 \fB-mincg \fIt\fR 165 Discard all callgraphs shorter than \fIt\fR mi 112 Discard all callgraphs shorter than \fIt\fR milliseconds (default: 0.0). 166 This reduces the html file size as there can b 113 This reduces the html file size as there can be many tiny callgraphs 167 which are barely visible in the timeline. 114 which are barely visible in the timeline. 168 The value is a float: e.g. 0.001 represents 1 115 The value is a float: e.g. 0.001 represents 1 us. 169 .TP 116 .TP 170 \fB-cgfilter \fI"func1,func2,..."\fR << 171 Reduce callgraph output in the timeline by lim << 172 argument can be a single device name or a comm << 173 (default: none) << 174 .TP << 175 \fB-cgskip \fIfile\fR << 176 Reduce callgraph timeline size by skipping ove << 177 in the trace, e.g. printk or console_unlock. T << 178 in this file will show up as empty leaves in t << 179 times displayed. cgskip.txt is used automatica << 180 use "off" to disable completely (default: cgsk << 181 .TP << 182 \fB-cgphase \fIp\fR 117 \fB-cgphase \fIp\fR 183 Only show callgraph data for phase \fIp\fR (e. 118 Only show callgraph data for phase \fIp\fR (e.g. suspend_late). 184 .TP 119 .TP 185 \fB-cgtest \fIn\fR 120 \fB-cgtest \fIn\fR 186 In an x2 run, only show callgraph data for tes 121 In an x2 run, only show callgraph data for test \fIn\fR (e.g. 0 or 1). 187 .TP 122 .TP 188 \fB-timeprec \fIn\fR 123 \fB-timeprec \fIn\fR 189 Number of significant digits in timestamps (0: 124 Number of significant digits in timestamps (0:S, [3:ms], 6:us). 190 .TP << 191 \fB-bufsize \fIN\fR << 192 Set trace buffer size to N kilo-bytes (default << 193 125 194 .SH COMMANDS 126 .SH COMMANDS 195 .TP 127 .TP 196 \fB-summary \fIindir\fR 128 \fB-summary \fIindir\fR 197 Create a set of summary pages for all tests in !! 129 Create a summary page of all tests in \fIindir\fR. Creates summary.html 198 Creates summary.html, summary-issues.html, and !! 130 in the current folder. The output page is a table of tests with 199 summary.html is a table of tests with relevant !! 131 suspend and resume values sorted by suspend mode, host, and kernel. 200 and links to the test html files. It identifie !! 132 Includes test averages by mode and links to the test html files. 201 suspend and resume times for you with highligh << 202 summary-issues.html is a list of kernel issues << 203 summary-devices.html is a list of devices and << 204 << 205 Use \fI-genhtml\fR to regenerate any tests wit << 206 .TP << 207 \fB-genhtml\fR << 208 Used with \fI-summary\fR to regenerate any mis << 209 dmesg and ftrace logs. This will require a sig << 210 are thousands of tests. << 211 .TP 133 .TP 212 \fB-modes\fR 134 \fB-modes\fR 213 List available suspend modes. 135 List available suspend modes. 214 .TP 136 .TP 215 \fB-status\fR 137 \fB-status\fR 216 Test to see if the system is able to run this 138 Test to see if the system is able to run this tool. Use this along 217 with any options you intend to use to see if t 139 with any options you intend to use to see if they will work. 218 .TP 140 .TP 219 \fB-fpdt\fR 141 \fB-fpdt\fR 220 Print out the contents of the ACPI Firmware Pe 142 Print out the contents of the ACPI Firmware Performance Data Table. 221 .TP 143 .TP 222 \fB-wificheck\fR << 223 Print out wifi status and connection details. << 224 .TP << 225 \fB-xon/-xoff/-xstandby/-xsuspend\fR << 226 Test xset by attempting to switch the display << 227 is the same command which will be issued by \f << 228 .TP << 229 \fB-xstat\fR << 230 Get the current DPMS display mode. << 231 .TP << 232 \fB-sysinfo\fR 144 \fB-sysinfo\fR 233 Print out system info extracted from BIOS. Rea 145 Print out system info extracted from BIOS. Reads /dev/mem directly instead of going through dmidecode. 234 .TP 146 .TP 235 \fB-devinfo\fR !! 147 \fB-usbtopo\fR 236 Print out the pm settings of all devices which !! 148 Print out the current USB topology with power info. 237 .TP 149 .TP 238 \fB-cmdinfo\fR !! 150 \fB-usbauto\fR 239 Print out all the platform data collected from !! 151 Enable autosuspend for all connected USB devices. 240 .TP 152 .TP 241 \fB-flist\fR 153 \fB-flist\fR 242 Print the list of ftrace functions currently b 154 Print the list of ftrace functions currently being captured. Functions 243 that are not available as symbols in the curre 155 that are not available as symbols in the current kernel are shown in red. 244 By default, the tool traces a list of importan 156 By default, the tool traces a list of important suspend/resume functions 245 in order to better fill out the timeline. If t 157 in order to better fill out the timeline. If the user has added their own 246 with -fadd they will also be checked. 158 with -fadd they will also be checked. 247 .TP 159 .TP 248 \fB-flistall\fR 160 \fB-flistall\fR 249 Print all ftrace functions capable of being ca 161 Print all ftrace functions capable of being captured. These are all the 250 possible values you can add to trace via the - 162 possible values you can add to trace via the -fadd argument. 251 .SS "rebuild" 163 .SS "rebuild" 252 .TP 164 .TP 253 \fB-ftrace \fIfile\fR 165 \fB-ftrace \fIfile\fR 254 Create HTML output from an existing ftrace fil 166 Create HTML output from an existing ftrace file. 255 .TP 167 .TP 256 \fB-dmesg \fIfile\fR 168 \fB-dmesg \fIfile\fR 257 Create HTML output from an existing dmesg file 169 Create HTML output from an existing dmesg file. 258 170 259 .SH EXAMPLES 171 .SH EXAMPLES 260 .SS "simple commands" 172 .SS "simple commands" 261 Check which suspend modes are currently suppor 173 Check which suspend modes are currently supported. 262 .IP 174 .IP 263 \f(CW$ sleepgraph -modes\fR 175 \f(CW$ sleepgraph -modes\fR 264 .PP 176 .PP 265 Read the Firmware Performance Data Table (FPDT 177 Read the Firmware Performance Data Table (FPDT) 266 .IP 178 .IP 267 \f(CW$ sudo sleepgraph -fpdt\fR 179 \f(CW$ sudo sleepgraph -fpdt\fR 268 .PP 180 .PP 269 Print out the current USB power topology 181 Print out the current USB power topology 270 .IP 182 .IP 271 \f(CW$ sleepgraph -usbtopo 183 \f(CW$ sleepgraph -usbtopo 272 .PP 184 .PP 273 Verify that you can run a command with a set o 185 Verify that you can run a command with a set of arguments 274 .IP 186 .IP 275 \f(CW$ sudo sleepgraph -f -rtcwake 30 -status 187 \f(CW$ sudo sleepgraph -f -rtcwake 30 -status 276 .PP 188 .PP 277 Generate a summary of all timelines in a parti 189 Generate a summary of all timelines in a particular folder. 278 .IP 190 .IP 279 \f(CW$ sleepgraph -summary ~/workspace/myresul 191 \f(CW$ sleepgraph -summary ~/workspace/myresults/\fR 280 .PP 192 .PP 281 193 282 .SS "capturing basic timelines" 194 .SS "capturing basic timelines" 283 Execute a mem suspend with a 15 second wakeup. 195 Execute a mem suspend with a 15 second wakeup. Include the logs in the html. 284 .IP 196 .IP 285 \f(CW$ sudo sleepgraph -rtcwake 15 -addlogs\fR 197 \f(CW$ sudo sleepgraph -rtcwake 15 -addlogs\fR 286 .PP 198 .PP 287 Execute a standby with a 15 second wakeup. Cha 199 Execute a standby with a 15 second wakeup. Change the output folder name. 288 .IP 200 .IP 289 \f(CW$ sudo sleepgraph -m standby -rtcwake 15 !! 201 \f(CW$ sudo sleepgraph -m standby -rtcwake 15 -o "standby-{hostname}-{date}-{time}"\fR 290 .PP 202 .PP 291 Execute a freeze with no wakeup (require keypr 203 Execute a freeze with no wakeup (require keypress). Change output folder name. 292 .IP 204 .IP 293 \f(CW$ sudo sleepgraph -m freeze -rtcwake off 205 \f(CW$ sudo sleepgraph -m freeze -rtcwake off -o "freeze-{hostname}-{date}-{time}"\fR 294 .PP 206 .PP 295 207 296 .SS "capturing advanced timelines" 208 .SS "capturing advanced timelines" 297 Execute a suspend & include dev mode source ca 209 Execute a suspend & include dev mode source calls, limit callbacks to 5ms or larger. 298 .IP 210 .IP 299 \f(CW$ sudo sleepgraph -m mem -rtcwake 15 -dev 211 \f(CW$ sudo sleepgraph -m mem -rtcwake 15 -dev -mindev 5\fR 300 .PP 212 .PP 301 Run two suspends back to back, include a 500ms 213 Run two suspends back to back, include a 500ms delay before, after, and in between runs. 302 .IP 214 .IP 303 \f(CW$ sudo sleepgraph -m mem -rtcwake 15 -x2 215 \f(CW$ sudo sleepgraph -m mem -rtcwake 15 -x2 -predelay 500 -x2delay 500 -postdelay 500\fR 304 .PP 216 .PP 305 Execute a suspend using a custom command. << 306 .IP << 307 \f(CW$ sudo sleepgraph -cmd "echo mem > /sys/p << 308 .PP << 309 << 310 .SS "endurance testing using -multi" << 311 .PP << 312 Do a batch run of 10 freezes with 30 seconds d 217 Do a batch run of 10 freezes with 30 seconds delay between runs. 313 .IP 218 .IP 314 \f(CW$ sudo sleepgraph -m freeze -rtcwake 15 - 219 \f(CW$ sudo sleepgraph -m freeze -rtcwake 15 -multi 10 30\fR 315 .PP 220 .PP 316 Do a batch run of freezes for 24 hours. !! 221 Execute a suspend using a custom command. 317 .IP 222 .IP 318 \f(CW$ sudo sleepgraph -m freeze -rtcwake 15 - !! 223 \f(CW$ sudo sleepgraph -cmd "echo mem > /sys/power/state" -rtcwake 15\fR >> 224 .PP 319 225 320 .SS "adding callgraph data" 226 .SS "adding callgraph data" 321 Add device callgraphs. Limit the trace depth a 227 Add device callgraphs. Limit the trace depth and only show callgraphs 10ms or larger. 322 .IP 228 .IP 323 \f(CW$ sudo sleepgraph -m mem -rtcwake 15 -f - 229 \f(CW$ sudo sleepgraph -m mem -rtcwake 15 -f -maxdepth 5 -mincg 10\fR 324 .PP 230 .PP 325 Capture a full callgraph across all suspend, t 231 Capture a full callgraph across all suspend, then filter the html by a single phase. 326 .IP 232 .IP 327 \f(CW$ sudo sleepgraph -m mem -rtcwake 15 -f\f 233 \f(CW$ sudo sleepgraph -m mem -rtcwake 15 -f\fR 328 .IP 234 .IP 329 \f(CW$ sleepgraph -dmesg host_mem_dmesg.txt -f 235 \f(CW$ sleepgraph -dmesg host_mem_dmesg.txt -ftrace host_mem_ftrace.txt -f -cgphase resume 330 .PP 236 .PP 331 237 332 .SS "rebuild timeline from logs" 238 .SS "rebuild timeline from logs" 333 .PP 239 .PP 334 Rebuild the html from a previous run's logs, u 240 Rebuild the html from a previous run's logs, using the same options. 335 .IP 241 .IP 336 \f(CW$ sleepgraph -dmesg dmesg.txt -ftrace ftr 242 \f(CW$ sleepgraph -dmesg dmesg.txt -ftrace ftrace.txt -callgraph\fR 337 .PP 243 .PP 338 Rebuild the html with different options. 244 Rebuild the html with different options. 339 .IP 245 .IP 340 \f(CW$ sleepgraph -dmesg dmesg.txt -ftrace ftr 246 \f(CW$ sleepgraph -dmesg dmesg.txt -ftrace ftrace.txt -addlogs -srgap\fR 341 247 342 .SH "SEE ALSO" 248 .SH "SEE ALSO" 343 dmesg(1) 249 dmesg(1) 344 .PP 250 .PP 345 .SH AUTHOR 251 .SH AUTHOR 346 .nf 252 .nf 347 Written by Todd Brandt <todd.e.brandt@linux.int 253 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.