Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Add README and update pm-graph and sleepgraph docs

Config/man page/README files:
- include README in the pm-graph folder
- add more detail to the example config to describe more options
- update the sleepgraph man page to document the new arguments

Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
[ rjw: Subject ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

authored by

Todd Brandt and committed by
Rafael J. Wysocki
d5a5e4ec 45dd0a42

+592 -2
+552
tools/power/pm-graph/README
··· 1 + p m - g r a p h 2 + 3 + pm-graph: suspend/resume/boot timing analysis tools 4 + Version: 5.4 5 + Author: Todd Brandt <todd.e.brandt@intel.com> 6 + Home Page: https://01.org/pm-graph 7 + 8 + Report bugs/issues at bugzilla.kernel.org Tools/pm-graph 9 + - https://bugzilla.kernel.org/buglist.cgi?component=pm-graph&product=Tools 10 + 11 + Full documentation available online & in man pages 12 + - Getting Started: 13 + https://01.org/pm-graph/documentation/getting-started 14 + 15 + - Config File Format: 16 + https://01.org/pm-graph/documentation/3-config-file-format 17 + 18 + - upstream version in git: 19 + https://github.com/intel/pm-graph/ 20 + 21 + Table of Contents 22 + - Overview 23 + - Setup 24 + - Usage 25 + - Basic Usage 26 + - Dev Mode Usage 27 + - Proc Mode Usage 28 + - Configuration Files 29 + - Usage Examples 30 + - Config File Options 31 + - Custom Timeline Entries 32 + - Adding/Editing Timeline Functions 33 + - Adding/Editing Dev Timeline Source Functions 34 + - Verifying your Custom Functions 35 + - Testing on consumer linux Operating Systems 36 + - Android 37 + 38 + ------------------------------------------------------------------ 39 + | OVERVIEW | 40 + ------------------------------------------------------------------ 41 + 42 + This tool suite is designed to assist kernel and OS developers in optimizing 43 + their linux stack's suspend/resume & boot time. Using a kernel image built 44 + with a few extra options enabled, the tools will execute a suspend or boot, 45 + and will capture dmesg and ftrace data. This data is transformed into a set of 46 + timelines and a callgraph to give a quick and detailed view of which devices 47 + and kernel processes are taking the most time in suspend/resume & boot. 48 + 49 + ------------------------------------------------------------------ 50 + | SETUP | 51 + ------------------------------------------------------------------ 52 + 53 + These packages are required to execute the scripts 54 + - python 55 + - python-requests 56 + 57 + Ubuntu: 58 + sudo apt-get install python python-requests 59 + 60 + Fedora: 61 + sudo dnf install python python-requests 62 + 63 + The tools can most easily be installed via git clone and make install 64 + 65 + $> git clone http://github.com/intel/pm-graph.git 66 + $> cd pm-graph 67 + $> sudo make install 68 + $> man sleepgraph ; man bootgraph 69 + 70 + Setup involves some minor kernel configuration 71 + 72 + The following kernel build options are required for all kernels: 73 + CONFIG_DEVMEM=y 74 + CONFIG_PM_DEBUG=y 75 + CONFIG_PM_SLEEP_DEBUG=y 76 + CONFIG_FTRACE=y 77 + CONFIG_FUNCTION_TRACER=y 78 + CONFIG_FUNCTION_GRAPH_TRACER=y 79 + CONFIG_KPROBES=y 80 + CONFIG_KPROBES_ON_FTRACE=y 81 + 82 + In kernel 3.15.0, two patches were upstreamed which enable the 83 + v3.0 behavior. These patches allow the tool to read all the 84 + data from trace events instead of from dmesg. You can enable 85 + this behavior on earlier kernels with these patches: 86 + 87 + (kernel/pre-3.15/enable_trace_events_suspend_resume.patch) 88 + (kernel/pre-3.15/enable_trace_events_device_pm_callback.patch) 89 + 90 + If you're using a kernel older than 3.15.0, the following 91 + additional kernel parameters are required: 92 + (e.g. in file /etc/default/grub) 93 + GRUB_CMDLINE_LINUX_DEFAULT="... initcall_debug log_buf_len=32M ..." 94 + 95 + If you're using a kernel older than 3.11-rc2, the following simple 96 + patch must be applied to enable ftrace data: 97 + in file: kernel/power/suspend.c 98 + in function: int suspend_devices_and_enter(suspend_state_t state) 99 + remove call to "ftrace_stop();" 100 + remove call to "ftrace_start();" 101 + 102 + There is a patch which does this for kernel v3.8.0: 103 + (kernel/pre-3.11-rc2/enable_ftrace_in_suspendresume.patch) 104 + 105 + 106 + 107 + ------------------------------------------------------------------ 108 + | USAGE | 109 + ------------------------------------------------------------------ 110 + 111 + Basic Usage 112 + ___________ 113 + 114 + 1) First configure a kernel using the instructions from the previous sections. 115 + Then build, install, and boot with it. 116 + 2) Open up a terminal window and execute the mode list command: 117 + 118 + %> sudo ./sleepgraph.py -modes 119 + ['freeze', 'mem', 'disk'] 120 + 121 + Execute a test using one of the available power modes, e.g. mem (S3): 122 + 123 + %> sudo ./sleepgraph.py -m mem -rtcwake 15 124 + 125 + or with a config file 126 + 127 + %> sudo ./sleepgraph.py -config config/suspend.cfg 128 + 129 + When the system comes back you'll see the script finishing up and 130 + creating the output files in the test subdir. It generates output 131 + files in subdirectory: suspend-mmddyy-HHMMSS. The ftrace file can 132 + be used to regenerate the html timeline with different options 133 + 134 + HTML output: <hostname>_<mode>.html 135 + raw dmesg output: <hostname>_<mode>_dmesg.txt 136 + raw ftrace output: <hostname>_<mode>_ftrace.txt 137 + 138 + View the html in firefox or chrome. 139 + 140 + 141 + Dev Mode Usage 142 + ______________ 143 + 144 + Developer mode adds information on low level source calls to the timeline. 145 + The tool sets kprobes on all delay and mutex calls to see which devices 146 + are waiting for something and when. It also sets a suite of kprobes on 147 + subsystem dependent calls to better fill out the timeline. 148 + 149 + The tool will also expose kernel threads that don't normally show up in the 150 + timeline. This is useful in discovering dependent threads to get a better 151 + idea of what each device is waiting for. For instance, the scsi_eh thread, 152 + a.k.a. scsi resume error handler, is what each SATA disk device waits for 153 + before it can continue resume. 154 + 155 + The timeline will be much larger if run with dev mode, so it can be useful 156 + to set the -mindev option to clip out any device blocks that are too small 157 + to see easily. The following command will give a nice dev mode run: 158 + 159 + %> sudo ./sleepgraph.py -m mem -rtcwake 15 -mindev 1 -dev 160 + 161 + or with a config file 162 + 163 + %> sudo ./sleepgraph.py -config config/suspend-dev.cfg 164 + 165 + 166 + Proc Mode Usage 167 + _______________ 168 + 169 + Proc mode adds user process info to the timeline. This is done in a manner 170 + similar to the bootchart utility, which graphs init processes and their 171 + execution as the system boots. This tool option does the same thing but for 172 + the period before and after suspend/resume. 173 + 174 + In order to see any process info, there needs to be some delay before or 175 + after resume since processes are frozen in suspend_prepare and thawed in 176 + resume_complete. The predelay and postdelay args allow you to do this. It 177 + can also be useful to run in x2 mode with an x2 delay, this way you can 178 + see process activity before and after resume, and in between two 179 + successive suspend/resumes. 180 + 181 + The command can be run like this: 182 + 183 + %> sudo ./sleepgraph.py -m mem -rtcwake 15 -x2 -x2delay 1000 -predelay 1000 -postdelay 1000 -proc 184 + 185 + or with a config file 186 + 187 + %> sudo ./sleepgraph.py -config config/suspend-proc.cfg 188 + 189 + 190 + ------------------------------------------------------------------ 191 + | CONFIGURATION FILES | 192 + ------------------------------------------------------------------ 193 + 194 + Since 4.0 we've moved to using config files in lieu of command line options. 195 + The config folder contains a collection of typical use cases. 196 + There are corresponding configs for other power modes: 197 + 198 + Simple suspend/resume with basic timeline (mem/freeze/standby) 199 + config/suspend.cfg 200 + config/freeze.cfg 201 + config/standby.cfg 202 + 203 + Dev mode suspend/resume with dev timeline (mem/freeze/standby) 204 + config/suspend-dev.cfg 205 + config/freeze-dev.cfg 206 + config/standby-dev.cfg 207 + 208 + Simple suspend/resume with timeline and callgraph (mem/freeze/standby) 209 + config/suspend-callgraph.cfg 210 + config/freeze-callgraph.cfg 211 + config/standby-callgraph.cfg 212 + 213 + Sample proc mode x2 run using mem suspend 214 + config/suspend-x2-proc.cfg 215 + 216 + Sample for editing timeline funcs (moves internal functions into config) 217 + config/custom-timeline-functions.cfg 218 + 219 + Sample debug config for serio subsystem 220 + config/debug-serio-suspend.cfg 221 + 222 + 223 + Usage Examples 224 + ______________ 225 + 226 + Run a simple mem suspend: 227 + %> sudo ./sleepgraph.py -config config/suspend.cfg 228 + 229 + Run a mem suspend with callgraph data: 230 + %> sudo ./sleepgraph.py -config config/suspend-callgraph.cfg 231 + 232 + Run a mem suspend with dev mode detail: 233 + %> sudo ./sleepgraph.py -config config/suspend-dev.cfg 234 + 235 + 236 + Config File Options 237 + ___________________ 238 + 239 + [Settings] 240 + 241 + # Verbosity: print verbose messages (def: false) 242 + verbose: false 243 + 244 + # Suspend Mode: e.g. standby, mem, freeze, disk (def: mem) 245 + mode: mem 246 + 247 + # Output Directory Format: {hostname}, {date}, {time} give current values 248 + output-dir: suspend-{hostname}-{date}-{time} 249 + 250 + # Automatic Wakeup: use rtcwake to wakeup after X seconds (def: infinity) 251 + rtcwake: 15 252 + 253 + # Add Logs: add the dmesg and ftrace log to the html output (def: false) 254 + addlogs: false 255 + 256 + # Sus/Res Gap: insert a gap between sus & res in the timeline (def: false) 257 + srgap: false 258 + 259 + # Custom Command: Command to execute in lieu of suspend (def: "") 260 + command: echo mem > /sys/power/state 261 + 262 + # Proc mode: graph user processes and cpu usage in the timeline (def: false) 263 + proc: false 264 + 265 + # Dev mode: graph source functions in the timeline (def: false) 266 + dev: false 267 + 268 + # Suspend/Resume x2: run 2 suspend/resumes back to back (def: false) 269 + x2: false 270 + 271 + # x2 Suspend Delay: time delay between the two test runs in ms (def: 0 ms) 272 + x2delay: 0 273 + 274 + # Pre Suspend Delay: nclude an N ms delay before (1st) suspend (def: 0 ms) 275 + predelay: 0 276 + 277 + # Post Resume Delay: include an N ms delay after (last) resume (def: 0 ms) 278 + postdelay: 0 279 + 280 + # Min Device Length: graph only dev callbacks longer than min (def: 0.001 ms) 281 + mindev: 0.001 282 + 283 + # Callgraph: gather ftrace callgraph data on all timeline events (def: false) 284 + callgraph: false 285 + 286 + # Expand Callgraph: pre-expand the callgraph treeviews in html (def: false) 287 + expandcg: false 288 + 289 + # Min Callgraph Length: show callgraphs only if longer than min (def: 1 ms) 290 + mincg: 1 291 + 292 + # Timestamp Precision: number of sig digits in timestamps (0:S, [3:ms], 6:us) 293 + timeprec: 3 294 + 295 + # Device Filter: show only devs whose name/driver includes one of these strings 296 + devicefilter: _cpu_up,_cpu_down,i915,usb 297 + 298 + # Override default timeline entries: 299 + # Do not use the internal default functions for timeline entries (def: false) 300 + # Set this to true if you intend to only use the ones defined in the config 301 + override-timeline-functions: true 302 + 303 + # Override default dev timeline entries: 304 + # Do not use the internal default functions for dev timeline entries (def: false) 305 + # Set this to true if you intend to only use the ones defined in the config 306 + override-dev-timeline-functions: true 307 + 308 + # Call Loop Max Gap (dev mode only) 309 + # merge loops of the same call if each is less than maxgap apart (def: 100us) 310 + callloop-maxgap: 0.0001 311 + 312 + # Call Loop Max Length (dev mode only) 313 + # merge loops of the same call if each is less than maxlen in length (def: 5ms) 314 + callloop-maxlen: 0.005 315 + 316 + ------------------------------------------------------------------ 317 + | CUSTOM TIMELINE ENTRIES | 318 + ------------------------------------------------------------------ 319 + 320 + Adding or Editing Timeline Functions 321 + ____________________________________ 322 + 323 + The tool uses an array of function names to fill out empty spaces in the 324 + timeline where device callbacks don't appear. For instance, in suspend_prepare 325 + the tool adds the sys_sync and freeze_processes calls as virtual device blocks 326 + in the timeline to show you where the time is going. These calls should fill 327 + the timeline with contiguous data so that most kernel execution is covered. 328 + 329 + It is possible to add new function calls to the timeline by adding them to 330 + the config. It's also possible to copy the internal timeline functions into 331 + the config so that you can override and edit them. Place them in the 332 + timeline_functions_ARCH section with the name of your architecture appended. 333 + i.e. for x86_64: [timeline_functions_x86_64] 334 + 335 + Use the override-timeline-functions option if you only want to use your 336 + custom calls, or leave it false to append them to the internal ones. 337 + 338 + This section includes a list of functions (set using kprobes) which use both 339 + symbol data and function arg data. The args are pulled directly from the 340 + stack using this architecture's registers and stack formatting. Each entry 341 + can include up to four pieces of info: The function name, a format string, 342 + an argument list, and a color. But only a function name is required. 343 + 344 + For a full example config, see config/custom-timeline-functions.cfg. It pulls 345 + all the internal timeline functions into the config and allows you to edit 346 + them. 347 + 348 + Entry format: 349 + 350 + function: format{fn_arg1}_{fn_arg2} fn_arg1 fn_arg2 ... [color=purple] 351 + 352 + Required Arguments: 353 + 354 + function: The symbol name for the function you want probed, this is the 355 + minimum required for an entry, it will show up as the function 356 + name with no arguments. 357 + 358 + example: _cpu_up: 359 + 360 + Optional Arguments: 361 + 362 + format: The format to display the data on the timeline in. Use braces to 363 + enclose the arg names. 364 + 365 + example: CPU_ON[{cpu}] 366 + 367 + color: The color of the entry block in the timeline. The default color is 368 + transparent, so the entry shares the phase color. The color is an 369 + html color string, either a word, or an RGB. 370 + 371 + example: [color=#CC00CC] 372 + 373 + arglist: A list of arguments from registers/stack addresses. See URL: 374 + https://www.kernel.org/doc/Documentation/trace/kprobetrace.txt 375 + 376 + example: cpu=%di:s32 377 + 378 + Here is a full example entry. It displays cpu resume calls in the timeline 379 + in orange. They will appear as CPU_ON[0], CPU_ON[1], etc. 380 + 381 + [timeline_functions_x86_64] 382 + _cpu_up: CPU_ON[{cpu}] cpu=%di:s32 [color=orange] 383 + 384 + 385 + Adding or Editing Dev Mode Timeline Source Functions 386 + ____________________________________________________ 387 + 388 + In dev mode, the tool uses an array of function names to monitor source 389 + execution within the timeline entries. 390 + 391 + The function calls are displayed inside the main device/call blocks in the 392 + timeline. However, if a function call is not within a main timeline event, 393 + it will spawn an entirely new event named after the caller's kernel thread. 394 + These asynchronous kernel threads will populate in a separate section 395 + beneath the main device/call section. 396 + 397 + The tool has a set of hard coded calls which focus on the most common use 398 + cases: msleep, udelay, schedule_timeout, mutex_lock_slowpath, etc. These are 399 + the functions that add a hardcoded time delay to the suspend/resume path. 400 + The tool also includes some common functions native to important 401 + subsystems: ata, i915, and ACPI, etc. 402 + 403 + It is possible to add new function calls to the dev timeline by adding them 404 + to the config. It's also possible to copy the internal dev timeline 405 + functions into the config so that you can override and edit them. Place them 406 + in the dev_timeline_functions_ARCH section with the name of your architecture 407 + appended. i.e. for x86_64: [dev_timeline_functions_x86_64] 408 + 409 + Use the override-dev-timeline-functions option if you only want to use your 410 + custom calls, or leave it false to append them to the internal ones. 411 + 412 + The format is the same as the timeline_functions_x86_64 section. It's a 413 + list of functions (set using kprobes) which use both symbol data and function 414 + arg data. The args are pulled directly from the stack using this 415 + architecture's registers and stack formatting. Each entry can include up 416 + to four pieces of info: The function name, a format string, an argument list, 417 + and a color. But only the function name is required. 418 + 419 + For a full example config, see config/custom-timeline-functions.cfg. It pulls 420 + all the internal dev timeline functions into the config and allows you to edit 421 + them. 422 + 423 + Here is a full example entry. It displays the ATA port reset calls as 424 + ataN_port_reset in the timeline. This is where most of the SATA disk resume 425 + time goes, so it can be helpful to see the low level call. 426 + 427 + [dev_timeline_functions_x86_64] 428 + ata_eh_recover: ata{port}_port_reset port=+36(%di):s32 [color=#CC00CC] 429 + 430 + 431 + Verifying your custom functions 432 + _______________________________ 433 + 434 + Once you have a set of functions (kprobes) defined, it can be useful to 435 + perform a quick check to see if you formatted them correctly and if the system 436 + actually supports them. To do this, run the tool with your config file 437 + and the -status option. The tool will go through all the kprobes (both 438 + custom and internal if you haven't overridden them) and actually attempts 439 + to set them in ftrace. It will then print out success or fail for you. 440 + 441 + Note that kprobes which don't actually exist in the kernel won't stop the 442 + tool, they just wont show up. 443 + 444 + For example: 445 + 446 + sudo ./sleepgraph.py -config config/custom-timeline-functions.cfg -status 447 + Checking this system (myhostname)... 448 + have root access: YES 449 + is sysfs mounted: YES 450 + is "mem" a valid power mode: YES 451 + is ftrace supported: YES 452 + are kprobes supported: YES 453 + timeline data source: FTRACE (all trace events found) 454 + is rtcwake supported: YES 455 + verifying timeline kprobes work: 456 + _cpu_down: YES 457 + _cpu_up: YES 458 + acpi_pm_finish: YES 459 + acpi_pm_prepare: YES 460 + freeze_kernel_threads: YES 461 + freeze_processes: YES 462 + sys_sync: YES 463 + thaw_processes: YES 464 + verifying dev kprobes work: 465 + __const_udelay: YES 466 + __mutex_lock_slowpath: YES 467 + acpi_os_stall: YES 468 + acpi_ps_parse_aml: YES 469 + intel_opregion_init: NO 470 + intel_opregion_register: NO 471 + intel_opregion_setup: NO 472 + msleep: YES 473 + schedule_timeout: YES 474 + schedule_timeout_uninterruptible: YES 475 + usleep_range: YES 476 + 477 + 478 + ------------------------------------------------------------------ 479 + | TESTING ON CONSUMER LINUX OPERATING SYSTEMS | 480 + ------------------------------------------------------------------ 481 + 482 + Android 483 + _______ 484 + 485 + The easiest way to execute on an android device is to run the android.sh 486 + script on the device, then pull the ftrace log back to the host and run 487 + sleepgraph.py on it. 488 + 489 + Here are the steps: 490 + 491 + [download and install the tool on the device] 492 + 493 + host%> wget https://raw.githubusercontent.com/intel/pm-graph/master/tools/android.sh 494 + host%> adb connect 192.168.1.6 495 + host%> adb root 496 + # push the script to a writeable location 497 + host%> adb push android.sh /sdcard/ 498 + 499 + [check whether the tool will run on your device] 500 + 501 + host%> adb shell 502 + dev%> cd /sdcard 503 + dev%> sh android.sh status 504 + host : asus_t100 505 + kernel : 3.14.0-i386-dirty 506 + modes : freeze mem 507 + rtcwake : supported 508 + ftrace : supported 509 + trace events { 510 + suspend_resume: found 511 + device_pm_callback_end: found 512 + device_pm_callback_start: found 513 + } 514 + # the above is what you see on a system that's properly patched 515 + 516 + [execute the suspend] 517 + 518 + # NOTE: The suspend will only work if the screen isn't timed out, 519 + # so you have to press some keys first to wake it up b4 suspend) 520 + dev%> sh android.sh suspend mem 521 + ------------------------------------ 522 + Suspend/Resume timing test initiated 523 + ------------------------------------ 524 + hostname : asus_t100 525 + kernel : 3.14.0-i386-dirty 526 + mode : mem 527 + ftrace out : /mnt/shell/emulated/0/ftrace.txt 528 + dmesg out : /mnt/shell/emulated/0/dmesg.txt 529 + log file : /mnt/shell/emulated/0/log.txt 530 + ------------------------------------ 531 + INITIALIZING FTRACE........DONE 532 + STARTING FTRACE 533 + SUSPEND START @ 21:24:02 (rtcwake in 10 seconds) 534 + <adb connection will now terminate> 535 + 536 + [retrieve the data from the device] 537 + 538 + # I find that you have to actually kill the adb process and 539 + # reconnect sometimes in order for the connection to work post-suspend 540 + host%> adb connect 192.168.1.6 541 + # (required) get the ftrace data, this is the most important piece 542 + host%> adb pull /sdcard/ftrace.txt 543 + # (optional) get the dmesg data, this is for debugging 544 + host%> adb pull /sdcard/dmesg.txt 545 + # (optional) get the log, which just lists some test times for comparison 546 + host%> adb pull /sdcard/log.txt 547 + 548 + [create an output html file using sleepgraph.py] 549 + 550 + host%> sleepgraph.py -ftrace ftrace.txt 551 + 552 + You should now have an output.html with the android data, enjoy!
+26
tools/power/pm-graph/config/example.cfg
··· 98 98 # graph only devices longer than min in the timeline (default: 0.001 ms) 99 99 mindev: 0.001 100 100 101 + # Call Loop Max Gap (dev mode only) 102 + # merge loops of the same call if each is less than maxgap apart (def: 100us) 103 + callloop-maxgap: 0.0001 104 + 105 + # Call Loop Max Length (dev mode only) 106 + # merge loops of the same call if each is less than maxlen in length (def: 5ms) 107 + callloop-maxlen: 0.005 108 + 109 + # Override default timeline entries: 110 + # Do not use the internal default functions for timeline entries (def: false) 111 + # Set this to true if you intend to only use the ones defined in the config 112 + override-timeline-functions: true 113 + 114 + # Override default dev timeline entries: 115 + # Do not use the internal default functions for dev timeline entries (def: false) 116 + # Set this to true if you intend to only use the ones defined in the config 117 + override-dev-timeline-functions: true 118 + 101 119 # ---- Debug Options ---- 102 120 103 121 # Callgraph 104 122 # gather detailed ftrace callgraph data on all timeline events (default: false) 105 123 callgraph: false 124 + 125 + # Max graph depth 126 + # limit the callgraph trace to this depth (default: 0 = all) 127 + maxdepth: 2 106 128 107 129 # Callgraph phase filter 108 130 # Only enable callgraphs for one phase, i.e. resume_noirq (default: all) ··· 153 131 # Add kprobe functions to the timeline 154 132 # Add functions to the timeline from a text file (default: no-action) 155 133 # fadd: file.txt 134 + 135 + # Ftrace buffer size 136 + # Set trace buffer size to N kilo-bytes (default: all of free memory up to 3GB) 137 + # bufsize: 1000
+14 -2
tools/power/pm-graph/sleepgraph.8
··· 53 53 Add the dmesg and ftrace logs to the html output. They will be viewable by 54 54 clicking buttons in the timeline. 55 55 .TP 56 + \fB-turbostat\fR 57 + Use turbostat to execute the command in freeze mode (default: disabled). This 58 + will provide turbostat output in the log which will tell you which actual 59 + power modes were entered. 60 + .TP 56 61 \fB-result \fIfile\fR 57 62 Export a results table to a text file for parsing. 58 63 .TP ··· 126 121 Use ftrace to create device callgraphs (default: disabled). This can produce 127 122 very large outputs, i.e. 10MB - 100MB. 128 123 .TP 124 + \fB-ftop\fR 125 + Use ftrace on the top level call: "suspend_devices_and_enter" only (default: disabled). 126 + This option implies -f and creates a single callgraph covering all of suspend/resume. 127 + .TP 129 128 \fB-maxdepth \fIlevel\fR 130 129 limit the callgraph trace depth to \fIlevel\fR (default: 0=all). This is 131 130 the best way to limit the output size when using callgraphs via -f. ··· 147 138 The value is a float: e.g. 0.001 represents 1 us. 148 139 .TP 149 140 \fB-cgfilter \fI"func1,func2,..."\fR 150 - Reduce callgraph output in the timeline by limiting it to a list of calls. The 151 - argument can be a single function name or a comma delimited list. 141 + Reduce callgraph output in the timeline by limiting it certain devices. The 142 + argument can be a single device name or a comma delimited list. 152 143 (default: none) 153 144 .TP 154 145 \fB-cgskip \fIfile\fR ··· 191 182 .TP 192 183 \fB-battery\fR 193 184 Print out battery status and current charge. 185 + .TP 186 + \fB-wifi\fR 187 + Print out wifi status and connection details. 194 188 .TP 195 189 \fB-xon/-xoff/-xstandby/-xsuspend\fR 196 190 Test xset by attempting to switch the display to the given mode. This