Commit 8e9ccd0f authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'pm-5.7-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull power management fixes from Rafael Wysocki:
 "Restore an optimization related to asynchronous suspend and resume of
  devices during system-wide power transitions that was disabled by
  mistake (Kai-Heng Feng) and update the pm-graph suite of power
  management utilities (Todd Brandt)"

* tag 'pm-5.7-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  PM: sleep: core: Switch back to async_schedule_dev()
  pm-graph v5.6
parents 5be35f7f 4bee16d7
...@@ -730,7 +730,7 @@ static bool dpm_async_fn(struct device *dev, async_func_t func) ...@@ -730,7 +730,7 @@ static bool dpm_async_fn(struct device *dev, async_func_t func)
if (is_async(dev)) { if (is_async(dev)) {
get_device(dev); get_device(dev);
async_schedule(func, dev); async_schedule_dev(func, dev);
return true; return true;
} }
......
...@@ -41,6 +41,10 @@ uninstall : ...@@ -41,6 +41,10 @@ uninstall :
if [ -d $(DESTDIR)$(PREFIX)/lib/pm-graph/config ] ; then \ if [ -d $(DESTDIR)$(PREFIX)/lib/pm-graph/config ] ; then \
rmdir $(DESTDIR)$(PREFIX)/lib/pm-graph/config; \ rmdir $(DESTDIR)$(PREFIX)/lib/pm-graph/config; \
fi; fi;
rm -f $(DESTDIR)$(PREFIX)/lib/pm-graph/__pycache__/*
if [ -d $(DESTDIR)$(PREFIX)/lib/pm-graph/__pycache__ ] ; then \
rmdir $(DESTDIR)$(PREFIX)/lib/pm-graph/__pycache__; \
fi;
rm -f $(DESTDIR)$(PREFIX)/lib/pm-graph/* rm -f $(DESTDIR)$(PREFIX)/lib/pm-graph/*
if [ -d $(DESTDIR)$(PREFIX)/lib/pm-graph ] ; then \ if [ -d $(DESTDIR)$(PREFIX)/lib/pm-graph ] ; then \
rmdir $(DESTDIR)$(PREFIX)/lib/pm-graph; \ rmdir $(DESTDIR)$(PREFIX)/lib/pm-graph; \
......
p m - g r a p h _
_ __ _ __ ___ __ _ _ __ __ _ _ __ | |__
| '_ \| '_ ` _ \ _____ / _` | '__/ _` | '_ \| '_ \
| |_) | | | | | |_____| (_| | | | (_| | |_) | | | |
| .__/|_| |_| |_| \__, |_| \__,_| .__/|_| |_|
|_| |___/ |_|
pm-graph: suspend/resume/boot timing analysis tools pm-graph: suspend/resume/boot timing analysis tools
Version: 5.5 Version: 5.6
Author: Todd Brandt <todd.e.brandt@intel.com> Author: Todd Brandt <todd.e.brandt@intel.com>
Home Page: https://01.org/pm-graph Home Page: https://01.org/pm-graph
...@@ -18,10 +23,6 @@ ...@@ -18,10 +23,6 @@
- upstream version in git: - upstream version in git:
https://github.com/intel/pm-graph/ https://github.com/intel/pm-graph/
Requirements:
- runs with python2 or python3, choice is made by /usr/bin/python link
- python2 now requires python-configparser be installed
Table of Contents Table of Contents
- Overview - Overview
- Setup - Setup
...@@ -29,6 +30,8 @@ ...@@ -29,6 +30,8 @@
- Basic Usage - Basic Usage
- Dev Mode Usage - Dev Mode Usage
- Proc Mode Usage - Proc Mode Usage
- Endurance Testing
- Usage Examples
- Configuration Files - Configuration Files
- Usage Examples - Usage Examples
- Config File Options - Config File Options
...@@ -54,15 +57,18 @@ ...@@ -54,15 +57,18 @@
| SETUP | | SETUP |
------------------------------------------------------------------ ------------------------------------------------------------------
These packages are required to execute the scripts Package Requirements
- runs with python2 or python3, choice is made by /usr/bin/python link
- python - python
- python-requests - python-configparser (for python2 sleepgraph)
- python-requests (for googlesheet.py)
- linux-tools-common (for turbostat usage in sleepgraph)
Ubuntu: Ubuntu:
sudo apt-get install python python-requests sudo apt-get install python python-configparser python-requests linux-tools-common
Fedora: Fedora:
sudo dnf install python python-requests sudo dnf install python python-configparser python-requests linux-tools-common
The tools can most easily be installed via git clone and make install The tools can most easily be installed via git clone and make install
...@@ -190,6 +196,104 @@ _______________ ...@@ -190,6 +196,104 @@ _______________
%> sudo ./sleepgraph.py -config config/suspend-proc.cfg %> sudo ./sleepgraph.py -config config/suspend-proc.cfg
------------------------------------------------------------------
| ENDURANCE TESTING |
------------------------------------------------------------------
The best way to gauge the health of a system is to run a series of
suspend/resumes over an extended period and analyze the behavior. This can be
accomplished with sleepgraph's -multi argument. You specify two numbers: the
number of tests to run OR the duration in days, hours, or minutes, and the
delay in seconds between them. For instance, -multi 20 5: execute 20 tests with
a 5 second delay between each, or -multi 24h 0: execute tests over a 24 hour
period with no delay between tests. You can include any other options you like
to generate the data you want. It's most useful to collect dev mode timelines
as the kprobes don't alter the performance much and you get more insight.
On completion, the output folder contains a series of folders for the
individual test data and a set of summary pages in the root. The summary.html
file is a tabular list of the tests with relevant info and links. The
summary-issue.html and summary-devices.html files include data taken from
all tests on kernel issues and device performance. The folder looks like this:
suspend-xN-{date}-{time}:
summary.html
summary-issues.html
summary-devices.html
suspend-{date}-{time} (1)
suspend-{date}-{time} (2)
...
These are the relevant arguments to use for testing:
-m mode
Mode to initiate for suspend e.g. mem, freeze, standby (default: mem).
-rtcwake t
Use rtcwake to autoresume after t seconds (default: 15).
-gzip (optional)
Gzip the trace and dmesg logs to save space. The tool can also read in
gzipped logs for processing. This reduces the multitest folder size.
-dev (optional)
Add kernel source calls and threads to the timeline (default: disabled).
-multi n d
Execute n consecutive tests at d seconds intervals. The outputs will be
created in a new subdirectory: suspend-xN-{date}-{time}. When the multitest
run is done, the -summary command is called automatically to create summary
html files for all the data (unless you use -skiphtml). -skiphtml will
speed up the testing by not creating timelines or summary html files. You
can then run the tool again at a later time with -summary and -genhtml to
create the timelines.
-skiphtml (optional)
Run the test and capture the trace logs, but skip the timeline and summary
html generation. This can greatly speed up overall testing. You can then
copy the data to a faster host machine and run -summary -genhtml to
generate the timelines and summary.
These are the relevant commands to use after testing is complete:
-summary indir
Generate or regenerate the summary for a -multi test run. Creates three
files: summary.html, summary-issues.html, and summary-devices.html in the
current folder. summary.html is a table of tests with relevant info sorted
by kernel/host/mode, and links to the test html files. summary-issues.html
is a list of kernel issues found in dmesg from all the tests.
summary-devices.html is a list of devices and times from all the tests.
-genhtml
Used with -summary to regenerate any missing html timelines from their
dmesg and ftrace logs. This will require a significant amount of time if
there are thousands of tests.
Usage Examples
_______________
A multitest is initiated like this:
%> sudo ./sleepgraph.py -m mem -rtcwake 10 -dev -gzip -multi 2000 0
or you can skip timeline generation in order to speed things up
%> sudo ./sleepgraph.py -m mem -rtcwake 10 -dev -gzip -multi 2000 0 -skiphtml
The tool will produce an output folder with all the test subfolders inside.
Each test subfolder contains the dmesg/ftrace logs and/or the html timeline
depending on whether you used the -skiphtml option. The root folder contains
the summary.html files.
The summary for an existing multitest is generated like this:
%> cd suspend-x2000-{date}-{time}
%> sleepgraph.py -summary .
or if you need to generate the html timelines you can use -genhtml
%> cd suspend-xN-{date}-{time}
%> sleepgraph.py -summary . -genhtml
------------------------------------------------------------------ ------------------------------------------------------------------
| CONFIGURATION FILES | | CONFIGURATION FILES |
......
#!/usr/bin/python #!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-2.0-only
# #
# Tool for analyzing boot timing # Tool for analyzing boot timing
......
...@@ -74,8 +74,10 @@ after the test is complete. ...@@ -74,8 +74,10 @@ after the test is complete.
Switch the display to the requested mode for the test using the xset command. Switch the display to the requested mode for the test using the xset command.
This helps maintain the consistency of test data for better comparison. This helps maintain the consistency of test data for better comparison.
.TP .TP
\fB-skiphtml\fR \fB-wifi\fR
Run the test and capture the trace logs, but skip the timeline generation. If a wifi connection is available, check that it reconnects after resume. Include
the reconnect time in the total resume time calculation and treat wifi timeouts
as resume failures.
.SS "advanced" .SS "advanced"
.TP .TP
...@@ -117,8 +119,24 @@ Include \fIt\fR ms delay before 1st suspend (default: 0 ms). ...@@ -117,8 +119,24 @@ Include \fIt\fR ms delay before 1st suspend (default: 0 ms).
Include \fIt\fR ms delay after last resume (default: 0 ms). Include \fIt\fR ms delay after last resume (default: 0 ms).
.TP .TP
\fB-multi \fIn d\fR \fB-multi \fIn d\fR
Execute \fIn\fR consecutive tests at \fId\fR seconds intervals. The outputs will Used for endurance testing. If \fIn\fR is entirely numeric, it's treated as a count:
be created in a new subdirectory with a summary page: suspend-xN-{date}-{time}. Execute \fIn\fR consecutive tests at \fId\fR second intervals.
If \fIn\fR is an integer followed by a "d", "h", or "m", it's treated as a duration:
Execute tests continuously over \fIn\fR days, hours, or minutes at \fId\fR second intervals.
The outputs will be created in a new subdirectory, for count: suspend-{date}-{time}-xN,
for duration: suspend-{date}-{time}-Nm. When the multitest run is done, the \fI-summary\fR
command is called automatically to create summary html files for all the data (unless you
use \fI-skiphtml\fR). \fI-skiphtml\fR will speed up the testing by not creating timelines
or summary html files. You can then run the tool again at a later time with \fI-summary\fR
and \fI-genhtml\fR to create the timelines.
.TP
\fB-maxfail \fIn\fR
Abort a -multi run after \fIn\fR consecutive fails. 0 means never abort (default = 0).
.TP
\fB-skiphtml\fR
Run the test and capture the trace logs, but skip the timeline generation.
You can generate the html timelines later with \fI-dmesg\fR & \fI-ftrace\fR, or
by running \fI-summary\fR and \fI-genhtml\fR.
.SS "ftrace debug" .SS "ftrace debug"
.TP .TP
...@@ -173,11 +191,20 @@ Set trace buffer size to N kilo-bytes (default: all of free memory up to 3GB) ...@@ -173,11 +191,20 @@ Set trace buffer size to N kilo-bytes (default: all of free memory up to 3GB)
.SH COMMANDS .SH COMMANDS
.TP .TP
\fB-summary \fIindir\fR \fB-summary \fIindir\fR
Create a summary page of all tests in \fIindir\fR. Creates summary.html Create a set of summary pages for all tests in \fIindir\fR recursively.
in the current folder. The output page is a table of tests with Creates summary.html, summary-issues.html, and summary-devices.html in the current folder.
suspend and resume values sorted by suspend mode, host, and kernel. summary.html is a table of tests with relevant info sorted by kernel/host/mode,
Includes test averages by mode and links to the test html files. and links to the test html files. It identifies the minimum, maximum, and median
Use -genhtml to include tests with missing html. suspend and resume times for you with highlights and links in the header.
summary-issues.html is a list of kernel issues found in dmesg from all the tests.
summary-devices.html is a list of devices and times from all the tests.
Use \fI-genhtml\fR to regenerate any tests with missing html.
.TP
\fB-genhtml\fR
Used with \fI-summary\fR to regenerate any missing html timelines from their
dmesg and ftrace logs. This will require a significant amount of time if there
are thousands of tests.
.TP .TP
\fB-modes\fR \fB-modes\fR
List available suspend modes. List available suspend modes.
...@@ -189,10 +216,7 @@ with any options you intend to use to see if they will work. ...@@ -189,10 +216,7 @@ with any options you intend to use to see if they will work.
\fB-fpdt\fR \fB-fpdt\fR
Print out the contents of the ACPI Firmware Performance Data Table. Print out the contents of the ACPI Firmware Performance Data Table.
.TP .TP
\fB-battery\fR \fB-wificheck\fR
Print out battery status and current charge.
.TP
\fB-wifi\fR
Print out wifi status and connection details. Print out wifi status and connection details.
.TP .TP
\fB-xon/-xoff/-xstandby/-xsuspend\fR \fB-xon/-xoff/-xstandby/-xsuspend\fR
...@@ -208,6 +232,9 @@ Print out system info extracted from BIOS. Reads /dev/mem directly instead of go ...@@ -208,6 +232,9 @@ Print out system info extracted from BIOS. Reads /dev/mem directly instead of go
\fB-devinfo\fR \fB-devinfo\fR
Print out the pm settings of all devices which support runtime suspend. Print out the pm settings of all devices which support runtime suspend.
.TP .TP
\fB-cmdinfo\fR
Print out all the platform data collected from the system that makes it into the logs.
.TP
\fB-flist\fR \fB-flist\fR
Print the list of ftrace functions currently being captured. Functions Print the list of ftrace functions currently being captured. Functions
that are not available as symbols in the current kernel are shown in red. that are not available as symbols in the current kernel are shown in red.
...@@ -272,14 +299,20 @@ Run two suspends back to back, include a 500ms delay before, after, and in betwe ...@@ -272,14 +299,20 @@ Run two suspends back to back, include a 500ms delay before, after, and in betwe
.IP .IP
\f(CW$ sudo sleepgraph -m mem -rtcwake 15 -x2 -predelay 500 -x2delay 500 -postdelay 500\fR \f(CW$ sudo sleepgraph -m mem -rtcwake 15 -x2 -predelay 500 -x2delay 500 -postdelay 500\fR
.PP .PP
Execute a suspend using a custom command.
.IP
\f(CW$ sudo sleepgraph -cmd "echo mem > /sys/power/state" -rtcwake 15\fR
.PP
.SS "endurance testing using -multi"
.PP
Do a batch run of 10 freezes with 30 seconds delay between runs. Do a batch run of 10 freezes with 30 seconds delay between runs.
.IP .IP
\f(CW$ sudo sleepgraph -m freeze -rtcwake 15 -multi 10 30\fR \f(CW$ sudo sleepgraph -m freeze -rtcwake 15 -multi 10 30\fR
.PP .PP
Execute a suspend using a custom command. Do a batch run of freezes for 24 hours.
.IP .IP
\f(CW$ sudo sleepgraph -cmd "echo mem > /sys/power/state" -rtcwake 15\fR \f(CW$ sudo sleepgraph -m freeze -rtcwake 15 -multi 24h 0\fR
.PP
.SS "adding callgraph data" .SS "adding callgraph data"
Add device callgraphs. Limit the trace depth and only show callgraphs 10ms or larger. Add device callgraphs. Limit the trace depth and only show callgraphs 10ms or larger.
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment