pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
#!/usr/bin/env python3
2019-05-29 07:18:02 -07:00
# SPDX-License-Identifier: GPL-2.0-only
2014-01-16 16:18:22 -08:00
#
# Tool for analyzing suspend/resume timing
# Copyright (c) 2013, Intel Corporation.
#
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
# This program is free software; you can redistribute it and/or modify it
# under the terms and conditions of the GNU General Public License,
# version 2, as published by the Free Software Foundation.
#
# This program is distributed in the hope it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
2014-01-16 16:18:22 -08:00
# Authors:
# Todd Brandt <todd.e.brandt@linux.intel.com>
#
2016-07-15 23:34:14 +02:00
# Links:
# Home Page
2019-05-14 10:53:58 -07:00
# https://01.org/pm-graph
2016-07-15 23:34:14 +02:00
# Source repo
2019-05-14 10:53:58 -07:00
# git@github.com:intel/pm-graph
2016-07-15 23:34:14 +02:00
#
2014-01-16 16:18:22 -08:00
# Description:
# This tool is designed to assist kernel and OS developers in optimizing
# their linux stack's suspend/resume time. Using a kernel image built
# with a few extra options enabled, the tool will execute a suspend and
# will capture dmesg and ftrace data until resume is complete. This data
# is transformed into a device timeline and a callgraph to give a quick
# and detailed view of which devices and callbacks are taking the most
# time in suspend/resume. The output is a single html file which can be
# viewed in firefox or chrome.
#
# The following kernel build options are required:
2019-05-14 10:53:58 -07:00
# CONFIG_DEVMEM=y
2014-01-16 16:18:22 -08:00
# CONFIG_PM_DEBUG=y
# CONFIG_PM_SLEEP_DEBUG=y
# CONFIG_FTRACE=y
# CONFIG_FUNCTION_TRACER=y
# CONFIG_FUNCTION_GRAPH_TRACER=y
2016-07-15 23:34:14 +02:00
# CONFIG_KPROBES=y
# CONFIG_KPROBES_ON_FTRACE=y
2014-01-16 16:18:22 -08:00
#
2014-08-08 09:11:59 -07:00
# For kernel versions older than 3.15:
2014-01-16 16:18:22 -08:00
# The following additional kernel parameters are required:
# (e.g. in file /etc/default/grub)
# GRUB_CMDLINE_LINUX_DEFAULT="... initcall_debug log_buf_len=16M ..."
#
2014-08-08 09:11:59 -07:00
# ----------------- LIBRARIES --------------------
2014-01-16 16:18:22 -08:00
import sys
import time
import os
import string
import re
import platform
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
import signal
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
import codecs
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
from datetime import datetime , timedelta
2014-01-16 16:18:22 -08:00
import struct
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
import configparser
2018-01-30 00:17:20 -08:00
import gzip
2016-12-14 10:37:05 -08:00
from threading import Thread
2016-12-14 10:37:06 -08:00
from subprocess import call , Popen , PIPE
2019-05-14 10:53:57 -07:00
import base64
2014-01-16 16:18:22 -08:00
2018-10-08 15:56:32 -07:00
def pprint ( msg ) :
print ( msg )
sys . stdout . flush ( )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
def ascii ( text ) :
return text . decode ( ' ascii ' , ' ignore ' )
2014-08-08 09:11:59 -07:00
# ----------------- CLASSES --------------------
2014-01-16 16:18:22 -08:00
2014-08-08 09:11:59 -07:00
# Class: SystemValues
# Description:
# A global, single-instance container used to
# store system values and test parameters
2014-01-16 16:18:22 -08:00
class SystemValues :
2017-04-07 11:05:35 -07:00
title = ' SleepGraph '
2020-11-10 18:36:17 -08:00
version = ' 5.8 '
2016-07-15 23:34:14 +02:00
ansi = False
2018-01-30 00:17:20 -08:00
rs = 0
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
display = ' '
2018-01-30 00:17:20 -08:00
gzip = False
sync = False
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
wifi = False
2014-08-08 09:11:59 -07:00
verbose = False
2017-07-05 14:42:55 -07:00
testlog = True
2019-05-14 10:53:58 -07:00
dmesglog = True
2017-07-05 14:42:55 -07:00
ftracelog = False
2020-11-10 18:36:17 -08:00
acpidebug = True
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
tstat = True
2020-11-10 18:36:17 -08:00
mindevlen = 0.0001
2016-12-14 10:37:07 -08:00
mincglen = 0.0
cgphase = ' '
cgtest = - 1
2018-01-30 00:17:20 -08:00
cgskip = ' '
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
maxfail = 0
multitest = { ' run ' : False , ' count ' : 1000000 , ' delay ' : 0 }
2017-04-07 11:05:35 -07:00
max_graph_depth = 0
2016-12-14 10:37:06 -08:00
callloopmaxgap = 0.0001
callloopmaxlen = 0.005
2018-01-30 00:17:20 -08:00
bufsize = 0
2017-07-05 14:42:55 -07:00
cpucount = 0
memtotal = 204800
2018-01-30 00:17:20 -08:00
memfree = 204800
2016-07-15 23:34:14 +02:00
srgap = 0
cgexp = False
2017-07-05 14:42:55 -07:00
testdir = ' '
2018-01-30 00:17:20 -08:00
outdir = ' '
2014-08-08 09:11:59 -07:00
tpath = ' /sys/kernel/debug/tracing/ '
fpdtpath = ' /sys/firmware/acpi/tables/FPDT '
epath = ' /sys/kernel/debug/tracing/events/power/ '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
pmdpath = ' /sys/power/pm_debug_messages '
2020-11-10 18:36:17 -08:00
acpipath = ' /sys/module/acpi/parameters/debug_level '
2014-08-08 09:11:59 -07:00
traceevents = [
' suspend_resume ' ,
2019-05-14 10:53:58 -07:00
' wakeup_source_activate ' ,
' wakeup_source_deactivate ' ,
2014-08-08 09:11:59 -07:00
' device_pm_callback_end ' ,
' device_pm_callback_start '
]
2016-12-14 10:37:07 -08:00
logmsg = ' '
2016-07-15 23:34:14 +02:00
testcommand = ' '
2014-08-08 09:11:59 -07:00
mempath = ' /dev/mem '
powerfile = ' /sys/power/state '
2017-07-05 14:42:55 -07:00
mempowerfile = ' /sys/power/mem_sleep '
2018-10-08 15:56:32 -07:00
diskpowerfile = ' /sys/power/disk '
2014-08-08 09:11:59 -07:00
suspendmode = ' mem '
2017-07-05 14:42:55 -07:00
memmode = ' '
2018-10-08 15:56:32 -07:00
diskmode = ' '
2014-08-08 09:11:59 -07:00
hostname = ' localhost '
prefix = ' test '
teststamp = ' '
2017-07-05 14:42:55 -07:00
sysstamp = ' '
2016-07-15 23:34:14 +02:00
dmesgstart = 0.0
2014-08-08 09:11:59 -07:00
dmesgfile = ' '
ftracefile = ' '
2017-07-05 14:42:55 -07:00
htmlfile = ' output.html '
2018-01-30 00:17:20 -08:00
result = ' '
2017-04-07 11:05:35 -07:00
rtcwake = True
rtcwaketime = 15
2014-08-08 09:11:59 -07:00
rtcpath = ' '
devicefilter = [ ]
2018-01-30 00:17:20 -08:00
cgfilter = [ ]
2014-08-08 09:11:59 -07:00
stamp = 0
execcount = 1
x2delay = 0
2018-01-30 00:17:20 -08:00
skiphtml = False
2014-08-08 09:11:59 -07:00
usecallgraph = False
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
ftopfunc = ' pm_suspend '
2019-05-14 10:53:58 -07:00
ftop = False
2014-08-08 09:11:59 -07:00
usetraceevents = False
2016-07-15 23:34:14 +02:00
usetracemarkers = True
usekprobes = True
usedevsrc = False
2016-12-14 10:37:05 -08:00
useprocmon = False
2014-08-08 09:11:59 -07:00
notestrun = False
2018-01-30 00:17:20 -08:00
cgdump = False
2018-10-08 15:56:32 -07:00
devdump = False
2016-12-14 10:37:05 -08:00
mixedphaseheight = True
2016-07-15 23:34:14 +02:00
devprops = dict ( )
2020-11-10 18:36:17 -08:00
cfgdef = dict ( )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
platinfo = [ ]
2016-12-14 10:37:05 -08:00
predelay = 0
postdelay = 0
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
tmstart = ' SUSPEND START % Y % m %d - % H: % M: % S. %f '
tmend = ' RESUME COMPLETE % Y % m %d - % H: % M: % S. %f '
2016-07-15 23:34:14 +02:00
tracefuncs = {
2018-01-30 00:17:20 -08:00
' sys_sync ' : { } ,
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
' ksys_sync ' : { } ,
2020-11-10 18:36:17 -08:00
' __pm_notifier_call_chain ' : { } ,
2018-01-30 00:17:20 -08:00
' pm_prepare_console ' : { } ,
' pm_notifier_call_chain ' : { } ,
' freeze_processes ' : { } ,
' freeze_kernel_threads ' : { } ,
' pm_restrict_gfp_mask ' : { } ,
' acpi_suspend_begin ' : { } ,
' acpi_hibernation_begin ' : { } ,
' acpi_hibernation_enter ' : { } ,
' acpi_hibernation_leave ' : { } ,
' acpi_pm_freeze ' : { } ,
' acpi_pm_thaw ' : { } ,
2019-05-14 10:53:58 -07:00
' acpi_s2idle_end ' : { } ,
' acpi_s2idle_sync ' : { } ,
' acpi_s2idle_begin ' : { } ,
' acpi_s2idle_prepare ' : { } ,
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
' acpi_s2idle_prepare_late ' : { } ,
2019-05-14 10:53:58 -07:00
' acpi_s2idle_wake ' : { } ,
' acpi_s2idle_wakeup ' : { } ,
' acpi_s2idle_restore ' : { } ,
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
' acpi_s2idle_restore_early ' : { } ,
2018-01-30 00:17:20 -08:00
' hibernate_preallocate_memory ' : { } ,
' create_basic_memory_bitmaps ' : { } ,
' swsusp_write ' : { } ,
' suspend_console ' : { } ,
' acpi_pm_prepare ' : { } ,
' syscore_suspend ' : { } ,
2020-07-20 18:02:49 -07:00
' arch_enable_nonboot_cpus_end ' : { } ,
2018-01-30 00:17:20 -08:00
' syscore_resume ' : { } ,
' acpi_pm_finish ' : { } ,
' resume_console ' : { } ,
' acpi_pm_end ' : { } ,
' pm_restore_gfp_mask ' : { } ,
' thaw_processes ' : { } ,
' pm_restore_console ' : { } ,
2016-07-15 23:34:14 +02:00
' CPU_OFF ' : {
' func ' : ' _cpu_down ' ,
' args_x86_64 ' : { ' cpu ' : ' %d i:s32 ' } ,
2016-12-14 10:37:05 -08:00
' format ' : ' CPU_OFF[ {cpu} ] '
2016-07-15 23:34:14 +02:00
} ,
' CPU_ON ' : {
' func ' : ' _cpu_up ' ,
' args_x86_64 ' : { ' cpu ' : ' %d i:s32 ' } ,
2016-12-14 10:37:05 -08:00
' format ' : ' CPU_ON[ {cpu} ] '
2016-07-15 23:34:14 +02:00
} ,
}
dev_tracefuncs = {
# general wait/delay/sleep
2016-12-14 10:37:07 -08:00
' msleep ' : { ' args_x86_64 ' : { ' time ' : ' %d i:s32 ' } , ' ub ' : 1 } ,
' schedule_timeout ' : { ' args_x86_64 ' : { ' timeout ' : ' %d i:s32 ' } , ' ub ' : 1 } ,
' udelay ' : { ' func ' : ' __const_udelay ' , ' args_x86_64 ' : { ' loops ' : ' %d i:s32 ' } , ' ub ' : 1 } ,
' usleep_range ' : { ' args_x86_64 ' : { ' min ' : ' %d i:s32 ' , ' max ' : ' %s i:s32 ' } , ' ub ' : 1 } ,
' mutex_lock_slowpath ' : { ' func ' : ' __mutex_lock_slowpath ' , ' ub ' : 1 } ,
' acpi_os_stall ' : { ' ub ' : 1 } ,
2019-05-14 10:53:57 -07:00
' rt_mutex_slowlock ' : { ' ub ' : 1 } ,
2016-07-15 23:34:14 +02:00
# ACPI
2018-01-30 00:17:20 -08:00
' acpi_resume_power_resources ' : { } ,
2019-05-14 10:53:58 -07:00
' acpi_ps_execute_method ' : { ' args_x86_64 ' : {
' fullpath ' : ' +0(+40( %d i)):string ' ,
} } ,
# mei_me
' mei_reset ' : { } ,
2016-07-15 23:34:14 +02:00
# filesystem
2018-01-30 00:17:20 -08:00
' ext4_sync_fs ' : { } ,
2016-12-14 10:37:07 -08:00
# 80211
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
' ath10k_bmi_read_memory ' : { ' args_x86_64 ' : { ' length ' : ' %c x:s32 ' } } ,
' ath10k_bmi_write_memory ' : { ' args_x86_64 ' : { ' length ' : ' %c x:s32 ' } } ,
' ath10k_bmi_fast_download ' : { ' args_x86_64 ' : { ' length ' : ' %c x:s32 ' } } ,
2018-01-30 00:17:20 -08:00
' iwlagn_mac_start ' : { } ,
' iwlagn_alloc_bcast_station ' : { } ,
' iwl_trans_pcie_start_hw ' : { } ,
' iwl_trans_pcie_start_fw ' : { } ,
' iwl_run_init_ucode ' : { } ,
' iwl_load_ucode_wait_alive ' : { } ,
' iwl_alive_start ' : { } ,
' iwlagn_mac_stop ' : { } ,
' iwlagn_mac_suspend ' : { } ,
' iwlagn_mac_resume ' : { } ,
' iwlagn_mac_add_interface ' : { } ,
' iwlagn_mac_remove_interface ' : { } ,
' iwlagn_mac_change_interface ' : { } ,
' iwlagn_mac_config ' : { } ,
' iwlagn_configure_filter ' : { } ,
' iwlagn_mac_hw_scan ' : { } ,
' iwlagn_bss_info_changed ' : { } ,
' iwlagn_mac_channel_switch ' : { } ,
' iwlagn_mac_flush ' : { } ,
2016-07-15 23:34:14 +02:00
# ATA
' ata_eh_recover ' : { ' args_x86_64 ' : { ' port ' : ' +36( %d i):s32 ' } } ,
# i915
2018-01-30 00:17:20 -08:00
' i915_gem_resume ' : { } ,
' i915_restore_state ' : { } ,
' intel_opregion_setup ' : { } ,
' g4x_pre_enable_dp ' : { } ,
' vlv_pre_enable_dp ' : { } ,
' chv_pre_enable_dp ' : { } ,
' g4x_enable_dp ' : { } ,
' vlv_enable_dp ' : { } ,
' intel_hpd_init ' : { } ,
' intel_opregion_register ' : { } ,
' intel_dp_detect ' : { } ,
' intel_hdmi_detect ' : { } ,
' intel_opregion_init ' : { } ,
' intel_fbdev_set_suspend ' : { } ,
2016-07-15 23:34:14 +02:00
}
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
infocmds = [
[ 0 , ' kparams ' , ' cat ' , ' /proc/cmdline ' ] ,
[ 0 , ' mcelog ' , ' mcelog ' ] ,
[ 0 , ' pcidevices ' , ' lspci ' , ' -tv ' ] ,
[ 0 , ' usbdevices ' , ' lsusb ' , ' -t ' ] ,
[ 1 , ' interrupts ' , ' cat ' , ' /proc/interrupts ' ] ,
[ 1 , ' wakeups ' , ' cat ' , ' /sys/kernel/debug/wakeup_sources ' ] ,
[ 2 , ' gpecounts ' , ' sh ' , ' -c ' , ' grep -v invalid /sys/firmware/acpi/interrupts/* ' ] ,
[ 2 , ' suspendstats ' , ' sh ' , ' -c ' , ' grep -v invalid /sys/power/suspend_stats/* ' ] ,
[ 2 , ' cpuidle ' , ' sh ' , ' -c ' , ' grep -v invalid /sys/devices/system/cpu/cpu*/cpuidle/state*/s2idle/* ' ] ,
[ 2 , ' battery ' , ' sh ' , ' -c ' , ' grep -v invalid /sys/class/power_supply/*/* ' ] ,
]
2018-01-30 00:17:20 -08:00
cgblacklist = [ ]
2016-07-15 23:34:14 +02:00
kprobes = dict ( )
timeformat = ' %.3f '
2018-01-30 00:17:20 -08:00
cmdline = ' %s %s ' % \
2018-05-24 09:36:28 -07:00
( os . path . basename ( sys . argv [ 0 ] ) , ' ' . join ( sys . argv [ 1 : ] ) )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sudouser = ' '
2014-08-08 09:11:59 -07:00
def __init__ ( self ) :
2016-12-14 10:37:06 -08:00
self . archargs = ' args_ ' + platform . machine ( )
2014-08-08 09:11:59 -07:00
self . hostname = platform . node ( )
if ( self . hostname == ' ' ) :
self . hostname = ' localhost '
rtc = " rtc0 "
if os . path . exists ( ' /dev/rtc ' ) :
rtc = os . readlink ( ' /dev/rtc ' )
rtc = ' /sys/class/rtc/ ' + rtc
if os . path . exists ( rtc ) and os . path . exists ( rtc + ' /date ' ) and \
os . path . exists ( rtc + ' /time ' ) and os . path . exists ( rtc + ' /wakealarm ' ) :
self . rtcpath = rtc
2016-07-15 23:34:14 +02:00
if ( hasattr ( sys . stdout , ' isatty ' ) and sys . stdout . isatty ( ) ) :
self . ansi = True
2017-07-05 14:42:55 -07:00
self . testdir = datetime . now ( ) . strftime ( ' suspend- % y % m %d - % H % M % S ' )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if os . getuid ( ) == 0 and ' SUDO_USER ' in os . environ and \
os . environ [ ' SUDO_USER ' ] :
self . sudouser = os . environ [ ' SUDO_USER ' ]
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
def resetlog ( self ) :
self . logmsg = ' '
self . platinfo = [ ]
2018-01-30 00:17:20 -08:00
def vprint ( self , msg ) :
self . logmsg + = msg + ' \n '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if self . verbose or msg . startswith ( ' WARNING: ' ) :
2018-10-08 15:56:32 -07:00
pprint ( msg )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
def signalHandler ( self , signum , frame ) :
if not self . result :
return
signame = self . signames [ signum ] if signum in self . signames else ' UNKNOWN '
msg = ' Signal %s caused a tool exit, line %d ' % ( signame , frame . f_lineno )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
self . outputResult ( { ' error ' : msg } )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sys . exit ( 3 )
def signalHandlerInit ( self ) :
capture = [ ' BUS ' , ' SYS ' , ' XCPU ' , ' XFSZ ' , ' PWR ' , ' HUP ' , ' INT ' , ' QUIT ' ,
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
' ILL ' , ' ABRT ' , ' FPE ' , ' SEGV ' , ' TERM ' ]
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . signames = dict ( )
for i in capture :
s = ' SIG ' + i
try :
signum = getattr ( signal , s )
signal . signal ( signum , self . signalHandler )
except :
continue
self . signames [ signum ] = s
2017-07-05 14:42:55 -07:00
def rootCheck ( self , fatal = True ) :
if ( os . access ( self . powerfile , os . W_OK ) ) :
return True
if fatal :
2018-01-30 00:17:20 -08:00
msg = ' This command requires sysfs mount and root access '
2018-10-08 15:56:32 -07:00
pprint ( ' ERROR: %s \n ' % msg )
2018-01-30 00:17:20 -08:00
self . outputResult ( { ' error ' : msg } )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sys . exit ( 1 )
2017-07-05 14:42:55 -07:00
return False
2017-04-07 11:05:35 -07:00
def rootUser ( self , fatal = False ) :
if ' USER ' in os . environ and os . environ [ ' USER ' ] == ' root ' :
return True
if fatal :
2018-01-30 00:17:20 -08:00
msg = ' This command must be run as root '
2018-10-08 15:56:32 -07:00
pprint ( ' ERROR: %s \n ' % msg )
2018-01-30 00:17:20 -08:00
self . outputResult ( { ' error ' : msg } )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sys . exit ( 1 )
2017-04-07 11:05:35 -07:00
return False
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
def usable ( self , file ) :
return ( os . path . exists ( file ) and os . path . getsize ( file ) > 0 )
2018-01-30 00:17:20 -08:00
def getExec ( self , cmd ) :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
try :
fp = Popen ( [ ' which ' , cmd ] , stdout = PIPE , stderr = PIPE ) . stdout
out = ascii ( fp . read ( ) ) . strip ( )
fp . close ( )
except :
out = ' '
if out :
return out
for path in [ ' /sbin ' , ' /bin ' , ' /usr/sbin ' , ' /usr/bin ' ,
' /usr/local/sbin ' , ' /usr/local/bin ' ] :
2018-01-30 00:17:20 -08:00
cmdfull = os . path . join ( path , cmd )
if os . path . exists ( cmdfull ) :
return cmdfull
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
return out
2016-07-15 23:34:14 +02:00
def setPrecision ( self , num ) :
if num < 0 or num > 6 :
return
self . timeformat = ' % . {0} f ' . format ( num )
2016-12-14 10:37:05 -08:00
def setOutputFolder ( self , value ) :
args = dict ( )
n = datetime . now ( )
args [ ' date ' ] = n . strftime ( ' % y % m %d ' )
args [ ' time ' ] = n . strftime ( ' % H % M % S ' )
2018-01-30 00:17:20 -08:00
args [ ' hostname ' ] = args [ ' host ' ] = self . hostname
2019-05-14 10:53:58 -07:00
args [ ' mode ' ] = self . suspendmode
2017-07-05 14:42:55 -07:00
return value . format ( * * args )
2014-01-16 16:18:22 -08:00
def setOutputFile ( self ) :
2017-07-05 14:42:55 -07:00
if self . dmesgfile != ' ' :
2018-01-30 00:17:20 -08:00
m = re . match ( ' (?P<name>.*)_dmesg \ .txt.* ' , self . dmesgfile )
2014-01-16 16:18:22 -08:00
if ( m ) :
2014-08-08 09:11:59 -07:00
self . htmlfile = m . group ( ' name ' ) + ' .html '
2017-07-05 14:42:55 -07:00
if self . ftracefile != ' ' :
2018-01-30 00:17:20 -08:00
m = re . match ( ' (?P<name>.*)_ftrace \ .txt.* ' , self . ftracefile )
2014-01-16 16:18:22 -08:00
if ( m ) :
2014-08-08 09:11:59 -07:00
self . htmlfile = m . group ( ' name ' ) + ' .html '
2017-07-05 14:42:55 -07:00
def systemInfo ( self , info ) :
2019-05-14 10:53:58 -07:00
p = m = ' '
2017-07-05 14:42:55 -07:00
if ' baseboard-manufacturer ' in info :
m = info [ ' baseboard-manufacturer ' ]
elif ' system-manufacturer ' in info :
m = info [ ' system-manufacturer ' ]
2019-05-14 10:53:57 -07:00
if ' system-product-name ' in info :
2017-07-05 14:42:55 -07:00
p = info [ ' system-product-name ' ]
2019-05-14 10:53:57 -07:00
elif ' baseboard-product-name ' in info :
p = info [ ' baseboard-product-name ' ]
if m [ : 5 ] . lower ( ) == ' intel ' and ' baseboard-product-name ' in info :
p = info [ ' baseboard-product-name ' ]
2019-05-14 10:53:58 -07:00
c = info [ ' processor-version ' ] if ' processor-version ' in info else ' '
b = info [ ' bios-version ' ] if ' bios-version ' in info else ' '
r = info [ ' bios-release-date ' ] if ' bios-release-date ' in info else ' '
self . sysstamp = ' # sysinfo | man: %s | plat: %s | cpu: %s | bios: %s | biosdate: %s | numcpu: %d | memsz: %d | memfr: %d ' % \
( m , p , c , b , r , self . cpucount , self . memtotal , self . memfree )
2018-01-30 00:17:20 -08:00
def printSystemInfo ( self , fatal = False ) :
2017-07-05 14:42:55 -07:00
self . rootCheck ( True )
2018-01-30 00:17:20 -08:00
out = dmidecode ( self . mempath , fatal )
if len ( out ) < 1 :
return
2017-07-05 14:42:55 -07:00
fmt = ' %-24s : %s '
for name in sorted ( out ) :
2019-05-14 10:53:58 -07:00
print ( fmt % ( name , out [ name ] ) )
print ( fmt % ( ' cpucount ' , ( ' %d ' % self . cpucount ) ) )
print ( fmt % ( ' memtotal ' , ( ' %d kB ' % self . memtotal ) ) )
print ( fmt % ( ' memfree ' , ( ' %d kB ' % self . memfree ) ) )
2017-07-05 14:42:55 -07:00
def cpuInfo ( self ) :
self . cpucount = 0
fp = open ( ' /proc/cpuinfo ' , ' r ' )
for line in fp :
if re . match ( ' ^processor[ \t ]*:[ \t ]*[0-9]* ' , line ) :
self . cpucount + = 1
fp . close ( )
fp = open ( ' /proc/meminfo ' , ' r ' )
for line in fp :
m = re . match ( ' ^MemTotal:[ \t ]*(?P<sz>[0-9]*) *kB ' , line )
if m :
self . memtotal = int ( m . group ( ' sz ' ) )
2018-01-30 00:17:20 -08:00
m = re . match ( ' ^MemFree:[ \t ]*(?P<sz>[0-9]*) *kB ' , line )
if m :
self . memfree = int ( m . group ( ' sz ' ) )
2017-07-05 14:42:55 -07:00
fp . close ( )
def initTestOutput ( self , name ) :
2016-07-15 23:34:14 +02:00
self . prefix = self . hostname
v = open ( ' /proc/version ' , ' r ' ) . read ( ) . strip ( )
2019-05-14 10:53:58 -07:00
kver = v . split ( ) [ 2 ]
2017-07-05 14:42:55 -07:00
fmt = name + ' - % m %d % y- % H % M % S '
testtime = datetime . now ( ) . strftime ( fmt )
2014-08-08 09:11:59 -07:00
self . teststamp = \
' # ' + testtime + ' ' + self . prefix + ' ' + self . suspendmode + ' ' + kver
2018-01-30 00:17:20 -08:00
ext = ' '
if self . gzip :
ext = ' .gz '
2014-08-08 09:11:59 -07:00
self . dmesgfile = \
2018-01-30 00:17:20 -08:00
self . testdir + ' / ' + self . prefix + ' _ ' + self . suspendmode + ' _dmesg.txt ' + ext
2014-08-08 09:11:59 -07:00
self . ftracefile = \
2018-01-30 00:17:20 -08:00
self . testdir + ' / ' + self . prefix + ' _ ' + self . suspendmode + ' _ftrace.txt ' + ext
2014-08-08 09:11:59 -07:00
self . htmlfile = \
self . testdir + ' / ' + self . prefix + ' _ ' + self . suspendmode + ' .html '
2016-07-15 23:34:14 +02:00
if not os . path . isdir ( self . testdir ) :
2019-05-14 10:53:58 -07:00
os . makedirs ( self . testdir )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
self . sudoUserchown ( self . testdir )
2018-01-30 00:17:20 -08:00
def getValueList ( self , value ) :
out = [ ]
for i in value . split ( ' , ' ) :
if i . strip ( ) :
out . append ( i . strip ( ) )
return out
2016-12-14 10:37:05 -08:00
def setDeviceFilter ( self , value ) :
2018-01-30 00:17:20 -08:00
self . devicefilter = self . getValueList ( value )
def setCallgraphFilter ( self , value ) :
self . cgfilter = self . getValueList ( value )
2019-05-14 10:53:58 -07:00
def skipKprobes ( self , value ) :
for k in self . getValueList ( value ) :
if k in self . tracefuncs :
del self . tracefuncs [ k ]
if k in self . dev_tracefuncs :
del self . dev_tracefuncs [ k ]
2018-01-30 00:17:20 -08:00
def setCallgraphBlacklist ( self , file ) :
self . cgblacklist = self . listFromFile ( file )
2016-07-15 23:34:14 +02:00
def rtcWakeAlarmOn ( self ) :
2016-12-14 10:37:06 -08:00
call ( ' echo 0 > ' + self . rtcpath + ' /wakealarm ' , shell = True )
2018-01-30 00:17:20 -08:00
nowtime = open ( self . rtcpath + ' /since_epoch ' , ' r ' ) . read ( ) . strip ( )
if nowtime :
nowtime = int ( nowtime )
2014-08-08 09:11:59 -07:00
else :
# if hardware time fails, use the software time
nowtime = int ( datetime . now ( ) . strftime ( ' %s ' ) )
alarm = nowtime + self . rtcwaketime
2016-12-14 10:37:06 -08:00
call ( ' echo %d > %s /wakealarm ' % ( alarm , self . rtcpath ) , shell = True )
2016-07-15 23:34:14 +02:00
def rtcWakeAlarmOff ( self ) :
2016-12-14 10:37:06 -08:00
call ( ' echo 0 > %s /wakealarm ' % self . rtcpath , shell = True )
2016-07-15 23:34:14 +02:00
def initdmesg ( self ) :
# get the latest time stamp from the dmesg log
2020-11-10 18:36:17 -08:00
lines = Popen ( ' dmesg ' , stdout = PIPE ) . stdout . readlines ( )
2016-07-15 23:34:14 +02:00
ktime = ' 0 '
2020-11-10 18:36:17 -08:00
for line in reversed ( lines ) :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
line = ascii ( line ) . replace ( ' \r \n ' , ' ' )
2016-07-15 23:34:14 +02:00
idx = line . find ( ' [ ' )
if idx > 1 :
line = line [ idx : ]
m = re . match ( ' [ \t ]*( \ [ *)(?P<ktime>[0-9 \ .]*)( \ ]) (?P<msg>.*) ' , line )
if ( m ) :
ktime = m . group ( ' ktime ' )
2020-11-10 18:36:17 -08:00
break
2016-07-15 23:34:14 +02:00
self . dmesgstart = float ( ktime )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
def getdmesg ( self , testdata ) :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
op = self . writeDatafileHeader ( self . dmesgfile , testdata )
2016-07-15 23:34:14 +02:00
# store all new dmesg lines since initdmesg was called
2016-12-14 10:37:06 -08:00
fp = Popen ( ' dmesg ' , stdout = PIPE ) . stdout
2016-07-15 23:34:14 +02:00
for line in fp :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
line = ascii ( line ) . replace ( ' \r \n ' , ' ' )
2016-07-15 23:34:14 +02:00
idx = line . find ( ' [ ' )
if idx > 1 :
line = line [ idx : ]
m = re . match ( ' [ \t ]*( \ [ *)(?P<ktime>[0-9 \ .]*)( \ ]) (?P<msg>.*) ' , line )
if ( not m ) :
continue
ktime = float ( m . group ( ' ktime ' ) )
if ktime > self . dmesgstart :
op . write ( line )
fp . close ( )
op . close ( )
2018-01-30 00:17:20 -08:00
def listFromFile ( self , file ) :
list = [ ]
2016-07-15 23:34:14 +02:00
fp = open ( file )
2018-01-30 00:17:20 -08:00
for i in fp . read ( ) . split ( ' \n ' ) :
i = i . strip ( )
if i and i [ 0 ] != ' # ' :
list . append ( i )
2016-07-15 23:34:14 +02:00
fp . close ( )
2018-01-30 00:17:20 -08:00
return list
def addFtraceFilterFunctions ( self , file ) :
for i in self . listFromFile ( file ) :
2016-07-15 23:34:14 +02:00
if len ( i ) < 2 :
continue
self . tracefuncs [ i ] = dict ( )
def getFtraceFilterFunctions ( self , current ) :
2017-07-05 14:42:55 -07:00
self . rootCheck ( True )
2016-07-15 23:34:14 +02:00
if not current :
2016-12-14 10:37:06 -08:00
call ( ' cat ' + self . tpath + ' available_filter_functions ' , shell = True )
2016-07-15 23:34:14 +02:00
return
2018-01-30 00:17:20 -08:00
master = self . listFromFile ( self . tpath + ' available_filter_functions ' )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for i in sorted ( self . tracefuncs ) :
2016-12-14 10:37:06 -08:00
if ' func ' in self . tracefuncs [ i ] :
i = self . tracefuncs [ i ] [ ' func ' ]
if i in master :
2019-05-14 10:53:58 -07:00
print ( i )
2016-12-14 10:37:06 -08:00
else :
2019-05-14 10:53:58 -07:00
print ( self . colorText ( i ) )
2016-07-15 23:34:14 +02:00
def setFtraceFilterFunctions ( self , list ) :
2018-01-30 00:17:20 -08:00
master = self . listFromFile ( self . tpath + ' available_filter_functions ' )
2016-07-15 23:34:14 +02:00
flist = ' '
for i in list :
if i not in master :
continue
if ' [ ' in i :
flist + = i . split ( ' ' ) [ 0 ] + ' \n '
else :
flist + = i + ' \n '
fp = open ( self . tpath + ' set_graph_function ' , ' w ' )
fp . write ( flist )
fp . close ( )
def basicKprobe ( self , name ) :
2016-12-14 10:37:05 -08:00
self . kprobes [ name ] = { ' name ' : name , ' func ' : name , ' args ' : dict ( ) , ' format ' : name }
2016-07-15 23:34:14 +02:00
def defaultKprobe ( self , name , kdata ) :
k = kdata
2016-12-14 10:37:05 -08:00
for field in [ ' name ' , ' format ' , ' func ' ] :
2016-07-15 23:34:14 +02:00
if field not in k :
k [ field ] = name
2016-12-14 10:37:06 -08:00
if self . archargs in k :
k [ ' args ' ] = k [ self . archargs ]
2016-07-15 23:34:14 +02:00
else :
k [ ' args ' ] = dict ( )
k [ ' format ' ] = name
self . kprobes [ name ] = k
def kprobeColor ( self , name ) :
if name not in self . kprobes or ' color ' not in self . kprobes [ name ] :
return ' '
return self . kprobes [ name ] [ ' color ' ]
def kprobeDisplayName ( self , name , dataraw ) :
if name not in self . kprobes :
self . basicKprobe ( name )
data = ' '
quote = 0
# first remvoe any spaces inside quotes, and the quotes
for c in dataraw :
if c == ' " ' :
quote = ( quote + 1 ) % 2
if quote and c == ' ' :
data + = ' _ '
elif c != ' " ' :
data + = c
fmt , args = self . kprobes [ name ] [ ' format ' ] , self . kprobes [ name ] [ ' args ' ]
arglist = dict ( )
# now process the args
for arg in sorted ( args ) :
arglist [ arg ] = ' '
m = re . match ( ' .* ' + arg + ' =(?P<arg>.*) ' , data ) ;
if m :
arglist [ arg ] = m . group ( ' arg ' )
else :
m = re . match ( ' .* ' + arg + ' =(?P<arg>.*) ' , data ) ;
if m :
arglist [ arg ] = m . group ( ' arg ' )
out = fmt . format ( * * arglist )
out = out . replace ( ' ' , ' _ ' ) . replace ( ' " ' , ' ' )
return out
2016-12-14 10:37:06 -08:00
def kprobeText ( self , kname , kprobe ) :
name = fmt = func = kname
args = dict ( )
if ' name ' in kprobe :
name = kprobe [ ' name ' ]
if ' format ' in kprobe :
fmt = kprobe [ ' format ' ]
if ' func ' in kprobe :
func = kprobe [ ' func ' ]
if self . archargs in kprobe :
args = kprobe [ self . archargs ]
if ' args ' in kprobe :
args = kprobe [ ' args ' ]
2016-07-15 23:34:14 +02:00
if re . findall ( ' { (?P<n>[a-z,A-Z,0-9]*)} ' , func ) :
2016-12-14 10:37:07 -08:00
doError ( ' Kprobe " %s " has format info in the function name " %s " ' % ( name , func ) )
2016-07-15 23:34:14 +02:00
for arg in re . findall ( ' { (?P<n>[a-z,A-Z,0-9]*)} ' , fmt ) :
if arg not in args :
2016-12-14 10:37:07 -08:00
doError ( ' Kprobe " %s " is missing argument " %s " ' % ( name , arg ) )
2016-07-15 23:34:14 +02:00
val = ' p: %s _cal %s ' % ( name , func )
for i in sorted ( args ) :
val + = ' %s = %s ' % ( i , args [ i ] )
val + = ' \n r: %s _ret %s $retval \n ' % ( name , func )
return val
2016-12-14 10:37:07 -08:00
def addKprobes ( self , output = False ) :
2017-07-05 14:42:55 -07:00
if len ( self . kprobes ) < 1 :
2016-12-14 10:37:07 -08:00
return
if output :
2018-10-08 15:56:32 -07:00
pprint ( ' kprobe functions in this kernel: ' )
2016-07-15 23:34:14 +02:00
# first test each kprobe
rejects = [ ]
2016-12-14 10:37:07 -08:00
# sort kprobes: trace, ub-dev, custom, dev
kpl = [ [ ] , [ ] , [ ] , [ ] ]
2018-01-30 00:17:20 -08:00
linesout = len ( self . kprobes )
2016-07-15 23:34:14 +02:00
for name in sorted ( self . kprobes ) :
2016-12-14 10:37:07 -08:00
res = self . colorText ( ' YES ' , 32 )
2016-12-14 10:37:06 -08:00
if not self . testKprobe ( name , self . kprobes [ name ] ) :
2016-12-14 10:37:07 -08:00
res = self . colorText ( ' NO ' )
2016-07-15 23:34:14 +02:00
rejects . append ( name )
2016-12-14 10:37:07 -08:00
else :
if name in self . tracefuncs :
kpl [ 0 ] . append ( name )
elif name in self . dev_tracefuncs :
if ' ub ' in self . dev_tracefuncs [ name ] :
kpl [ 1 ] . append ( name )
else :
kpl [ 3 ] . append ( name )
else :
kpl [ 2 ] . append ( name )
if output :
2018-10-08 15:56:32 -07:00
pprint ( ' %s : %s ' % ( name , res ) )
2016-12-14 10:37:07 -08:00
kplist = kpl [ 0 ] + kpl [ 1 ] + kpl [ 2 ] + kpl [ 3 ]
2016-07-15 23:34:14 +02:00
# remove all failed ones from the list
for name in rejects :
self . kprobes . pop ( name )
2016-12-14 10:37:07 -08:00
# set the kprobes all at once
2016-07-15 23:34:14 +02:00
self . fsetVal ( ' ' , ' kprobe_events ' )
kprobeevents = ' '
2016-12-14 10:37:07 -08:00
for kp in kplist :
2016-12-14 10:37:06 -08:00
kprobeevents + = self . kprobeText ( kp , self . kprobes [ kp ] )
2016-07-15 23:34:14 +02:00
self . fsetVal ( kprobeevents , ' kprobe_events ' )
2016-12-14 10:37:07 -08:00
if output :
2018-01-30 00:17:20 -08:00
check = self . fgetVal ( ' kprobe_events ' )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
linesack = ( len ( check . split ( ' \n ' ) ) - 1 ) / / 2
2018-10-08 15:56:32 -07:00
pprint ( ' kprobe functions enabled: %d / %d ' % ( linesack , linesout ) )
2016-07-15 23:34:14 +02:00
self . fsetVal ( ' 1 ' , ' events/kprobes/enable ' )
2016-12-14 10:37:06 -08:00
def testKprobe ( self , kname , kprobe ) :
2016-12-14 10:37:07 -08:00
self . fsetVal ( ' 0 ' , ' events/kprobes/enable ' )
2016-12-14 10:37:06 -08:00
kprobeevents = self . kprobeText ( kname , kprobe )
2016-07-15 23:34:14 +02:00
if not kprobeevents :
return False
try :
self . fsetVal ( kprobeevents , ' kprobe_events ' )
check = self . fgetVal ( ' kprobe_events ' )
except :
return False
linesout = len ( kprobeevents . split ( ' \n ' ) )
linesack = len ( check . split ( ' \n ' ) )
if linesack < linesout :
return False
return True
2019-09-04 14:04:52 -07:00
def setVal ( self , val , file ) :
2016-07-15 23:34:14 +02:00
if not os . path . exists ( file ) :
return False
try :
2019-09-04 14:04:52 -07:00
fp = open ( file , ' wb ' , 0 )
fp . write ( val . encode ( ) )
2016-12-14 10:37:07 -08:00
fp . flush ( )
2016-07-15 23:34:14 +02:00
fp . close ( )
except :
2017-07-05 14:42:55 -07:00
return False
2016-07-15 23:34:14 +02:00
return True
2019-09-04 14:04:52 -07:00
def fsetVal ( self , val , path ) :
return self . setVal ( val , self . tpath + path )
2018-01-30 00:17:20 -08:00
def getVal ( self , file ) :
2016-07-15 23:34:14 +02:00
res = ' '
if not os . path . exists ( file ) :
return res
try :
fp = open ( file , ' r ' )
res = fp . read ( )
fp . close ( )
except :
pass
return res
2018-01-30 00:17:20 -08:00
def fgetVal ( self , path ) :
return self . getVal ( self . tpath + path )
2016-07-15 23:34:14 +02:00
def cleanupFtrace ( self ) :
2018-01-30 00:17:20 -08:00
if ( self . usecallgraph or self . usetraceevents or self . usedevsrc ) :
2016-07-15 23:34:14 +02:00
self . fsetVal ( ' 0 ' , ' events/kprobes/enable ' )
self . fsetVal ( ' ' , ' kprobe_events ' )
2018-01-30 00:17:20 -08:00
self . fsetVal ( ' 1024 ' , ' buffer_size_kb ' )
2016-07-15 23:34:14 +02:00
def setupAllKprobes ( self ) :
for name in self . tracefuncs :
self . defaultKprobe ( name , self . tracefuncs [ name ] )
for name in self . dev_tracefuncs :
self . defaultKprobe ( name , self . dev_tracefuncs [ name ] )
def isCallgraphFunc ( self , name ) :
2016-12-14 10:37:06 -08:00
if len ( self . tracefuncs ) < 1 and self . suspendmode == ' command ' :
2016-07-15 23:34:14 +02:00
return True
for i in self . tracefuncs :
if ' func ' in self . tracefuncs [ i ] :
2016-12-14 10:37:06 -08:00
f = self . tracefuncs [ i ] [ ' func ' ]
2016-07-15 23:34:14 +02:00
else :
2016-12-14 10:37:06 -08:00
f = i
if name == f :
return True
2016-07-15 23:34:14 +02:00
return False
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
def initFtrace ( self , quiet = False ) :
if not quiet :
sysvals . printSystemInfo ( False )
pprint ( ' INITIALIZING FTRACE... ' )
2016-07-15 23:34:14 +02:00
# turn trace off
self . fsetVal ( ' 0 ' , ' tracing_on ' )
self . cleanupFtrace ( )
2020-11-10 18:36:17 -08:00
self . testVal ( self . pmdpath , ' basic ' , ' 1 ' )
2016-07-15 23:34:14 +02:00
# set the trace clock to global
self . fsetVal ( ' global ' , ' trace_clock ' )
self . fsetVal ( ' nop ' , ' current_tracer ' )
2018-01-30 00:17:20 -08:00
# set trace buffer to an appropriate value
cpus = max ( 1 , self . cpucount )
if self . bufsize > 0 :
tgtsize = self . bufsize
elif self . usecallgraph or self . usedevsrc :
2019-05-14 10:53:57 -07:00
bmax = ( 1 * 1024 * 1024 ) if self . suspendmode in [ ' disk ' , ' command ' ] \
else ( 3 * 1024 * 1024 )
2018-10-08 15:56:32 -07:00
tgtsize = min ( self . memfree , bmax )
2017-07-05 14:42:55 -07:00
else :
2018-01-30 00:17:20 -08:00
tgtsize = 65536
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
while not self . fsetVal ( ' %d ' % ( tgtsize / / cpus ) , ' buffer_size_kb ' ) :
2018-01-30 00:17:20 -08:00
# if the size failed to set, lower it and keep trying
tgtsize - = 65536
if tgtsize < 65536 :
tgtsize = int ( self . fgetVal ( ' buffer_size_kb ' ) ) * cpus
break
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
self . vprint ( ' Setting trace buffers to %d kB ( %d kB per cpu) ' % ( tgtsize , tgtsize / cpus ) )
2016-12-14 10:37:06 -08:00
# initialize the callgraph trace
2016-07-15 23:34:14 +02:00
if ( self . usecallgraph ) :
# set trace type
self . fsetVal ( ' function_graph ' , ' current_tracer ' )
self . fsetVal ( ' ' , ' set_ftrace_filter ' )
# set trace format options
self . fsetVal ( ' print-parent ' , ' trace_options ' )
self . fsetVal ( ' funcgraph-abstime ' , ' trace_options ' )
self . fsetVal ( ' funcgraph-cpu ' , ' trace_options ' )
self . fsetVal ( ' funcgraph-duration ' , ' trace_options ' )
self . fsetVal ( ' funcgraph-proc ' , ' trace_options ' )
self . fsetVal ( ' funcgraph-tail ' , ' trace_options ' )
self . fsetVal ( ' nofuncgraph-overhead ' , ' trace_options ' )
self . fsetVal ( ' context-info ' , ' trace_options ' )
self . fsetVal ( ' graph-time ' , ' trace_options ' )
2017-04-07 11:05:35 -07:00
self . fsetVal ( ' %d ' % self . max_graph_depth , ' max_graph_depth ' )
2016-12-14 10:37:06 -08:00
cf = [ ' dpm_run_callback ' ]
2018-01-30 00:17:20 -08:00
if ( self . usetraceevents ) :
2016-12-14 10:37:06 -08:00
cf + = [ ' dpm_prepare ' , ' dpm_complete ' ]
for fn in self . tracefuncs :
if ' func ' in self . tracefuncs [ fn ] :
cf . append ( self . tracefuncs [ fn ] [ ' func ' ] )
else :
cf . append ( fn )
2019-05-14 10:53:58 -07:00
if self . ftop :
self . setFtraceFilterFunctions ( [ self . ftopfunc ] )
else :
self . setFtraceFilterFunctions ( cf )
2016-12-14 10:37:06 -08:00
# initialize the kprobe trace
elif self . usekprobes :
for name in self . tracefuncs :
self . defaultKprobe ( name , self . tracefuncs [ name ] )
if self . usedevsrc :
for name in self . dev_tracefuncs :
self . defaultKprobe ( name , self . dev_tracefuncs [ name ] )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if not quiet :
pprint ( ' INITIALIZING KPROBES... ' )
2016-12-14 10:37:07 -08:00
self . addKprobes ( self . verbose )
2016-07-15 23:34:14 +02:00
if ( self . usetraceevents ) :
# turn trace events on
events = iter ( self . traceevents )
for e in events :
self . fsetVal ( ' 1 ' , ' events/power/ ' + e + ' /enable ' )
# clear the trace buffer
self . fsetVal ( ' ' , ' trace ' )
def verifyFtrace ( self ) :
# files needed for any trace data
files = [ ' buffer_size_kb ' , ' current_tracer ' , ' trace ' , ' trace_clock ' ,
' trace_marker ' , ' trace_options ' , ' tracing_on ' ]
# files needed for callgraph trace data
tp = self . tpath
if ( self . usecallgraph ) :
files + = [
' available_filter_functions ' ,
' set_ftrace_filter ' ,
' set_graph_function '
]
for f in files :
if ( os . path . exists ( tp + f ) == False ) :
return False
return True
def verifyKprobes ( self ) :
# files needed for kprobes to work
files = [ ' kprobe_events ' , ' events ' ]
tp = self . tpath
for f in files :
if ( os . path . exists ( tp + f ) == False ) :
return False
return True
2016-12-14 10:37:07 -08:00
def colorText ( self , str , color = 31 ) :
2016-07-15 23:34:14 +02:00
if not self . ansi :
return str
2016-12-14 10:37:07 -08:00
return ' \x1B [ %d ;40m %s \x1B [m ' % ( color , str )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
def writeDatafileHeader ( self , filename , testdata ) :
2018-01-30 00:17:20 -08:00
fp = self . openlog ( filename , ' w ' )
fp . write ( ' %s \n %s \n # command | %s \n ' % ( self . teststamp , self . sysstamp , self . cmdline ) )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for test in testdata :
if ' fw ' in test :
fw = test [ ' fw ' ]
2017-07-05 14:42:55 -07:00
if ( fw ) :
fp . write ( ' # fwsuspend %u fwresume %u \n ' % ( fw [ 0 ] , fw [ 1 ] ) )
2019-05-14 10:53:57 -07:00
if ' turbo ' in test :
fp . write ( ' # turbostat %s \n ' % test [ ' turbo ' ] )
2019-05-14 10:53:58 -07:00
if ' wifi ' in test :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
fp . write ( ' # wifi %s \n ' % test [ ' wifi ' ] )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if test [ ' error ' ] or len ( testdata ) > 1 :
fp . write ( ' # enter_sleep_error %s \n ' % test [ ' error ' ] )
2018-01-30 00:17:20 -08:00
return fp
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
def sudoUserchown ( self , dir ) :
if os . path . exists ( dir ) and self . sudouser :
2018-01-30 00:17:20 -08:00
cmd = ' chown -R {0} : {0} {1} > /dev/null 2>&1 '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
call ( cmd . format ( self . sudouser , dir ) , shell = True )
2018-01-30 00:17:20 -08:00
def outputResult ( self , testdata , num = 0 ) :
if not self . result :
return
n = ' '
if num > 0 :
n = ' %d ' % num
fp = open ( self . result , ' a ' )
if ' error ' in testdata :
fp . write ( ' result %s : fail \n ' % n )
fp . write ( ' error %s : %s \n ' % ( n , testdata [ ' error ' ] ) )
else :
fp . write ( ' result %s : pass \n ' % n )
for v in [ ' suspend ' , ' resume ' , ' boot ' , ' lastinit ' ] :
if v in testdata :
fp . write ( ' %s %s : %.3f \n ' % ( v , n , testdata [ v ] ) )
for v in [ ' fwsuspend ' , ' fwresume ' ] :
if v in testdata :
fp . write ( ' %s %s : %.3f \n ' % ( v , n , testdata [ v ] / 1000000.0 ) )
if ' bugurl ' in testdata :
fp . write ( ' url %s : %s \n ' % ( n , testdata [ ' bugurl ' ] ) )
2017-07-05 14:42:55 -07:00
fp . close ( )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . sudoUserchown ( self . result )
2018-01-30 00:17:20 -08:00
def configFile ( self , file ) :
dir = os . path . dirname ( os . path . realpath ( __file__ ) )
if os . path . exists ( file ) :
return file
elif os . path . exists ( dir + ' / ' + file ) :
return dir + ' / ' + file
elif os . path . exists ( dir + ' /config/ ' + file ) :
return dir + ' /config/ ' + file
return ' '
def openlog ( self , filename , mode ) :
isgz = self . gzip
if mode == ' r ' :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
with gzip . open ( filename , mode + ' t ' ) as fp :
2018-01-30 00:17:20 -08:00
test = fp . read ( 64 )
isgz = True
except :
isgz = False
if isgz :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
return gzip . open ( filename , mode + ' t ' )
2018-01-30 00:17:20 -08:00
return open ( filename , mode )
2020-11-10 18:36:17 -08:00
def putlog ( self , filename , text ) :
with self . openlog ( filename , ' a ' ) as fp :
fp . write ( text )
fp . close ( )
def dlog ( self , text ) :
self . putlog ( self . dmesgfile , ' # %s \n ' % text )
def flog ( self , text ) :
self . putlog ( self . ftracefile , text )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
def b64unzip ( self , data ) :
try :
out = codecs . decode ( base64 . b64decode ( data ) , ' zlib ' ) . decode ( )
except :
out = data
return out
def b64zip ( self , data ) :
out = base64 . b64encode ( codecs . encode ( data . encode ( ) , ' zlib ' ) ) . decode ( )
return out
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
def platforminfo ( self , cmdafter ) :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
# add platform info on to a completed ftrace file
if not os . path . exists ( self . ftracefile ) :
return False
footer = ' # \n '
# add test command string line if need be
if self . suspendmode == ' command ' and self . testcommand :
footer + = ' # platform-testcmd: %s \n ' % ( self . testcommand )
# get a list of target devices from the ftrace file
props = dict ( )
tp = TestProps ( )
tf = self . openlog ( self . ftracefile , ' r ' )
for line in tf :
2020-07-20 18:02:49 -07:00
if tp . stampInfo ( line , self ) :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
continue
# parse only valid lines, if this is not one move on
m = re . match ( tp . ftrace_line_fmt , line )
if ( not m or ' device_pm_callback_start ' not in line ) :
continue
m = re . match ( ' .*: (?P<drv>.*) (?P<d>.*), parent: *(?P<p>.*), .* ' , m . group ( ' msg ' ) ) ;
if ( not m ) :
continue
dev = m . group ( ' d ' )
if dev not in props :
props [ dev ] = DevProps ( )
tf . close ( )
# now get the syspath for each target device
for dirname , dirnames , filenames in os . walk ( ' /sys/devices ' ) :
if ( re . match ( ' .*/power ' , dirname ) and ' async ' in filenames ) :
dev = dirname . split ( ' / ' ) [ - 2 ]
if dev in props and ( not props [ dev ] . syspath or len ( dirname ) < len ( props [ dev ] . syspath ) ) :
props [ dev ] . syspath = dirname [ : - 6 ]
# now fill in the properties for our target devices
for dev in sorted ( props ) :
dirname = props [ dev ] . syspath
if not dirname or not os . path . exists ( dirname ) :
continue
with open ( dirname + ' /power/async ' ) as fp :
text = fp . read ( )
props [ dev ] . isasync = False
if ' enabled ' in text :
props [ dev ] . isasync = True
fields = os . listdir ( dirname )
if ' product ' in fields :
with open ( dirname + ' /product ' , ' rb ' ) as fp :
props [ dev ] . altname = ascii ( fp . read ( ) )
elif ' name ' in fields :
with open ( dirname + ' /name ' , ' rb ' ) as fp :
props [ dev ] . altname = ascii ( fp . read ( ) )
elif ' model ' in fields :
with open ( dirname + ' /model ' , ' rb ' ) as fp :
props [ dev ] . altname = ascii ( fp . read ( ) )
elif ' description ' in fields :
with open ( dirname + ' /description ' , ' rb ' ) as fp :
props [ dev ] . altname = ascii ( fp . read ( ) )
elif ' id ' in fields :
with open ( dirname + ' /id ' , ' rb ' ) as fp :
props [ dev ] . altname = ascii ( fp . read ( ) )
elif ' idVendor ' in fields and ' idProduct ' in fields :
idv , idp = ' ' , ' '
with open ( dirname + ' /idVendor ' , ' rb ' ) as fp :
idv = ascii ( fp . read ( ) ) . strip ( )
with open ( dirname + ' /idProduct ' , ' rb ' ) as fp :
idp = ascii ( fp . read ( ) ) . strip ( )
props [ dev ] . altname = ' %s : %s ' % ( idv , idp )
if props [ dev ] . altname :
out = props [ dev ] . altname . strip ( ) . replace ( ' \n ' , ' ' ) \
. replace ( ' , ' , ' ' ) . replace ( ' ; ' , ' ' )
props [ dev ] . altname = out
# add a devinfo line to the bottom of ftrace
out = ' '
for dev in sorted ( props ) :
out + = props [ dev ] . out ( dev )
footer + = ' # platform-devinfo: %s \n ' % self . b64zip ( out )
# add a line for each of these commands with their outputs
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
for name , cmdline , info in cmdafter :
footer + = ' # platform- %s : %s | %s \n ' % ( name , cmdline , self . b64zip ( info ) )
2020-11-10 18:36:17 -08:00
self . flog ( footer )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
return True
def commonPrefix ( self , list ) :
if len ( list ) < 2 :
return ' '
prefix = list [ 0 ]
for s in list [ 1 : ] :
while s [ : len ( prefix ) ] != prefix and prefix :
prefix = prefix [ : len ( prefix ) - 1 ]
if not prefix :
break
if ' / ' in prefix and prefix [ - 1 ] != ' / ' :
prefix = prefix [ 0 : prefix . rfind ( ' / ' ) + 1 ]
return prefix
def dictify ( self , text , format ) :
out = dict ( )
header = True if format == 1 else False
delim = ' ' if format == 1 else ' : '
for line in text . split ( ' \n ' ) :
if header :
header , out [ ' @ ' ] = False , line
continue
line = line . strip ( )
if delim in line :
data = line . split ( delim , 1 )
num = re . search ( r ' [ \ d]+ ' , data [ 1 ] )
if format == 2 and num :
out [ data [ 0 ] . strip ( ) ] = num . group ( )
else :
out [ data [ 0 ] . strip ( ) ] = data [ 1 ]
return out
def cmdinfo ( self , begin , debug = False ) :
out = [ ]
if begin :
self . cmd1 = dict ( )
for cargs in self . infocmds :
delta , name = cargs [ 0 ] , cargs [ 1 ]
cmdline , cmdpath = ' ' . join ( cargs [ 2 : ] ) , self . getExec ( cargs [ 2 ] )
if not cmdpath or ( begin and not delta ) :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
continue
2020-11-10 18:36:17 -08:00
self . dlog ( ' [ %s ] ' % cmdline )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
try :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
fp = Popen ( [ cmdpath ] + cargs [ 3 : ] , stdout = PIPE , stderr = PIPE ) . stdout
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
info = ascii ( fp . read ( ) ) . strip ( )
fp . close ( )
except :
continue
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if not debug and begin :
self . cmd1 [ name ] = self . dictify ( info , delta )
elif not debug and delta and name in self . cmd1 :
before , after = self . cmd1 [ name ] , self . dictify ( info , delta )
dinfo = ( ' \t %s \n ' % before [ ' @ ' ] ) if ' @ ' in before else ' '
prefix = self . commonPrefix ( list ( before . keys ( ) ) )
for key in sorted ( before ) :
if key in after and before [ key ] != after [ key ] :
title = key . replace ( prefix , ' ' )
if delta == 2 :
dinfo + = ' \t %s : %s -> %s \n ' % \
( title , before [ key ] . strip ( ) , after [ key ] . strip ( ) )
else :
dinfo + = ' %10s (start) : %s \n %10s (after) : %s \n ' % \
( title , before [ key ] , title , after [ key ] )
dinfo = ' \t nothing changed ' if not dinfo else dinfo . rstrip ( )
out . append ( ( name , cmdline , dinfo ) )
else :
out . append ( ( name , cmdline , ' \t nothing ' if not info else info ) )
return out
2020-11-10 18:36:17 -08:00
def testVal ( self , file , fmt = ' basic ' , value = ' ' ) :
if file == ' restoreall ' :
for f in self . cfgdef :
if os . path . exists ( f ) :
fp = open ( f , ' w ' )
fp . write ( self . cfgdef [ f ] )
fp . close ( )
self . cfgdef = dict ( )
elif value and os . path . exists ( file ) :
fp = open ( file , ' r+ ' )
if fmt == ' radio ' :
m = re . match ( ' .* \ [(?P<v>.*) \ ].* ' , fp . read ( ) )
if m :
self . cfgdef [ file ] = m . group ( ' v ' )
elif fmt == ' acpi ' :
line = fp . read ( ) . strip ( ) . split ( ' \n ' ) [ - 1 ]
m = re . match ( ' .* (?P<v>[0-9A-Fx]*) .* ' , line )
if m :
self . cfgdef [ file ] = m . group ( ' v ' )
else :
self . cfgdef [ file ] = fp . read ( ) . strip ( )
fp . write ( value )
fp . close ( )
2019-05-14 10:53:57 -07:00
def haveTurbostat ( self ) :
2019-05-14 10:53:58 -07:00
if not self . tstat :
return False
2019-05-14 10:53:57 -07:00
cmd = self . getExec ( ' turbostat ' )
if not cmd :
return False
fp = Popen ( [ cmd , ' -v ' ] , stdout = PIPE , stderr = PIPE ) . stderr
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
out = ascii ( fp . read ( ) ) . strip ( )
2019-05-14 10:53:57 -07:00
fp . close ( )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if re . match ( ' turbostat version .* ' , out ) :
self . vprint ( out )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
return True
return False
2019-05-14 10:53:57 -07:00
def turbostat ( self ) :
cmd = self . getExec ( ' turbostat ' )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
rawout = keyline = valline = ' '
2019-05-14 10:53:58 -07:00
fullcmd = ' %s -q -S echo freeze > %s ' % ( cmd , self . powerfile )
fp = Popen ( [ ' sh ' , ' -c ' , fullcmd ] , stdout = PIPE , stderr = PIPE ) . stderr
2019-05-14 10:53:57 -07:00
for line in fp :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
line = ascii ( line )
rawout + = line
if keyline and valline :
2019-05-14 10:53:57 -07:00
continue
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
if re . match ( ' (?i)Avg_MHz.* ' , line ) :
keyline = line . strip ( ) . split ( )
elif keyline :
valline = line . strip ( ) . split ( )
2019-05-14 10:53:57 -07:00
fp . close ( )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
if not keyline or not valline or len ( keyline ) != len ( valline ) :
errmsg = ' unrecognized turbostat output: \n ' + rawout . strip ( )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
self . vprint ( errmsg )
if not self . verbose :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
pprint ( errmsg )
return ' '
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if self . verbose :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
pprint ( rawout . strip ( ) )
2019-05-14 10:53:57 -07:00
out = [ ]
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for key in keyline :
idx = keyline . index ( key )
val = valline [ idx ]
out . append ( ' %s = %s ' % ( key , val ) )
2019-05-14 10:53:57 -07:00
return ' | ' . join ( out )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
def wifiDetails ( self , dev ) :
try :
info = open ( ' /sys/class/net/ %s /device/uevent ' % dev , ' r ' ) . read ( ) . strip ( )
except :
return dev
vals = [ dev ]
for prop in info . split ( ' \n ' ) :
if prop . startswith ( ' DRIVER= ' ) or prop . startswith ( ' PCI_ID= ' ) :
vals . append ( prop . split ( ' = ' ) [ - 1 ] )
return ' : ' . join ( vals )
def checkWifi ( self , dev = ' ' ) :
try :
w = open ( ' /proc/net/wireless ' , ' r ' ) . read ( ) . strip ( )
except :
return ' '
for line in reversed ( w . split ( ' \n ' ) ) :
m = re . match ( ' *(?P<dev>.*): (?P<stat>[0-9a-f]*) .* ' , w . split ( ' \n ' ) [ - 1 ] )
if not m or ( dev and dev != m . group ( ' dev ' ) ) :
2019-05-14 10:53:58 -07:00
continue
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
return m . group ( ' dev ' )
return ' '
def pollWifi ( self , dev , timeout = 60 ) :
start = time . time ( )
while ( time . time ( ) - start ) < timeout :
w = self . checkWifi ( dev )
if w :
return ' %s reconnected %.2f ' % \
( self . wifiDetails ( dev ) , max ( 0 , time . time ( ) - start ) )
time . sleep ( 0.01 )
return ' %s timeout %d ' % ( self . wifiDetails ( dev ) , timeout )
2019-05-14 10:53:58 -07:00
def errorSummary ( self , errinfo , msg ) :
found = False
for entry in errinfo :
if re . match ( entry [ ' match ' ] , msg ) :
entry [ ' count ' ] + = 1
if self . hostname not in entry [ ' urls ' ] :
entry [ ' urls ' ] [ self . hostname ] = [ self . htmlfile ]
elif self . htmlfile not in entry [ ' urls ' ] [ self . hostname ] :
entry [ ' urls ' ] [ self . hostname ] . append ( self . htmlfile )
found = True
break
if found :
return
arr = msg . split ( )
for j in range ( len ( arr ) ) :
if re . match ( ' ^[0-9, \ - \ .]*$ ' , arr [ j ] ) :
arr [ j ] = ' [0-9, \ - \ .]* '
else :
arr [ j ] = arr [ j ] \
. replace ( ' \\ ' , ' \\ \\ ' ) . replace ( ' ] ' , ' \ ] ' ) . replace ( ' [ ' , ' \ [ ' ) \
. replace ( ' . ' , ' \ . ' ) . replace ( ' + ' , ' \ + ' ) . replace ( ' * ' , ' \ * ' ) \
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
. replace ( ' ( ' , ' \ ( ' ) . replace ( ' ) ' , ' \ ) ' ) . replace ( ' } ' , ' \ } ' ) \
. replace ( ' { ' , ' \ { ' )
mstr = ' * ' . join ( arr )
2019-05-14 10:53:58 -07:00
entry = {
' line ' : msg ,
' match ' : mstr ,
' count ' : 1 ,
' urls ' : { self . hostname : [ self . htmlfile ] }
}
errinfo . append ( entry )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
def multistat ( self , start , idx , finish ) :
if ' time ' in self . multitest :
id = ' %d Duration= %d min ' % ( idx + 1 , self . multitest [ ' time ' ] )
else :
id = ' %d / %d ' % ( idx + 1 , self . multitest [ ' count ' ] )
t = time . time ( )
if ' start ' not in self . multitest :
self . multitest [ ' start ' ] = self . multitest [ ' last ' ] = t
self . multitest [ ' total ' ] = 0.0
pprint ( ' TEST ( %s ) START ' % id )
return
dt = t - self . multitest [ ' last ' ]
if not start :
if idx == 0 and self . multitest [ ' delay ' ] > 0 :
self . multitest [ ' total ' ] + = self . multitest [ ' delay ' ]
pprint ( ' TEST ( %s ) COMPLETE -- Duration %.1f s ' % ( id , dt ) )
return
self . multitest [ ' total ' ] + = dt
self . multitest [ ' last ' ] = t
avg = self . multitest [ ' total ' ] / idx
if ' time ' in self . multitest :
left = finish - datetime . now ( )
left - = timedelta ( microseconds = left . microseconds )
else :
left = timedelta ( seconds = ( ( self . multitest [ ' count ' ] - idx ) * int ( avg ) ) )
pprint ( ' TEST ( %s ) START - Avg Duration %.1f s, Time left %s ' % \
( id , avg , str ( left ) ) )
def multiinit ( self , c , d ) :
sz , unit = ' count ' , ' m '
if c . endswith ( ' d ' ) or c . endswith ( ' h ' ) or c . endswith ( ' m ' ) :
sz , unit , c = ' time ' , c [ - 1 ] , c [ : - 1 ]
self . multitest [ ' run ' ] = True
self . multitest [ sz ] = getArgInt ( ' multi: n d (exec count) ' , c , 1 , 1000000 , False )
self . multitest [ ' delay ' ] = getArgInt ( ' multi: n d (delay between tests) ' , d , 0 , 3600 , False )
if unit == ' d ' :
self . multitest [ sz ] * = 1440
elif unit == ' h ' :
self . multitest [ sz ] * = 60
2020-11-10 18:36:17 -08:00
def displayControl ( self , cmd ) :
xset , ret = ' timeout 10 xset -d :0.0 {0} ' , 0
if self . sudouser :
xset = ' sudo -u %s %s ' % ( self . sudouser , xset )
if cmd == ' init ' :
ret = call ( xset . format ( ' dpms 0 0 0 ' ) , shell = True )
if not ret :
ret = call ( xset . format ( ' s off ' ) , shell = True )
elif cmd == ' reset ' :
ret = call ( xset . format ( ' s reset ' ) , shell = True )
elif cmd in [ ' on ' , ' off ' , ' standby ' , ' suspend ' ] :
b4 = self . displayControl ( ' stat ' )
ret = call ( xset . format ( ' dpms force %s ' % cmd ) , shell = True )
if not ret :
curr = self . displayControl ( ' stat ' )
self . vprint ( ' Display Switched: %s -> %s ' % ( b4 , curr ) )
if curr != cmd :
self . vprint ( ' WARNING: Display failed to change to %s ' % cmd )
if ret :
self . vprint ( ' WARNING: Display failed to change to %s with xset ' % cmd )
return ret
elif cmd == ' stat ' :
fp = Popen ( xset . format ( ' q ' ) . split ( ' ' ) , stdout = PIPE ) . stdout
ret = ' unknown '
for line in fp :
m = re . match ( ' [ \ s]*Monitor is (?P<m>.*) ' , ascii ( line ) )
if ( m and len ( m . group ( ' m ' ) ) > = 2 ) :
out = m . group ( ' m ' ) . lower ( )
ret = out [ 3 : ] if out [ 0 : 2 ] == ' in ' else out
break
fp . close ( )
return ret
def setRuntimeSuspend ( self , before = True ) :
if before :
# runtime suspend disable or enable
if self . rs > 0 :
self . rstgt , self . rsval , self . rsdir = ' on ' , ' auto ' , ' enabled '
else :
self . rstgt , self . rsval , self . rsdir = ' auto ' , ' on ' , ' disabled '
pprint ( ' CONFIGURING RUNTIME SUSPEND... ' )
self . rslist = deviceInfo ( self . rstgt )
for i in self . rslist :
self . setVal ( self . rsval , i )
pprint ( ' runtime suspend %s on all devices ( %d changed) ' % ( self . rsdir , len ( self . rslist ) ) )
pprint ( ' waiting 5 seconds... ' )
time . sleep ( 5 )
else :
# runtime suspend re-enable or re-disable
for i in self . rslist :
self . setVal ( self . rstgt , i )
pprint ( ' runtime suspend settings restored on %d devices ' % len ( self . rslist ) )
2014-01-16 16:18:22 -08:00
2014-08-08 09:11:59 -07:00
sysvals = SystemValues ( )
2018-01-30 00:17:20 -08:00
switchvalues = [ ' enable ' , ' disable ' , ' on ' , ' off ' , ' true ' , ' false ' , ' 1 ' , ' 0 ' ]
switchoff = [ ' disable ' , ' off ' , ' false ' , ' 0 ' ]
2017-04-07 11:05:35 -07:00
suspendmodename = {
' freeze ' : ' Freeze (S0) ' ,
' standby ' : ' Standby (S1) ' ,
' mem ' : ' Suspend (S3) ' ,
' disk ' : ' Hibernate (S4) '
}
2014-08-08 09:11:59 -07:00
2016-07-15 23:34:14 +02:00
# Class: DevProps
# Description:
# Simple class which holds property values collected
# for all the devices used in the timeline.
class DevProps :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
def __init__ ( self ) :
self . syspath = ' '
self . altname = ' '
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
self . isasync = True
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . xtraclass = ' '
self . xtrainfo = ' '
2016-07-15 23:34:14 +02:00
def out ( self , dev ) :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
return ' %s , %s , %d ; ' % ( dev , self . altname , self . isasync )
2016-07-15 23:34:14 +02:00
def debug ( self , dev ) :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
pprint ( ' %s : \n \t altname = %s \n \t async = %s ' % ( dev , self . altname , self . isasync ) )
2016-07-15 23:34:14 +02:00
def altName ( self , dev ) :
if not self . altname or self . altname == dev :
return dev
return ' %s [ %s ] ' % ( self . altname , dev )
def xtraClass ( self ) :
if self . xtraclass :
return ' ' + self . xtraclass
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
if not self . isasync :
2016-07-15 23:34:14 +02:00
return ' sync '
return ' '
def xtraInfo ( self ) :
if self . xtraclass :
return ' ' + self . xtraclass
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
if self . isasync :
2020-07-20 18:02:49 -07:00
return ' (async) '
return ' (sync) '
2016-07-15 23:34:14 +02:00
2014-08-08 09:11:59 -07:00
# Class: DeviceNode
# Description:
# A container used to create a device hierachy, with a single root node
# and a tree of child nodes. Used by Data.deviceTopology()
class DeviceNode :
def __init__ ( self , nodename , nodedepth ) :
self . name = nodename
self . children = [ ]
self . depth = nodedepth
# Class: Data
# Description:
# The primary container for suspend/resume test data. There is one for
# each test run. The data is organized into a cronological hierarchy:
# Data.dmesg {
# phases {
# 10 sequential, non-overlapping phases of S/R
# contents: times for phase start/end, order/color data for html
# devlist {
# device callback or action list for this phase
# device {
# a single device callback or generic action
# contents: start/stop times, pid/cpu/driver info
# parents/children, html id for timeline/callgraph
# optionally includes an ftrace callgraph
2016-12-14 10:37:07 -08:00
# optionally includes dev/ps data
2014-08-08 09:11:59 -07:00
# }
# }
# }
# }
#
2014-01-16 16:18:22 -08:00
class Data :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phasedef = {
' suspend_prepare ' : { ' order ' : 0 , ' color ' : ' #CCFFCC ' } ,
' suspend ' : { ' order ' : 1 , ' color ' : ' #88FF88 ' } ,
' suspend_late ' : { ' order ' : 2 , ' color ' : ' #00AA00 ' } ,
' suspend_noirq ' : { ' order ' : 3 , ' color ' : ' #008888 ' } ,
' suspend_machine ' : { ' order ' : 4 , ' color ' : ' #0000FF ' } ,
' resume_machine ' : { ' order ' : 5 , ' color ' : ' #FF0000 ' } ,
' resume_noirq ' : { ' order ' : 6 , ' color ' : ' #FF9900 ' } ,
' resume_early ' : { ' order ' : 7 , ' color ' : ' #FFCC00 ' } ,
' resume ' : { ' order ' : 8 , ' color ' : ' #FFFF88 ' } ,
' resume_complete ' : { ' order ' : 9 , ' color ' : ' #FFFFCC ' } ,
}
errlist = {
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
' HWERROR ' : r ' .* \ [ *Hardware Error * \ ].* ' ,
' FWBUG ' : r ' .* \ [ *Firmware Bug * \ ].* ' ,
' BUG ' : r ' (?i).* \ bBUG \ b.* ' ,
' ERROR ' : r ' (?i).* \ bERROR \ b.* ' ,
' WARNING ' : r ' (?i).* \ bWARNING \ b.* ' ,
' FAULT ' : r ' (?i).* \ bFAULT \ b.* ' ,
' FAIL ' : r ' (?i).* \ bFAILED \ b.* ' ,
' INVALID ' : r ' (?i).* \ bINVALID \ b.* ' ,
' CRASH ' : r ' (?i).* \ bCRASHED \ b.* ' ,
2020-07-20 18:02:49 -07:00
' TIMEOUT ' : r ' (?i).* \ bTIMEOUT \ b.* ' ,
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
' IRQ ' : r ' .* \ bgenirq: .* ' ,
' TASKFAIL ' : r ' .*Freezing of tasks *.* ' ,
' ACPI ' : r ' .* \ bACPI *(?P<b>[A-Za-z]*) *Error[: ].* ' ,
' DISKFULL ' : r ' .* \ bNo space left on device.* ' ,
' USBERR ' : r ' .*usb .*device .*, error [0-9-]* ' ,
' ATAERR ' : r ' *ata[0-9 \ .]*: .*failed.* ' ,
' MEIERR ' : r ' *mei.*: .*failed.* ' ,
' TPMERR ' : r ' (?i) *tpm *tpm[0-9]*: .*error.* ' ,
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
}
2014-08-08 09:11:59 -07:00
def __init__ ( self , num ) :
2016-12-14 10:37:07 -08:00
idchar = ' abcdefghij '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . start = 0.0 # test start
self . end = 0.0 # test end
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
self . hwstart = 0 # rtc test start
self . hwend = 0 # rtc test end
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . tSuspended = 0.0 # low-level suspend start
self . tResumed = 0.0 # low-level resume start
self . tKernSus = 0.0 # kernel level suspend start
self . tKernRes = 0.0 # kernel level resume end
self . fwValid = False # is firmware data available
self . fwSuspend = 0 # time spent in firmware suspend
self . fwResume = 0 # time spent in firmware resume
self . html_device_id = 0
self . stamp = 0
self . outfile = ' '
self . kerror = False
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
self . wifi = dict ( )
2019-05-14 10:53:57 -07:00
self . turbostat = 0
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . enterfail = ' '
self . currphase = ' '
self . pstl = dict ( ) # process timeline
2014-08-08 09:11:59 -07:00
self . testnumber = num
self . idstr = idchar [ num ]
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . dmesgtext = [ ] # dmesg text file in memory
self . dmesg = dict ( ) # root data structure
self . errorinfo = { ' suspend ' : [ ] , ' resume ' : [ ] }
self . tLow = [ ] # time spent in low-level suspends (standby/freeze)
self . devpids = [ ]
self . devicegroups = 0
def sortedPhases ( self ) :
return sorted ( self . dmesg , key = lambda k : self . dmesg [ k ] [ ' order ' ] )
def initDevicegroups ( self ) :
# called when phases are all finished being added
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for phase in sorted ( self . dmesg . keys ( ) ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if ' * ' in phase :
p = phase . split ( ' * ' )
pnew = ' %s %d ' % ( p [ 0 ] , len ( p ) )
self . dmesg [ pnew ] = self . dmesg . pop ( phase )
2016-07-15 23:34:14 +02:00
self . devicegroups = [ ]
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
2016-07-15 23:34:14 +02:00
self . devicegroups . append ( [ phase ] )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
def nextPhase ( self , phase , offset ) :
order = self . dmesg [ phase ] [ ' order ' ] + offset
for p in self . dmesg :
if self . dmesg [ p ] [ ' order ' ] == order :
return p
return ' '
2020-07-20 18:02:49 -07:00
def lastPhase ( self , depth = 1 ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
plist = self . sortedPhases ( )
2020-07-20 18:02:49 -07:00
if len ( plist ) < depth :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
return ' '
2020-07-20 18:02:49 -07:00
return plist [ - 1 * depth ]
2019-05-14 10:53:58 -07:00
def turbostatInfo ( self ) :
tp = TestProps ( )
out = { ' syslpi ' : ' N/A ' , ' pkgpc10 ' : ' N/A ' }
for line in self . dmesgtext :
m = re . match ( tp . tstatfmt , line )
if not m :
continue
for i in m . group ( ' t ' ) . split ( ' | ' ) :
if ' SYS % LPI ' in i :
out [ ' syslpi ' ] = i . split ( ' = ' ) [ - 1 ] + ' % '
elif ' pc10 ' in i :
out [ ' pkgpc10 ' ] = i . split ( ' = ' ) [ - 1 ] + ' % '
break
return out
2018-01-30 00:17:20 -08:00
def extractErrorInfo ( self ) :
2019-05-14 10:53:57 -07:00
lf = self . dmesgtext
if len ( self . dmesgtext ) < 1 and sysvals . dmesgfile :
lf = sysvals . openlog ( sysvals . dmesgfile , ' r ' )
2018-01-30 00:17:20 -08:00
i = 0
2020-07-20 18:02:49 -07:00
tp = TestProps ( )
2018-01-30 00:17:20 -08:00
list = [ ]
for line in lf :
i + = 1
2020-07-20 18:02:49 -07:00
if tp . stampInfo ( line , sysvals ) :
continue
2018-01-30 00:17:20 -08:00
m = re . match ( ' [ \t ]*( \ [ *)(?P<ktime>[0-9 \ .]*)( \ ]) (?P<msg>.*) ' , line )
if not m :
2016-12-14 10:37:07 -08:00
continue
2018-01-30 00:17:20 -08:00
t = float ( m . group ( ' ktime ' ) )
if t < self . start or t > self . end :
continue
2018-05-24 09:36:28 -07:00
dir = ' suspend ' if t < self . tSuspended else ' resume '
2018-01-30 00:17:20 -08:00
msg = m . group ( ' msg ' )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if re . match ( ' capability: warning: .* ' , msg ) :
continue
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for err in self . errlist :
if re . match ( self . errlist [ err ] , msg ) :
2019-05-14 10:53:58 -07:00
list . append ( ( msg , err , dir , t , i , i ) )
2018-01-30 00:17:20 -08:00
self . kerror = True
2018-05-24 09:36:28 -07:00
break
2020-07-20 18:02:49 -07:00
tp . msglist = [ ]
2019-05-14 10:53:58 -07:00
for msg , type , dir , t , idx1 , idx2 in list :
2020-07-20 18:02:49 -07:00
tp . msglist . append ( msg )
2018-01-30 00:17:20 -08:00
self . errorinfo [ dir ] . append ( ( type , t , idx1 , idx2 ) )
if self . kerror :
sysvals . dmesglog = True
2019-05-14 10:53:57 -07:00
if len ( self . dmesgtext ) < 1 and sysvals . dmesgfile :
lf . close ( )
2020-07-20 18:02:49 -07:00
return tp
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
def setStart ( self , time , msg = ' ' ) :
2014-08-08 09:11:59 -07:00
self . start = time
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if msg :
try :
self . hwstart = datetime . strptime ( msg , sysvals . tmstart )
except :
self . hwstart = 0
def setEnd ( self , time , msg = ' ' ) :
2014-08-08 09:11:59 -07:00
self . end = time
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if msg :
try :
self . hwend = datetime . strptime ( msg , sysvals . tmend )
except :
self . hwend = 0
2014-08-08 09:11:59 -07:00
def isTraceEventOutsideDeviceCalls ( self , pid , time ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
2014-08-08 09:11:59 -07:00
list = self . dmesg [ phase ] [ ' list ' ]
for dev in list :
d = list [ dev ]
if ( d [ ' pid ' ] == pid and time > = d [ ' start ' ] and
2016-07-15 23:34:14 +02:00
time < d [ ' end ' ] ) :
2014-08-08 09:11:59 -07:00
return False
return True
2016-12-14 10:37:07 -08:00
def sourcePhase ( self , start ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
if ' machine ' in phase :
continue
2016-12-14 10:37:05 -08:00
pend = self . dmesg [ phase ] [ ' end ' ]
if start < = pend :
return phase
return ' resume_complete '
def sourceDevice ( self , phaselist , start , end , pid , type ) :
2016-07-15 23:34:14 +02:00
tgtdev = ' '
for phase in phaselist :
2014-08-08 09:11:59 -07:00
list = self . dmesg [ phase ] [ ' list ' ]
2016-07-15 23:34:14 +02:00
for devname in list :
dev = list [ devname ]
2016-12-14 10:37:05 -08:00
# pid must match
if dev [ ' pid ' ] != pid :
2016-07-15 23:34:14 +02:00
continue
devS = dev [ ' start ' ]
devE = dev [ ' end ' ]
2016-12-14 10:37:05 -08:00
if type == ' device ' :
# device target event is entirely inside the source boundary
if ( start < devS or start > = devE or end < = devS or end > devE ) :
continue
elif type == ' thread ' :
# thread target event will expand the source boundary
if start < devS :
dev [ ' start ' ] = start
if end > devE :
dev [ ' end ' ] = end
2016-07-15 23:34:14 +02:00
tgtdev = dev
break
return tgtdev
def addDeviceFunctionCall ( self , displayname , kprobename , proc , pid , start , end , cdata , rdata ) :
2016-12-14 10:37:05 -08:00
# try to place the call in a device
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phases = self . sortedPhases ( )
tgtdev = self . sourceDevice ( phases , start , end , pid , ' device ' )
2016-12-14 10:37:06 -08:00
# calls with device pids that occur outside device bounds are dropped
# TODO: include these somehow
2016-12-14 10:37:05 -08:00
if not tgtdev and pid in self . devpids :
return False
# try to place the call in a thread
if not tgtdev :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
tgtdev = self . sourceDevice ( phases , start , end , pid , ' thread ' )
2016-12-14 10:37:05 -08:00
# create new thread blocks, expand as new calls are found
2016-07-15 23:34:14 +02:00
if not tgtdev :
2016-12-14 10:37:05 -08:00
if proc == ' <...> ' :
threadname = ' kthread- %d ' % ( pid )
2016-07-15 23:34:14 +02:00
else :
2016-12-14 10:37:05 -08:00
threadname = ' %s - %d ' % ( proc , pid )
2016-12-14 10:37:07 -08:00
tgtphase = self . sourcePhase ( start )
2016-12-14 10:37:05 -08:00
self . newAction ( tgtphase , threadname , pid , ' ' , start , end , ' ' , ' kth ' , ' ' )
return self . addDeviceFunctionCall ( displayname , kprobename , proc , pid , start , end , cdata , rdata )
# this should not happen
if not tgtdev :
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' [ %f - %f ] %s - %d %s %s %s ' % \
2016-12-14 10:37:05 -08:00
( start , end , proc , pid , kprobename , cdata , rdata ) )
2016-07-15 23:34:14 +02:00
return False
2016-12-14 10:37:05 -08:00
# place the call data inside the src element of the tgtdev
2016-07-15 23:34:14 +02:00
if ( ' src ' not in tgtdev ) :
tgtdev [ ' src ' ] = [ ]
2016-12-14 10:37:07 -08:00
dtf = sysvals . dev_tracefuncs
2016-12-14 10:37:05 -08:00
ubiquitous = False
2016-12-14 10:37:07 -08:00
if kprobename in dtf and ' ub ' in dtf [ kprobename ] :
2016-12-14 10:37:05 -08:00
ubiquitous = True
2016-07-15 23:34:14 +02:00
title = cdata + ' ' + rdata
mstr = ' \ (.* \ ) *(?P<args>.*) * \ ((?P<caller>.*) \ +.* arg1=(?P<ret>.*) '
m = re . match ( mstr , title )
if m :
c = m . group ( ' caller ' )
a = m . group ( ' args ' ) . strip ( )
r = m . group ( ' ret ' )
if len ( r ) > 6 :
r = ' '
else :
r = ' ret= %s ' % r
2016-12-14 10:37:07 -08:00
if ubiquitous and c in dtf and ' ub ' in dtf [ c ] :
2016-12-14 10:37:05 -08:00
return False
2016-12-14 10:37:06 -08:00
color = sysvals . kprobeColor ( kprobename )
e = DevFunction ( displayname , a , c , r , start , end , ubiquitous , proc , pid , color )
2016-07-15 23:34:14 +02:00
tgtdev [ ' src ' ] . append ( e )
return True
2016-12-14 10:37:05 -08:00
def overflowDevices ( self ) :
# get a list of devices that extend beyond the end of this test run
devlist = [ ]
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
2016-12-14 10:37:05 -08:00
list = self . dmesg [ phase ] [ ' list ' ]
for devname in list :
dev = list [ devname ]
if dev [ ' end ' ] > self . end :
devlist . append ( dev )
return devlist
def mergeOverlapDevices ( self , devlist ) :
# merge any devices that overlap devlist
for dev in devlist :
devname = dev [ ' name ' ]
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
2016-12-14 10:37:05 -08:00
list = self . dmesg [ phase ] [ ' list ' ]
if devname not in list :
continue
tdev = list [ devname ]
o = min ( dev [ ' end ' ] , tdev [ ' end ' ] ) - max ( dev [ ' start ' ] , tdev [ ' start ' ] )
if o < = 0 :
continue
dev [ ' end ' ] = tdev [ ' end ' ]
if ' src ' not in dev or ' src ' not in tdev :
continue
dev [ ' src ' ] + = tdev [ ' src ' ]
del list [ devname ]
2016-12-14 10:37:06 -08:00
def usurpTouchingThread ( self , name , dev ) :
# the caller test has priority of this thread, give it to him
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
2016-12-14 10:37:06 -08:00
list = self . dmesg [ phase ] [ ' list ' ]
if name in list :
tdev = list [ name ]
if tdev [ ' start ' ] - dev [ ' end ' ] < 0.1 :
dev [ ' end ' ] = tdev [ ' end ' ]
if ' src ' not in dev :
dev [ ' src ' ] = [ ]
if ' src ' in tdev :
dev [ ' src ' ] + = tdev [ ' src ' ]
del list [ name ]
break
def stitchTouchingThreads ( self , testlist ) :
# merge any threads between tests that touch
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
2016-12-14 10:37:06 -08:00
list = self . dmesg [ phase ] [ ' list ' ]
for devname in list :
dev = list [ devname ]
if ' htmlclass ' not in dev or ' kth ' not in dev [ ' htmlclass ' ] :
continue
for data in testlist :
data . usurpTouchingThread ( devname , dev )
2016-12-14 10:37:05 -08:00
def optimizeDevSrc ( self ) :
# merge any src call loops to reduce timeline size
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
2016-12-14 10:37:05 -08:00
list = self . dmesg [ phase ] [ ' list ' ]
for dev in list :
if ' src ' not in list [ dev ] :
continue
src = list [ dev ] [ ' src ' ]
p = 0
for e in sorted ( src , key = lambda event : event . time ) :
if not p or not e . repeat ( p ) :
p = e
continue
# e is another iteration of p, move it into p
p . end = e . end
p . length = p . end - p . time
p . count + = 1
src . remove ( e )
2014-08-08 09:11:59 -07:00
def trimTimeVal ( self , t , t0 , dT , left ) :
if left :
if ( t > t0 ) :
if ( t - dT < t0 ) :
return t0
return t - dT
else :
return t
else :
if ( t < t0 + dT ) :
if ( t > t0 ) :
return t0 + dT
return t + dT
else :
return t
def trimTime ( self , t0 , dT , left ) :
self . tSuspended = self . trimTimeVal ( self . tSuspended , t0 , dT , left )
self . tResumed = self . trimTimeVal ( self . tResumed , t0 , dT , left )
self . start = self . trimTimeVal ( self . start , t0 , dT , left )
2016-12-14 10:37:07 -08:00
self . tKernSus = self . trimTimeVal ( self . tKernSus , t0 , dT , left )
self . tKernRes = self . trimTimeVal ( self . tKernRes , t0 , dT , left )
2014-08-08 09:11:59 -07:00
self . end = self . trimTimeVal ( self . end , t0 , dT , left )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
2014-01-16 16:18:22 -08:00
p = self . dmesg [ phase ]
2014-08-08 09:11:59 -07:00
p [ ' start ' ] = self . trimTimeVal ( p [ ' start ' ] , t0 , dT , left )
p [ ' end ' ] = self . trimTimeVal ( p [ ' end ' ] , t0 , dT , left )
2014-01-16 16:18:22 -08:00
list = p [ ' list ' ]
for name in list :
d = list [ name ]
2014-08-08 09:11:59 -07:00
d [ ' start ' ] = self . trimTimeVal ( d [ ' start ' ] , t0 , dT , left )
d [ ' end ' ] = self . trimTimeVal ( d [ ' end ' ] , t0 , dT , left )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
d [ ' length ' ] = d [ ' end ' ] - d [ ' start ' ]
2014-01-16 16:18:22 -08:00
if ( ' ftrace ' in d ) :
cg = d [ ' ftrace ' ]
2014-08-08 09:11:59 -07:00
cg . start = self . trimTimeVal ( cg . start , t0 , dT , left )
cg . end = self . trimTimeVal ( cg . end , t0 , dT , left )
2014-01-16 16:18:22 -08:00
for line in cg . list :
2014-08-08 09:11:59 -07:00
line . time = self . trimTimeVal ( line . time , t0 , dT , left )
2016-07-15 23:34:14 +02:00
if ( ' src ' in d ) :
for e in d [ ' src ' ] :
2014-08-08 09:11:59 -07:00
e . time = self . trimTimeVal ( e . time , t0 , dT , left )
2020-07-20 18:02:49 -07:00
e . end = self . trimTimeVal ( e . end , t0 , dT , left )
e . length = e . end - e . time
2018-01-30 00:17:20 -08:00
for dir in [ ' suspend ' , ' resume ' ] :
list = [ ]
for e in self . errorinfo [ dir ] :
type , tm , idx1 , idx2 = e
tm = self . trimTimeVal ( tm , t0 , dT , left )
list . append ( ( type , tm , idx1 , idx2 ) )
self . errorinfo [ dir ] = list
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
def trimFreezeTime ( self , tZero ) :
2016-07-15 23:34:14 +02:00
# trim out any standby or freeze clock time
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
lp = ' '
for phase in self . sortedPhases ( ) :
if ' resume_machine ' in phase and ' suspend_machine ' in lp :
tS , tR = self . dmesg [ lp ] [ ' end ' ] , self . dmesg [ phase ] [ ' start ' ]
tL = tR - tS
2020-11-10 18:36:17 -08:00
if tL < = 0 :
continue
left = True if tR > tZero else False
self . trimTime ( tS , tL , left )
if ' waking ' in self . dmesg [ lp ] :
tCnt = self . dmesg [ lp ] [ ' waking ' ] [ 0 ]
if self . dmesg [ lp ] [ ' waking ' ] [ 1 ] > = 0.001 :
tTry = ' - %.0f ' % ( round ( self . dmesg [ lp ] [ ' waking ' ] [ 1 ] * 1000 ) )
2020-07-20 18:02:49 -07:00
else :
2020-11-10 18:36:17 -08:00
tTry = ' - %.3f ' % ( self . dmesg [ lp ] [ ' waking ' ] [ 1 ] * 1000 )
text = ' %.0f ( %s ms waking %d times) ' % ( tL * 1000 , tTry , tCnt )
else :
text = ' %.0f ' % ( tL * 1000 )
self . tLow . append ( text )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
lp = phase
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
def getMemTime ( self ) :
if not self . hwstart or not self . hwend :
return
stime = ( self . tSuspended - self . start ) * 1000000
rtime = ( self . end - self . tResumed ) * 1000000
hws = self . hwstart + timedelta ( microseconds = stime )
hwr = self . hwend - timedelta ( microseconds = rtime )
self . tLow . append ( ' %.0f ' % ( ( hwr - hws ) . total_seconds ( ) * 1000 ) )
2017-07-05 14:42:55 -07:00
def getTimeValues ( self ) :
2018-10-08 15:56:32 -07:00
sktime = ( self . tSuspended - self . tKernSus ) * 1000
rktime = ( self . tKernRes - self . tResumed ) * 1000
2017-07-05 14:42:55 -07:00
return ( sktime , rktime )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
def setPhase ( self , phase , ktime , isbegin , order = - 1 ) :
2014-08-08 09:11:59 -07:00
if ( isbegin ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
# phase start over current phase
if self . currphase :
if ' resume_machine ' not in self . currphase :
sysvals . vprint ( ' WARNING: phase %s failed to end ' % self . currphase )
self . dmesg [ self . currphase ] [ ' end ' ] = ktime
phases = self . dmesg . keys ( )
color = self . phasedef [ phase ] [ ' color ' ]
count = len ( phases ) if order < 0 else order
# create unique name for every new phase
while phase in phases :
phase + = ' * '
self . dmesg [ phase ] = { ' list ' : dict ( ) , ' start ' : - 1.0 , ' end ' : - 1.0 ,
' row ' : 0 , ' color ' : color , ' order ' : count }
2014-08-08 09:11:59 -07:00
self . dmesg [ phase ] [ ' start ' ] = ktime
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . currphase = phase
2014-08-08 09:11:59 -07:00
else :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
# phase end without a start
if phase not in self . currphase :
if self . currphase :
sysvals . vprint ( ' WARNING: %s ended instead of %s , ftrace corruption? ' % ( phase , self . currphase ) )
else :
sysvals . vprint ( ' WARNING: %s ended without a start, ftrace corruption? ' % phase )
return phase
phase = self . currphase
2014-08-08 09:11:59 -07:00
self . dmesg [ phase ] [ ' end ' ] = ktime
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . currphase = ' '
return phase
2014-01-16 16:18:22 -08:00
def sortedDevices ( self , phase ) :
list = self . dmesg [ phase ] [ ' list ' ]
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
return sorted ( list , key = lambda k : list [ k ] [ ' start ' ] )
2016-12-14 10:37:07 -08:00
def fixupInitcalls ( self , phase ) :
2014-01-16 16:18:22 -08:00
# if any calls never returned, clip them at system resume end
phaselist = self . dmesg [ phase ] [ ' list ' ]
for devname in phaselist :
dev = phaselist [ devname ]
if ( dev [ ' end ' ] < 0 ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for p in self . sortedPhases ( ) :
2016-07-15 23:34:14 +02:00
if self . dmesg [ p ] [ ' end ' ] > dev [ ' start ' ] :
dev [ ' end ' ] = self . dmesg [ p ] [ ' end ' ]
break
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' %s ( %s ): callback didnt return ' % ( devname , phase ) )
2014-08-08 09:11:59 -07:00
def deviceFilter ( self , devicefilter ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
2014-08-08 09:11:59 -07:00
list = self . dmesg [ phase ] [ ' list ' ]
rmlist = [ ]
for name in list :
2016-12-14 10:37:06 -08:00
keep = False
for filter in devicefilter :
if filter in name or \
( ' drv ' in list [ name ] and filter in list [ name ] [ ' drv ' ] ) :
keep = True
if not keep :
2014-08-08 09:11:59 -07:00
rmlist . append ( name )
for name in rmlist :
del list [ name ]
2014-01-16 16:18:22 -08:00
def fixupInitcallsThatDidntReturn ( self ) :
# if any calls never returned, clip them at system resume end
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
2016-12-14 10:37:07 -08:00
self . fixupInitcalls ( phase )
2016-07-15 23:34:14 +02:00
def phaseOverlap ( self , phases ) :
rmgroups = [ ]
newgroup = [ ]
for group in self . devicegroups :
for phase in phases :
if phase not in group :
continue
for p in group :
if p not in newgroup :
newgroup . append ( p )
if group not in rmgroups :
rmgroups . append ( group )
for group in rmgroups :
self . devicegroups . remove ( group )
self . devicegroups . append ( newgroup )
def newActionGlobal ( self , name , start , end , pid = - 1 , color = ' ' ) :
2016-12-14 10:37:05 -08:00
# which phase is this device callback or action in
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phases = self . sortedPhases ( )
2016-12-14 10:37:05 -08:00
targetphase = ' none '
2016-07-15 23:34:14 +02:00
htmlclass = ' '
2014-08-08 09:11:59 -07:00
overlap = 0.0
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
myphases = [ ]
for phase in phases :
2014-08-08 09:11:59 -07:00
pstart = self . dmesg [ phase ] [ ' start ' ]
pend = self . dmesg [ phase ] [ ' end ' ]
2016-12-14 10:37:05 -08:00
# see if the action overlaps this phase
2014-08-08 09:11:59 -07:00
o = max ( 0 , min ( end , pend ) - max ( start , pstart ) )
2016-07-15 23:34:14 +02:00
if o > 0 :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
myphases . append ( phase )
2016-12-14 10:37:05 -08:00
# set the target phase to the one that overlaps most
2016-07-15 23:34:14 +02:00
if o > overlap :
if overlap > 0 and phase == ' post_resume ' :
continue
2014-08-08 09:11:59 -07:00
targetphase = phase
overlap = o
2016-12-14 10:37:06 -08:00
# if no target phase was found, pin it to the edge
2016-12-14 10:37:05 -08:00
if targetphase == ' none ' :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
p0start = self . dmesg [ phases [ 0 ] ] [ ' start ' ]
2016-12-14 10:37:06 -08:00
if start < = p0start :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
targetphase = phases [ 0 ]
2016-12-14 10:37:06 -08:00
else :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
targetphase = phases [ - 1 ]
2016-07-15 23:34:14 +02:00
if pid == - 2 :
htmlclass = ' bg '
2016-12-14 10:37:05 -08:00
elif pid == - 3 :
htmlclass = ' ps '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if len ( myphases ) > 1 :
2016-07-15 23:34:14 +02:00
htmlclass = ' bg '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . phaseOverlap ( myphases )
if targetphase in phases :
2016-07-15 23:34:14 +02:00
newname = self . newAction ( targetphase , name , pid , ' ' , start , end , ' ' , htmlclass , color )
return ( targetphase , newname )
2014-08-08 09:11:59 -07:00
return False
2016-07-15 23:34:14 +02:00
def newAction ( self , phase , name , pid , parent , start , end , drv , htmlclass = ' ' , color = ' ' ) :
2014-08-08 09:11:59 -07:00
# new device callback for a specific phase
self . html_device_id + = 1
devid = ' %s %d ' % ( self . idstr , self . html_device_id )
2014-01-16 16:18:22 -08:00
list = self . dmesg [ phase ] [ ' list ' ]
length = - 1.0
if ( start > = 0 and end > = 0 ) :
length = end - start
2020-07-20 18:02:49 -07:00
if pid == - 2 or name not in sysvals . tracefuncs . keys ( ) :
2016-07-15 23:34:14 +02:00
i = 2
origname = name
while ( name in list ) :
name = ' %s [ %d ] ' % ( origname , i )
i + = 1
2016-12-14 10:37:05 -08:00
list [ name ] = { ' name ' : name , ' start ' : start , ' end ' : end , ' pid ' : pid ,
' par ' : parent , ' length ' : length , ' row ' : 0 , ' id ' : devid , ' drv ' : drv }
2016-07-15 23:34:14 +02:00
if htmlclass :
list [ name ] [ ' htmlclass ' ] = htmlclass
if color :
list [ name ] [ ' color ' ] = color
return name
2020-07-20 18:02:49 -07:00
def findDevice ( self , phase , name ) :
list = self . dmesg [ phase ] [ ' list ' ]
mydev = ' '
for devname in sorted ( list ) :
if name == devname or re . match ( ' ^ %s \ [(?P<num>[0-9]*) \ ]$ ' % name , devname ) :
mydev = devname
if mydev :
return list [ mydev ]
return False
2014-08-08 09:11:59 -07:00
def deviceChildren ( self , devname , phase ) :
2014-01-16 16:18:22 -08:00
devlist = [ ]
2014-08-08 09:11:59 -07:00
list = self . dmesg [ phase ] [ ' list ' ]
for child in list :
if ( list [ child ] [ ' par ' ] == devname ) :
devlist . append ( child )
return devlist
2018-10-08 15:56:32 -07:00
def maxDeviceNameSize ( self , phase ) :
size = 0
for name in self . dmesg [ phase ] [ ' list ' ] :
if len ( name ) > size :
size = len ( name )
return size
2014-08-08 09:11:59 -07:00
def printDetails ( self ) :
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' Timeline Details: ' )
sysvals . vprint ( ' test start: %f ' % self . start )
sysvals . vprint ( ' kernel suspend start: %f ' % self . tKernSus )
2018-10-08 15:56:32 -07:00
tS = tR = False
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
2018-10-08 15:56:32 -07:00
devlist = self . dmesg [ phase ] [ ' list ' ]
dc , ps , pe = len ( devlist ) , self . dmesg [ phase ] [ ' start ' ] , self . dmesg [ phase ] [ ' end ' ]
if not tS and ps > = self . tSuspended :
sysvals . vprint ( ' machine suspended: %f ' % self . tSuspended )
tS = True
if not tR and ps > = self . tResumed :
sysvals . vprint ( ' machine resumed: %f ' % self . tResumed )
tR = True
sysvals . vprint ( ' %20s : %f - %f ( %d devices) ' % ( phase , ps , pe , dc ) )
if sysvals . devdump :
sysvals . vprint ( ' ' . join ( ' - ' for i in range ( 80 ) ) )
maxname = ' %d ' % self . maxDeviceNameSize ( phase )
fmt = ' %3d ) % ' + maxname + ' s - %f - %f '
c = 1
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for name in sorted ( devlist ) :
2018-10-08 15:56:32 -07:00
s = devlist [ name ] [ ' start ' ]
e = devlist [ name ] [ ' end ' ]
sysvals . vprint ( fmt % ( c , name , s , e ) )
c + = 1
sysvals . vprint ( ' ' . join ( ' - ' for i in range ( 80 ) ) )
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' kernel resume end: %f ' % self . tKernRes )
sysvals . vprint ( ' test end: %f ' % self . end )
2016-07-15 23:34:14 +02:00
def deviceChildrenAllPhases ( self , devname ) :
devlist = [ ]
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
2016-07-15 23:34:14 +02:00
list = self . deviceChildren ( devname , phase )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for dev in sorted ( list ) :
2016-07-15 23:34:14 +02:00
if dev not in devlist :
devlist . append ( dev )
return devlist
2014-08-08 09:11:59 -07:00
def masterTopology ( self , name , list , depth ) :
node = DeviceNode ( name , depth )
for cname in list :
2016-07-15 23:34:14 +02:00
# avoid recursions
if name == cname :
continue
clist = self . deviceChildrenAllPhases ( cname )
2014-08-08 09:11:59 -07:00
cnode = self . masterTopology ( cname , clist , depth + 1 )
node . children . append ( cnode )
return node
def printTopology ( self , node ) :
html = ' '
if node . name :
info = ' '
drv = ' '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in self . sortedPhases ( ) :
2014-08-08 09:11:59 -07:00
list = self . dmesg [ phase ] [ ' list ' ]
if node . name in list :
s = list [ node . name ] [ ' start ' ]
e = list [ node . name ] [ ' end ' ]
if list [ node . name ] [ ' drv ' ] :
drv = ' { ' + list [ node . name ] [ ' drv ' ] + ' } '
info + = ( ' <li> %s : %.3f ms</li> ' % ( phase , ( e - s ) * 1000 ) )
html + = ' <li><b> ' + node . name + drv + ' </b> '
if info :
html + = ' <ul> ' + info + ' </ul> '
html + = ' </li> '
if len ( node . children ) > 0 :
html + = ' <ul> '
for cnode in node . children :
html + = self . printTopology ( cnode )
html + = ' </ul> '
return html
def rootDeviceList ( self ) :
# list of devices graphed
real = [ ]
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for phase in self . sortedPhases ( ) :
2014-08-08 09:11:59 -07:00
list = self . dmesg [ phase ] [ ' list ' ]
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for dev in sorted ( list ) :
2014-08-08 09:11:59 -07:00
if list [ dev ] [ ' pid ' ] > = 0 and dev not in real :
real . append ( dev )
# list of top-most root devices
rootlist = [ ]
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for phase in self . sortedPhases ( ) :
2014-08-08 09:11:59 -07:00
list = self . dmesg [ phase ] [ ' list ' ]
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for dev in sorted ( list ) :
2014-08-08 09:11:59 -07:00
pdev = list [ dev ] [ ' par ' ]
2016-07-15 23:34:14 +02:00
pid = list [ dev ] [ ' pid ' ]
if ( pid < 0 or re . match ( ' [0-9]*-[0-9]* \ .[0-9]*[ \ .0-9]* \ :[ \ .0-9]*$ ' , pdev ) ) :
2014-08-08 09:11:59 -07:00
continue
if pdev and pdev not in real and pdev not in rootlist :
rootlist . append ( pdev )
return rootlist
def deviceTopology ( self ) :
rootlist = self . rootDeviceList ( )
master = self . masterTopology ( ' ' , rootlist , 0 )
return self . printTopology ( master )
2016-07-15 23:34:14 +02:00
def selectTimelineDevices ( self , widfmt , tTotal , mindevlen ) :
# only select devices that will actually show up in html
self . tdevlist = dict ( )
for phase in self . dmesg :
devlist = [ ]
list = self . dmesg [ phase ] [ ' list ' ]
for dev in list :
length = ( list [ dev ] [ ' end ' ] - list [ dev ] [ ' start ' ] ) * 1000
width = widfmt % ( ( ( list [ dev ] [ ' end ' ] - list [ dev ] [ ' start ' ] ) * 100 ) / tTotal )
2020-11-10 18:36:17 -08:00
if length > = mindevlen :
2016-07-15 23:34:14 +02:00
devlist . append ( dev )
self . tdevlist [ phase ] = devlist
2016-12-14 10:37:06 -08:00
def addHorizontalDivider ( self , devname , devend ) :
phase = ' suspend_prepare '
self . newAction ( phase , devname , - 2 , ' ' , \
self . start , devend , ' ' , ' sec ' , ' ' )
if phase not in self . tdevlist :
self . tdevlist [ phase ] = [ ]
self . tdevlist [ phase ] . append ( devname )
d = DevItem ( 0 , phase , self . dmesg [ phase ] [ ' list ' ] [ devname ] )
return d
2016-12-14 10:37:05 -08:00
def addProcessUsageEvent ( self , name , times ) :
# get the start and end times for this process
maxC = 0
tlast = 0
start = - 1
end = - 1
for t in sorted ( times ) :
if tlast == 0 :
tlast = t
continue
if name in self . pstl [ t ] :
if start == - 1 or tlast < start :
start = tlast
if end == - 1 or t > end :
end = t
tlast = t
if start == - 1 or end == - 1 :
return 0
# add a new action for this process and get the object
out = self . newActionGlobal ( name , start , end , - 3 )
if not out :
return 0
phase , devname = out
dev = self . dmesg [ phase ] [ ' list ' ] [ devname ]
# get the cpu exec data
tlast = 0
clast = 0
cpuexec = dict ( )
for t in sorted ( times ) :
if tlast == 0 or t < = start or t > end :
tlast = t
continue
list = self . pstl [ t ]
c = 0
if name in list :
c = list [ name ]
if c > maxC :
maxC = c
if c != clast :
key = ( tlast , t )
cpuexec [ key ] = c
tlast = t
clast = c
dev [ ' cpuexec ' ] = cpuexec
return maxC
def createProcessUsageEvents ( self ) :
# get an array of process names
proclist = [ ]
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for t in sorted ( self . pstl ) :
2016-12-14 10:37:05 -08:00
pslist = self . pstl [ t ]
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for ps in sorted ( pslist ) :
2016-12-14 10:37:05 -08:00
if ps not in proclist :
proclist . append ( ps )
# get a list of data points for suspend and resume
tsus = [ ]
tres = [ ]
for t in sorted ( self . pstl ) :
if t < self . tSuspended :
tsus . append ( t )
else :
tres . append ( t )
# process the events for suspend and resume
if len ( proclist ) > 0 :
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' Process Execution: ' )
2016-12-14 10:37:05 -08:00
for ps in proclist :
c = self . addProcessUsageEvent ( ps , tsus )
if c > 0 :
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' %25s (sus): %d ' % ( ps , c ) )
2016-12-14 10:37:05 -08:00
c = self . addProcessUsageEvent ( ps , tres )
if c > 0 :
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' %25s (res): %d ' % ( ps , c ) )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
def handleEndMarker ( self , time , msg = ' ' ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
dm = self . dmesg
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
self . setEnd ( time , msg )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . initDevicegroups ( )
# give suspend_prepare an end if needed
if ' suspend_prepare ' in dm and dm [ ' suspend_prepare ' ] [ ' end ' ] < 0 :
dm [ ' suspend_prepare ' ] [ ' end ' ] = time
# assume resume machine ends at next phase start
if ' resume_machine ' in dm and dm [ ' resume_machine ' ] [ ' end ' ] < 0 :
np = self . nextPhase ( ' resume_machine ' , 1 )
if np :
dm [ ' resume_machine ' ] [ ' end ' ] = dm [ np ] [ ' start ' ]
# if kernel resume end not found, assume its the end marker
if self . tKernRes == 0.0 :
self . tKernRes = time
# if kernel suspend start not found, assume its the end marker
if self . tKernSus == 0.0 :
self . tKernSus = time
# set resume complete to end at end marker
if ' resume_complete ' in dm :
dm [ ' resume_complete ' ] [ ' end ' ] = time
2018-01-30 00:17:20 -08:00
def debugPrint ( self ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for p in self . sortedPhases ( ) :
2018-01-30 00:17:20 -08:00
list = self . dmesg [ p ] [ ' list ' ]
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for devname in sorted ( list ) :
2018-01-30 00:17:20 -08:00
dev = list [ devname ]
if ' ftrace ' in dev :
dev [ ' ftrace ' ] . debugPrint ( ' [ %s ] ' % devname )
2016-12-14 10:37:05 -08:00
# Class: DevFunction
2014-08-08 09:11:59 -07:00
# Description:
2016-12-14 10:37:05 -08:00
# A container for kprobe function data we want in the dev timeline
class DevFunction :
2016-12-14 10:37:06 -08:00
def __init__ ( self , name , args , caller , ret , start , end , u , proc , pid , color ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . row = 0
self . count = 1
2016-12-14 10:37:05 -08:00
self . name = name
self . args = args
self . caller = caller
self . ret = ret
self . time = start
self . length = end - start
self . end = end
self . ubiquitous = u
self . proc = proc
self . pid = pid
2016-12-14 10:37:06 -08:00
self . color = color
2016-12-14 10:37:05 -08:00
def title ( self ) :
cnt = ' '
if self . count > 1 :
cnt = ' (x %d ) ' % self . count
l = ' %0.3f ms ' % ( self . length * 1000 )
if self . ubiquitous :
2016-12-14 10:37:06 -08:00
title = ' %s ( %s ) %s <- %s , %s ( %s ) ' % \
( self . name , self . args , cnt , self . caller , self . ret , l )
2016-12-14 10:37:05 -08:00
else :
title = ' %s ( %s ) %s %s ( %s ) ' % ( self . name , self . args , self . ret , cnt , l )
2016-12-14 10:37:06 -08:00
return title . replace ( ' " ' , ' ' )
2016-12-14 10:37:05 -08:00
def text ( self ) :
if self . count > 1 :
text = ' %s (x %d ) ' % ( self . name , self . count )
else :
text = self . name
return text
def repeat ( self , tgt ) :
2016-12-14 10:37:06 -08:00
# is the tgt call just a repeat of this call (e.g. are we in a loop)
2016-12-14 10:37:05 -08:00
dt = self . time - tgt . end
2016-12-14 10:37:06 -08:00
# only combine calls if -all- attributes are identical
2016-12-14 10:37:05 -08:00
if tgt . caller == self . caller and \
tgt . name == self . name and tgt . args == self . args and \
tgt . proc == self . proc and tgt . pid == self . pid and \
2016-12-14 10:37:06 -08:00
tgt . ret == self . ret and dt > = 0 and \
dt < = sysvals . callloopmaxgap and \
self . length < sysvals . callloopmaxlen :
2016-12-14 10:37:05 -08:00
return True
return False
2014-08-08 09:11:59 -07:00
# Class: FTraceLine
# Description:
# A container for a single line of ftrace data. There are six basic types:
# callgraph line:
# call: " dpm_run_callback() {"
# return: " }"
# leaf: " dpm_run_callback();"
# trace event:
# tracing_mark_write: SUSPEND START or RESUME COMPLETE
# suspend_resume: phase or custom exec block data
# device_pm_callback: device callback info
2014-01-16 16:18:22 -08:00
class FTraceLine :
2016-07-15 23:34:14 +02:00
def __init__ ( self , t , m = ' ' , d = ' ' ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . length = 0.0
self . fcall = False
self . freturn = False
self . fevent = False
self . fkprobe = False
self . depth = 0
self . name = ' '
self . type = ' '
2014-01-16 16:18:22 -08:00
self . time = float ( t )
2016-07-15 23:34:14 +02:00
if not m and not d :
return
2014-08-08 09:11:59 -07:00
# is this a trace event
if ( d == ' traceevent ' or re . match ( ' ^ * \ / \ * *(?P<msg>.*) \ * \ / *$ ' , m ) ) :
if ( d == ' traceevent ' ) :
# nop format trace event
msg = m
else :
# function_graph format trace event
em = re . match ( ' ^ * \ / \ * *(?P<msg>.*) \ * \ / *$ ' , m )
msg = em . group ( ' msg ' )
emm = re . match ( ' ^(?P<call>.*?): (?P<msg>.*) ' , msg )
if ( emm ) :
self . name = emm . group ( ' msg ' )
self . type = emm . group ( ' call ' )
else :
self . name = msg
2016-07-15 23:34:14 +02:00
km = re . match ( ' ^(?P<n>.*)_cal$ ' , self . type )
if km :
self . fcall = True
self . fkprobe = True
self . type = km . group ( ' n ' )
return
km = re . match ( ' ^(?P<n>.*)_ret$ ' , self . type )
if km :
self . freturn = True
self . fkprobe = True
self . type = km . group ( ' n ' )
return
2014-01-16 16:18:22 -08:00
self . fevent = True
return
# convert the duration to seconds
if ( d ) :
self . length = float ( d ) / 1000000
# the indentation determines the depth
2014-08-08 09:11:59 -07:00
match = re . match ( ' ^(?P<d> *)(?P<o>.*)$ ' , m )
2014-01-16 16:18:22 -08:00
if ( not match ) :
return
self . depth = self . getDepth ( match . group ( ' d ' ) )
m = match . group ( ' o ' )
# function return
if ( m [ 0 ] == ' } ' ) :
self . freturn = True
if ( len ( m ) > 1 ) :
# includes comment with function name
2014-08-08 09:11:59 -07:00
match = re . match ( ' ^} * \ / \ * *(?P<n>.*) * \ * \ /$ ' , m )
2014-01-16 16:18:22 -08:00
if ( match ) :
2016-07-15 23:34:14 +02:00
self . name = match . group ( ' n ' ) . strip ( )
2014-01-16 16:18:22 -08:00
# function call
else :
self . fcall = True
# function call with children
if ( m [ - 1 ] == ' { ' ) :
2014-08-08 09:11:59 -07:00
match = re . match ( ' ^(?P<n>.*) * \ (.* ' , m )
2014-01-16 16:18:22 -08:00
if ( match ) :
2016-07-15 23:34:14 +02:00
self . name = match . group ( ' n ' ) . strip ( )
2014-01-16 16:18:22 -08:00
# function call with no children (leaf)
elif ( m [ - 1 ] == ' ; ' ) :
self . freturn = True
2014-08-08 09:11:59 -07:00
match = re . match ( ' ^(?P<n>.*) * \ (.* ' , m )
2014-01-16 16:18:22 -08:00
if ( match ) :
2016-07-15 23:34:14 +02:00
self . name = match . group ( ' n ' ) . strip ( )
2014-01-16 16:18:22 -08:00
# something else (possibly a trace marker)
else :
self . name = m
2018-01-30 00:17:20 -08:00
def isCall ( self ) :
return self . fcall and not self . freturn
def isReturn ( self ) :
return self . freturn and not self . fcall
def isLeaf ( self ) :
return self . fcall and self . freturn
2014-01-16 16:18:22 -08:00
def getDepth ( self , str ) :
return len ( str ) / 2
2018-01-30 00:17:20 -08:00
def debugPrint ( self , info = ' ' ) :
if self . isLeaf ( ) :
2018-10-08 15:56:32 -07:00
pprint ( ' -- %12.6f (depth= %02d ): %s (); ( %.3f us) %s ' % ( self . time , \
2018-01-30 00:17:20 -08:00
self . depth , self . name , self . length * 1000000 , info ) )
elif self . freturn :
2018-10-08 15:56:32 -07:00
pprint ( ' -- %12.6f (depth= %02d ): %s } ( %.3f us) %s ' % ( self . time , \
2018-01-30 00:17:20 -08:00
self . depth , self . name , self . length * 1000000 , info ) )
2014-08-08 09:11:59 -07:00
else :
2018-10-08 15:56:32 -07:00
pprint ( ' -- %12.6f (depth= %02d ): %s () { ( %.3f us) %s ' % ( self . time , \
2018-01-30 00:17:20 -08:00
self . depth , self . name , self . length * 1000000 , info ) )
2016-07-15 23:34:14 +02:00
def startMarker ( self ) :
# Is this the starting line of a suspend?
if not self . fevent :
return False
if sysvals . usetracemarkers :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if ( self . name . startswith ( ' SUSPEND START ' ) ) :
2016-07-15 23:34:14 +02:00
return True
return False
else :
if ( self . type == ' suspend_resume ' and
re . match ( ' suspend_enter \ [.* \ ] begin ' , self . name ) ) :
return True
return False
def endMarker ( self ) :
# Is this the ending line of a resume?
if not self . fevent :
return False
if sysvals . usetracemarkers :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if ( self . name . startswith ( ' RESUME COMPLETE ' ) ) :
2016-07-15 23:34:14 +02:00
return True
return False
else :
if ( self . type == ' suspend_resume ' and
re . match ( ' thaw_processes \ [.* \ ] end ' , self . name ) ) :
return True
return False
2014-01-16 16:18:22 -08:00
2014-08-08 09:11:59 -07:00
# Class: FTraceCallGraph
# Description:
# A container for the ftrace callgraph of a single recursive function.
# This can be a dpm_run_callback, dpm_prepare, or dpm_complete callgraph
# Each instance is tied to a single device in a single phase, and is
# comprised of an ordered list of FTraceLine objects
2014-01-16 16:18:22 -08:00
class FTraceCallGraph :
2018-01-30 00:17:20 -08:00
vfname = ' missing_function_name '
def __init__ ( self , pid , sv ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . id = ' '
self . invalid = False
self . name = ' '
self . partial = False
self . ignore = False
2014-01-16 16:18:22 -08:00
self . start = - 1.0
self . end = - 1.0
self . list = [ ]
self . depth = 0
2016-07-15 23:34:14 +02:00
self . pid = pid
2018-01-30 00:17:20 -08:00
self . sv = sv
def addLine ( self , line ) :
2016-07-15 23:34:14 +02:00
# if this is already invalid, just leave
if ( self . invalid ) :
2018-01-30 00:17:20 -08:00
if ( line . depth == 0 and line . freturn ) :
return 1
return 0
# invalidate on bad depth
if ( self . depth < 0 ) :
2016-07-15 23:34:14 +02:00
self . invalidate ( line )
2018-01-30 00:17:20 -08:00
return 0
# ignore data til we return to the current depth
if self . ignore :
if line . depth > self . depth :
return 0
else :
self . list [ - 1 ] . freturn = True
self . list [ - 1 ] . length = line . time - self . list [ - 1 ] . time
self . ignore = False
# if this is a return at self.depth, no more work is needed
if line . depth == self . depth and line . isReturn ( ) :
if line . depth == 0 :
self . end = line . time
return 1
return 0
2016-07-15 23:34:14 +02:00
# compare current depth with this lines pre-call depth
prelinedep = line . depth
2018-01-30 00:17:20 -08:00
if line . isReturn ( ) :
2016-07-15 23:34:14 +02:00
prelinedep + = 1
last = 0
lasttime = line . time
if len ( self . list ) > 0 :
last = self . list [ - 1 ]
lasttime = last . time
2018-01-30 00:17:20 -08:00
if last . isLeaf ( ) :
lasttime + = last . length
2016-07-15 23:34:14 +02:00
# handle low misalignments by inserting returns
2018-01-30 00:17:20 -08:00
mismatch = prelinedep - self . depth
warning = self . sv . verbose and abs ( mismatch ) > 1
info = [ ]
if mismatch < 0 :
2016-07-15 23:34:14 +02:00
idx = 0
# add return calls to get the depth down
while prelinedep < self . depth :
self . depth - = 1
2018-01-30 00:17:20 -08:00
if idx == 0 and last and last . isCall ( ) :
2016-07-15 23:34:14 +02:00
# special case, turn last call into a leaf
last . depth = self . depth
last . freturn = True
last . length = line . time - last . time
2018-01-30 00:17:20 -08:00
if warning :
info . append ( ( ' [make leaf] ' , last ) )
2016-07-15 23:34:14 +02:00
else :
vline = FTraceLine ( lasttime )
vline . depth = self . depth
2018-01-30 00:17:20 -08:00
vline . name = self . vfname
2016-07-15 23:34:14 +02:00
vline . freturn = True
self . list . append ( vline )
2018-01-30 00:17:20 -08:00
if warning :
if idx == 0 :
info . append ( ( ' ' , last ) )
info . append ( ( ' [add return] ' , vline ) )
2016-07-15 23:34:14 +02:00
idx + = 1
2018-01-30 00:17:20 -08:00
if warning :
info . append ( ( ' ' , line ) )
2016-07-15 23:34:14 +02:00
# handle high misalignments by inserting calls
2018-01-30 00:17:20 -08:00
elif mismatch > 0 :
2016-07-15 23:34:14 +02:00
idx = 0
2018-01-30 00:17:20 -08:00
if warning :
info . append ( ( ' ' , last ) )
2016-07-15 23:34:14 +02:00
# add calls to get the depth up
while prelinedep > self . depth :
2018-01-30 00:17:20 -08:00
if idx == 0 and line . isReturn ( ) :
2016-07-15 23:34:14 +02:00
# special case, turn this return into a leaf
line . fcall = True
prelinedep - = 1
2018-01-30 00:17:20 -08:00
if warning :
info . append ( ( ' [make leaf] ' , line ) )
2016-07-15 23:34:14 +02:00
else :
vline = FTraceLine ( lasttime )
vline . depth = self . depth
2018-01-30 00:17:20 -08:00
vline . name = self . vfname
2016-07-15 23:34:14 +02:00
vline . fcall = True
self . list . append ( vline )
self . depth + = 1
if not last :
self . start = vline . time
2018-01-30 00:17:20 -08:00
if warning :
info . append ( ( ' [add call] ' , vline ) )
2016-07-15 23:34:14 +02:00
idx + = 1
2018-01-30 00:17:20 -08:00
if warning and ( ' [make leaf] ' , line ) not in info :
info . append ( ( ' ' , line ) )
if warning :
2018-10-08 15:56:32 -07:00
pprint ( ' WARNING: ftrace data missing, corrections made: ' )
2018-01-30 00:17:20 -08:00
for i in info :
t , obj = i
if obj :
obj . debugPrint ( t )
2016-07-15 23:34:14 +02:00
# process the call and set the new depth
2018-01-30 00:17:20 -08:00
skipadd = False
md = self . sv . max_graph_depth
if line . isCall ( ) :
# ignore blacklisted/overdepth funcs
if ( md and self . depth > = md - 1 ) or ( line . name in self . sv . cgblacklist ) :
self . ignore = True
else :
self . depth + = 1
elif line . isReturn ( ) :
2014-01-16 16:18:22 -08:00
self . depth - = 1
2018-01-30 00:17:20 -08:00
# remove blacklisted/overdepth/empty funcs that slipped through
if ( last and last . isCall ( ) and last . depth == line . depth ) or \
( md and last and last . depth > = md ) or \
( line . name in self . sv . cgblacklist ) :
while len ( self . list ) > 0 and self . list [ - 1 ] . depth > line . depth :
self . list . pop ( - 1 )
if len ( self . list ) == 0 :
self . invalid = True
return 1
self . list [ - 1 ] . freturn = True
self . list [ - 1 ] . length = line . time - self . list [ - 1 ] . time
self . list [ - 1 ] . name = line . name
skipadd = True
2016-07-15 23:34:14 +02:00
if len ( self . list ) < 1 :
self . start = line . time
2018-01-30 00:17:20 -08:00
# check for a mismatch that returned all the way to callgraph end
res = 1
if mismatch < 0 and self . list [ - 1 ] . depth == 0 and self . list [ - 1 ] . freturn :
line = self . list [ - 1 ]
skipadd = True
res = - 1
if not skipadd :
self . list . append ( line )
2014-01-16 16:18:22 -08:00
if ( line . depth == 0 and line . freturn ) :
2014-08-08 09:11:59 -07:00
if ( self . start < 0 ) :
self . start = line . time
2014-01-16 16:18:22 -08:00
self . end = line . time
2016-07-15 23:34:14 +02:00
if line . fcall :
self . end + = line . length
2018-01-30 00:17:20 -08:00
if self . list [ 0 ] . name == self . vfname :
2016-07-15 23:34:14 +02:00
self . invalid = True
2018-01-30 00:17:20 -08:00
if res == - 1 :
self . partial = True
return res
return 0
2016-07-15 23:34:14 +02:00
def invalidate ( self , line ) :
if ( len ( self . list ) > 0 ) :
first = self . list [ 0 ]
self . list = [ ]
self . list . append ( first )
self . invalid = True
id = ' task %s ' % ( self . pid )
window = ' ( %f - %f ) ' % ( self . start , line . time )
if ( self . depth < 0 ) :
2018-10-08 15:56:32 -07:00
pprint ( ' Data misalignment for ' + id + \
2016-07-15 23:34:14 +02:00
' (buffer overflow), ignoring this callback ' )
else :
2018-10-08 15:56:32 -07:00
pprint ( ' Too much data for ' + id + \
2016-07-15 23:34:14 +02:00
' ' + window + ' , ignoring this callback ' )
2018-01-30 00:17:20 -08:00
def slice ( self , dev ) :
minicg = FTraceCallGraph ( dev [ ' pid ' ] , self . sv )
minicg . name = self . name
mydepth = - 1
good = False
2014-08-08 09:11:59 -07:00
for l in self . list :
2018-01-30 00:17:20 -08:00
if ( l . time < dev [ ' start ' ] or l . time > dev [ ' end ' ] ) :
2014-08-08 09:11:59 -07:00
continue
2018-01-30 00:17:20 -08:00
if mydepth < 0 :
if l . name == ' mutex_lock ' and l . freturn :
mydepth = l . depth
continue
elif l . depth == mydepth and l . name == ' mutex_unlock ' and l . fcall :
good = True
2014-08-08 09:11:59 -07:00
break
2018-01-30 00:17:20 -08:00
l . depth - = mydepth
minicg . addLine ( l )
if not good or len ( minicg . list ) < 1 :
return 0
2014-08-08 09:11:59 -07:00
return minicg
2016-07-15 23:34:14 +02:00
def repair ( self , enddepth ) :
# bring the depth back to 0 with additional returns
fixed = False
last = self . list [ - 1 ]
for i in reversed ( range ( enddepth ) ) :
t = FTraceLine ( last . time )
t . depth = i
t . freturn = True
fixed = self . addLine ( t )
2018-01-30 00:17:20 -08:00
if fixed != 0 :
2016-07-15 23:34:14 +02:00
self . end = last . time
return True
return False
2018-01-30 00:17:20 -08:00
def postProcess ( self ) :
2017-04-07 11:05:35 -07:00
if len ( self . list ) > 0 :
self . name = self . list [ 0 ] . name
2014-01-16 16:18:22 -08:00
stack = dict ( )
cnt = 0
2017-04-07 11:05:35 -07:00
last = 0
2014-01-16 16:18:22 -08:00
for l in self . list :
2017-04-07 11:05:35 -07:00
# ftrace bug: reported duration is not reliable
# check each leaf and clip it at max possible length
2018-01-30 00:17:20 -08:00
if last and last . isLeaf ( ) :
2017-04-07 11:05:35 -07:00
if last . length > l . time - last . time :
last . length = l . time - last . time
2018-01-30 00:17:20 -08:00
if l . isCall ( ) :
2014-01-16 16:18:22 -08:00
stack [ l . depth ] = l
cnt + = 1
2018-01-30 00:17:20 -08:00
elif l . isReturn ( ) :
2014-08-08 09:11:59 -07:00
if ( l . depth not in stack ) :
2018-01-30 00:17:20 -08:00
if self . sv . verbose :
2018-10-08 15:56:32 -07:00
pprint ( ' Post Process Error: Depth missing ' )
2016-07-15 23:34:14 +02:00
l . debugPrint ( )
2014-01-16 16:18:22 -08:00
return False
2017-04-07 11:05:35 -07:00
# calculate call length from call/return lines
2018-01-30 00:17:20 -08:00
cl = stack [ l . depth ]
cl . length = l . time - cl . time
if cl . name == self . vfname :
cl . name = l . name
2016-07-15 23:34:14 +02:00
stack . pop ( l . depth )
2014-01-16 16:18:22 -08:00
l . length = 0
cnt - = 1
2017-04-07 11:05:35 -07:00
last = l
2014-01-16 16:18:22 -08:00
if ( cnt == 0 ) :
2016-07-15 23:34:14 +02:00
# trace caught the whole call tree
2014-01-16 16:18:22 -08:00
return True
2016-07-15 23:34:14 +02:00
elif ( cnt < 0 ) :
2018-01-30 00:17:20 -08:00
if self . sv . verbose :
2018-10-08 15:56:32 -07:00
pprint ( ' Post Process Error: Depth is less than 0 ' )
2016-07-15 23:34:14 +02:00
return False
# trace ended before call tree finished
return self . repair ( cnt )
def deviceMatch ( self , pid , data ) :
2018-01-30 00:17:20 -08:00
found = ' '
2016-07-15 23:34:14 +02:00
# add the callgraph data to the device hierarchy
borderphase = {
' dpm_prepare ' : ' suspend_prepare ' ,
' dpm_complete ' : ' resume_complete '
}
2017-04-07 11:05:35 -07:00
if ( self . name in borderphase ) :
p = borderphase [ self . name ]
2016-07-15 23:34:14 +02:00
list = data . dmesg [ p ] [ ' list ' ]
for devname in list :
dev = list [ devname ]
if ( pid == dev [ ' pid ' ] and
self . start < = dev [ ' start ' ] and
self . end > = dev [ ' end ' ] ) :
2018-01-30 00:17:20 -08:00
cg = self . slice ( dev )
if cg :
dev [ ' ftrace ' ] = cg
found = devname
2016-07-15 23:34:14 +02:00
return found
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for p in data . sortedPhases ( ) :
2016-07-15 23:34:14 +02:00
if ( data . dmesg [ p ] [ ' start ' ] < = self . start and
self . start < = data . dmesg [ p ] [ ' end ' ] ) :
list = data . dmesg [ p ] [ ' list ' ]
2019-05-14 10:53:58 -07:00
for devname in sorted ( list , key = lambda k : list [ k ] [ ' start ' ] ) :
2016-07-15 23:34:14 +02:00
dev = list [ devname ]
if ( pid == dev [ ' pid ' ] and
self . start < = dev [ ' start ' ] and
self . end > = dev [ ' end ' ] ) :
dev [ ' ftrace ' ] = self
2018-01-30 00:17:20 -08:00
found = devname
2016-07-15 23:34:14 +02:00
break
break
return found
def newActionFromFunction ( self , data ) :
2017-04-07 11:05:35 -07:00
name = self . name
2016-07-15 23:34:14 +02:00
if name in [ ' dpm_run_callback ' , ' dpm_prepare ' , ' dpm_complete ' ] :
return
fs = self . start
fe = self . end
if fs < data . start or fe > data . end :
return
phase = ' '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for p in data . sortedPhases ( ) :
2016-07-15 23:34:14 +02:00
if ( data . dmesg [ p ] [ ' start ' ] < = self . start and
self . start < data . dmesg [ p ] [ ' end ' ] ) :
phase = p
break
if not phase :
return
out = data . newActionGlobal ( name , fs , fe , - 2 )
if out :
phase , myname = out
data . dmesg [ phase ] [ ' list ' ] [ myname ] [ ' ftrace ' ] = self
2018-01-30 00:17:20 -08:00
def debugPrint ( self , info = ' ' ) :
2018-10-08 15:56:32 -07:00
pprint ( ' %s pid= %d [ %f - %f ] %.3f us ' % \
2018-01-30 00:17:20 -08:00
( self . name , self . pid , self . start , self . end ,
2018-10-08 15:56:32 -07:00
( self . end - self . start ) * 1000000 ) )
2016-07-15 23:34:14 +02:00
for l in self . list :
2018-01-30 00:17:20 -08:00
if l . isLeaf ( ) :
2018-10-08 15:56:32 -07:00
pprint ( ' %f ( %02d ): %s (); ( %.3f us) %s ' % ( l . time , \
2018-01-30 00:17:20 -08:00
l . depth , l . name , l . length * 1000000 , info ) )
elif l . freturn :
2018-10-08 15:56:32 -07:00
pprint ( ' %f ( %02d ): %s } ( %.3f us) %s ' % ( l . time , \
2018-01-30 00:17:20 -08:00
l . depth , l . name , l . length * 1000000 , info ) )
2016-07-15 23:34:14 +02:00
else :
2018-10-08 15:56:32 -07:00
pprint ( ' %f ( %02d ): %s () { ( %.3f us) %s ' % ( l . time , \
2018-01-30 00:17:20 -08:00
l . depth , l . name , l . length * 1000000 , info ) )
2018-10-08 15:56:32 -07:00
pprint ( ' ' )
2014-01-16 16:18:22 -08:00
2016-12-14 10:37:05 -08:00
class DevItem :
def __init__ ( self , test , phase , dev ) :
self . test = test
self . phase = phase
self . dev = dev
2016-12-14 10:37:06 -08:00
def isa ( self , cls ) :
if ' htmlclass ' in self . dev and cls in self . dev [ ' htmlclass ' ] :
return True
return False
2016-12-14 10:37:05 -08:00
2014-08-08 09:11:59 -07:00
# Class: Timeline
# Description:
2016-07-15 23:34:14 +02:00
# A container for a device timeline which calculates
# all the html properties to display it correctly
2014-01-16 16:18:22 -08:00
class Timeline :
2017-04-07 11:05:35 -07:00
html_tblock = ' <div id= " block {0} " class= " tblock " style= " left: {1} % ;width: {2} % ; " ><div class= " tback " style= " height: {3} px " ></div> \n '
html_device = ' <div id= " {0} " title= " {1} " class= " thread {7} " style= " left: {2} % ;top: {3} px;height: {4} px;width: {5} % ; {8} " > {6} </div> \n '
html_phase = ' <div class= " phase " style= " left: {0} % ;width: {1} % ;top: {2} px;height: {3} px;background: {4} " > {5} </div> \n '
html_phaselet = ' <div id= " {0} " class= " phaselet " style= " left: {1} % ;width: {2} % ;background: {3} " ></div> \n '
2017-07-05 14:42:55 -07:00
html_legend = ' <div id= " p {3} " class= " square " style= " left: {0} % ;background: {1} " > {2} </div> \n '
2016-12-14 10:37:07 -08:00
def __init__ ( self , rowheight , scaleheight ) :
2017-04-07 11:05:35 -07:00
self . html = ' '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . height = 0 # total timeline height
self . scaleH = scaleheight # timescale (top) row height
self . rowH = rowheight # device row height
self . bodyH = 0 # body height
self . rows = 0 # total timeline rows
self . rowlines = dict ( )
self . rowheight = dict ( )
2018-01-30 00:17:20 -08:00
def createHeader ( self , sv , stamp ) :
if ( not stamp [ ' time ' ] ) :
2017-04-07 11:05:35 -07:00
return
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
self . html + = ' <div class= " version " ><a href= " https://01.org/pm-graph " > %s v %s </a></div> ' \
2017-04-07 11:05:35 -07:00
% ( sv . title , sv . version )
2017-07-05 14:42:55 -07:00
if sv . logmsg and sv . testlog :
self . html + = ' <button id= " showtest " class= " logbtn btnfmt " >log</button> '
if sv . dmesglog :
self . html + = ' <button id= " showdmesg " class= " logbtn btnfmt " >dmesg</button> '
if sv . ftracelog :
self . html + = ' <button id= " showftrace " class= " logbtn btnfmt " >ftrace</button> '
2017-04-07 11:05:35 -07:00
headline_stamp = ' <div class= " stamp " > {0} {1} {2} {3} </div> \n '
2018-01-30 00:17:20 -08:00
self . html + = headline_stamp . format ( stamp [ ' host ' ] , stamp [ ' kernel ' ] ,
stamp [ ' mode ' ] , stamp [ ' time ' ] )
if ' man ' in stamp and ' plat ' in stamp and ' cpu ' in stamp and \
stamp [ ' man ' ] and stamp [ ' plat ' ] and stamp [ ' cpu ' ] :
2017-07-05 14:42:55 -07:00
headline_sysinfo = ' <div class= " stamp sysinfo " > {0} {1} <i>with</i> {2} </div> \n '
2018-01-30 00:17:20 -08:00
self . html + = headline_sysinfo . format ( stamp [ ' man ' ] , stamp [ ' plat ' ] , stamp [ ' cpu ' ] )
2017-07-05 14:42:55 -07:00
2016-07-15 23:34:14 +02:00
# Function: getDeviceRows
# Description:
# determine how may rows the device funcs will take
# Arguments:
# rawlist: the list of devices/actions for a single phase
# Output:
# The total number of rows needed to display this phase of the timeline
def getDeviceRows ( self , rawlist ) :
# clear all rows and set them to undefined
2016-12-14 10:37:05 -08:00
sortdict = dict ( )
2016-07-15 23:34:14 +02:00
for item in rawlist :
item . row = - 1
2016-12-14 10:37:05 -08:00
sortdict [ item ] = item . length
sortlist = sorted ( sortdict , key = sortdict . get , reverse = True )
remaining = len ( sortlist )
2016-07-15 23:34:14 +02:00
rowdata = dict ( )
row = 1
# try to pack each row with as many ranges as possible
while ( remaining > 0 ) :
if ( row not in rowdata ) :
rowdata [ row ] = [ ]
2016-12-14 10:37:05 -08:00
for i in sortlist :
2016-07-15 23:34:14 +02:00
if ( i . row > = 0 ) :
continue
s = i . time
e = i . time + i . length
valid = True
for ritem in rowdata [ row ] :
rs = ritem . time
re = ritem . time + ritem . length
if ( not ( ( ( s < = rs ) and ( e < = rs ) ) or
( ( s > = re ) and ( e > = re ) ) ) ) :
valid = False
break
if ( valid ) :
rowdata [ row ] . append ( i )
i . row = row
remaining - = 1
row + = 1
return row
# Function: getPhaseRows
# Description:
# Organize the timeline entries into the smallest
# number of rows possible, with no entry overlapping
# Arguments:
2016-12-14 10:37:05 -08:00
# devlist: the list of devices/actions in a group of contiguous phases
2016-07-15 23:34:14 +02:00
# Output:
# The total number of rows needed to display this phase of the timeline
2017-07-05 14:42:55 -07:00
def getPhaseRows ( self , devlist , row = 0 , sortby = ' length ' ) :
2016-07-15 23:34:14 +02:00
# clear all rows and set them to undefined
remaining = len ( devlist )
rowdata = dict ( )
2016-12-14 10:37:05 -08:00
sortdict = dict ( )
2016-07-15 23:34:14 +02:00
myphases = [ ]
2016-12-14 10:37:05 -08:00
# initialize all device rows to -1 and calculate devrows
2016-07-15 23:34:14 +02:00
for item in devlist :
2016-12-14 10:37:05 -08:00
dev = item . dev
tp = ( item . test , item . phase )
if tp not in myphases :
myphases . append ( tp )
2016-07-15 23:34:14 +02:00
dev [ ' row ' ] = - 1
2017-07-05 14:42:55 -07:00
if sortby == ' start ' :
# sort by start 1st, then length 2nd
sortdict [ item ] = ( - 1 * float ( dev [ ' start ' ] ) , float ( dev [ ' end ' ] ) - float ( dev [ ' start ' ] ) )
else :
# sort by length 1st, then name 2nd
sortdict [ item ] = ( float ( dev [ ' end ' ] ) - float ( dev [ ' start ' ] ) , item . dev [ ' name ' ] )
2016-07-15 23:34:14 +02:00
if ' src ' in dev :
dev [ ' devrows ' ] = self . getDeviceRows ( dev [ ' src ' ] )
2016-12-14 10:37:05 -08:00
# sort the devlist by length so that large items graph on top
sortlist = sorted ( sortdict , key = sortdict . get , reverse = True )
2016-07-15 23:34:14 +02:00
orderedlist = [ ]
2016-12-14 10:37:05 -08:00
for item in sortlist :
if item . dev [ ' pid ' ] == - 2 :
2016-07-15 23:34:14 +02:00
orderedlist . append ( item )
2016-12-14 10:37:05 -08:00
for item in sortlist :
2016-07-15 23:34:14 +02:00
if item not in orderedlist :
orderedlist . append ( item )
2016-12-14 10:37:05 -08:00
# try to pack each row with as many devices as possible
2016-07-15 23:34:14 +02:00
while ( remaining > 0 ) :
rowheight = 1
if ( row not in rowdata ) :
rowdata [ row ] = [ ]
for item in orderedlist :
2016-12-14 10:37:05 -08:00
dev = item . dev
2016-07-15 23:34:14 +02:00
if ( dev [ ' row ' ] < 0 ) :
s = dev [ ' start ' ]
e = dev [ ' end ' ]
valid = True
for ritem in rowdata [ row ] :
2016-12-14 10:37:05 -08:00
rs = ritem . dev [ ' start ' ]
re = ritem . dev [ ' end ' ]
2016-07-15 23:34:14 +02:00
if ( not ( ( ( s < = rs ) and ( e < = rs ) ) or
( ( s > = re ) and ( e > = re ) ) ) ) :
valid = False
break
if ( valid ) :
2016-12-14 10:37:05 -08:00
rowdata [ row ] . append ( item )
2016-07-15 23:34:14 +02:00
dev [ ' row ' ] = row
remaining - = 1
if ' devrows ' in dev and dev [ ' devrows ' ] > rowheight :
rowheight = dev [ ' devrows ' ]
2016-12-14 10:37:05 -08:00
for t , p in myphases :
if t not in self . rowlines or t not in self . rowheight :
self . rowlines [ t ] = dict ( )
self . rowheight [ t ] = dict ( )
if p not in self . rowlines [ t ] or p not in self . rowheight [ t ] :
self . rowlines [ t ] [ p ] = dict ( )
self . rowheight [ t ] [ p ] = dict ( )
2016-12-14 10:37:06 -08:00
rh = self . rowH
# section headers should use a different row height
if len ( rowdata [ row ] ) == 1 and \
' htmlclass ' in rowdata [ row ] [ 0 ] . dev and \
' sec ' in rowdata [ row ] [ 0 ] . dev [ ' htmlclass ' ] :
rh = 15
2016-12-14 10:37:05 -08:00
self . rowlines [ t ] [ p ] [ row ] = rowheight
2016-12-14 10:37:06 -08:00
self . rowheight [ t ] [ p ] [ row ] = rowheight * rh
2016-07-15 23:34:14 +02:00
row + = 1
if ( row > self . rows ) :
self . rows = int ( row )
return row
2016-12-14 10:37:05 -08:00
def phaseRowHeight ( self , test , phase , row ) :
return self . rowheight [ test ] [ phase ] [ row ]
def phaseRowTop ( self , test , phase , row ) :
2016-07-15 23:34:14 +02:00
top = 0
2016-12-14 10:37:05 -08:00
for i in sorted ( self . rowheight [ test ] [ phase ] ) :
2016-07-15 23:34:14 +02:00
if i > = row :
break
2016-12-14 10:37:05 -08:00
top + = self . rowheight [ test ] [ phase ] [ i ]
2016-07-15 23:34:14 +02:00
return top
def calcTotalRows ( self ) :
2017-04-07 11:05:35 -07:00
# Calculate the heights and offsets for the header and rows
2016-07-15 23:34:14 +02:00
maxrows = 0
standardphases = [ ]
2016-12-14 10:37:05 -08:00
for t in self . rowlines :
for p in self . rowlines [ t ] :
total = 0
for i in sorted ( self . rowlines [ t ] [ p ] ) :
total + = self . rowlines [ t ] [ p ] [ i ]
if total > maxrows :
maxrows = total
if total == len ( self . rowlines [ t ] [ p ] ) :
standardphases . append ( ( t , p ) )
2016-07-15 23:34:14 +02:00
self . height = self . scaleH + ( maxrows * self . rowH )
self . bodyH = self . height - self . scaleH
2016-12-14 10:37:05 -08:00
# if there is 1 line per row, draw them the standard way
for t , p in standardphases :
for i in sorted ( self . rowheight [ t ] [ p ] ) :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
self . rowheight [ t ] [ p ] [ i ] = float ( self . bodyH ) / len ( self . rowlines [ t ] [ p ] )
2017-04-07 11:05:35 -07:00
def createZoomBox ( self , mode = ' command ' , testcount = 1 ) :
# Create bounding box, add buttons
html_zoombox = ' <center><button id= " zoomin " >ZOOM IN +</button><button id= " zoomout " >ZOOM OUT -</button><button id= " zoomdef " >ZOOM 1:1</button></center> \n '
html_timeline = ' <div id= " dmesgzoombox " class= " zoombox " > \n <div id= " {0} " class= " timeline " style= " height: {1} px " > \n '
html_devlist1 = ' <button id= " devlist1 " class= " devlist " style= " float:left; " >Device Detail {0} </button> '
html_devlist2 = ' <button id= " devlist2 " class= " devlist " style= " float:right; " >Device Detail2</button> \n '
if mode != ' command ' :
if testcount > 1 :
self . html + = html_devlist2
self . html + = html_devlist1 . format ( ' 1 ' )
else :
self . html + = html_devlist1 . format ( ' ' )
self . html + = html_zoombox
self . html + = html_timeline . format ( ' dmesg ' , self . height )
2016-07-15 23:34:14 +02:00
# Function: createTimeScale
# Description:
# Create the timescale for a timeline block
# Arguments:
# m0: start time (mode begin)
# mMax: end time (mode end)
# tTotal: total timeline time
# mode: suspend or resume
# Output:
# The html code needed to display the time scale
def createTimeScale ( self , m0 , mMax , tTotal , mode ) :
timescale = ' <div class= " t " style= " right: {0} % " > {1} </div> \n '
2017-04-07 11:05:35 -07:00
rline = ' <div class= " t " style= " left:0;border-left:1px solid black;border-right:0; " > {0} </div> \n '
2016-07-15 23:34:14 +02:00
output = ' <div class= " timescale " > \n '
# set scale for timeline
mTotal = mMax - m0
tS = 0.1
if ( tTotal < = 0 ) :
return output + ' </div> \n '
if ( tTotal > 4 ) :
tS = 1
divTotal = int ( mTotal / tS ) + 1
divEdge = ( mTotal - tS * ( divTotal - 1 ) ) * 100 / mTotal
for i in range ( divTotal ) :
htmlline = ' '
2017-04-07 11:05:35 -07:00
if ( mode == ' suspend ' ) :
2016-07-15 23:34:14 +02:00
pos = ' %0.3f ' % ( 100 - ( ( float ( i ) * tS * 100 ) / mTotal ) - divEdge )
val = ' % 0.fms ' % ( float ( i - divTotal + 1 ) * tS * 1000 )
if ( i == divTotal - 1 ) :
2017-04-07 11:05:35 -07:00
val = mode
htmlline = timescale . format ( pos , val )
else :
pos = ' %0.3f ' % ( 100 - ( ( float ( i ) * tS * 100 ) / mTotal ) )
val = ' % 0.fms ' % ( float ( i ) * tS * 1000 )
2016-07-15 23:34:14 +02:00
htmlline = timescale . format ( pos , val )
2017-04-07 11:05:35 -07:00
if ( i == 0 ) :
htmlline = rline . format ( mode )
2016-07-15 23:34:14 +02:00
output + = htmlline
2017-04-07 11:05:35 -07:00
self . html + = output + ' </div> \n '
2014-01-16 16:18:22 -08:00
2016-07-15 23:34:14 +02:00
# Class: TestProps
2014-08-08 09:11:59 -07:00
# Description:
2016-07-15 23:34:14 +02:00
# A list of values describing the properties of these test runs
class TestProps :
2017-07-05 14:42:55 -07:00
stampfmt = ' # [a-z]*-(?P<m>[0-9] {2} )(?P<d>[0-9] {2} )(?P<y>[0-9] {2} )- ' + \
' (?P<H>[0-9] {2} )(?P<M>[0-9] {2} )(?P<S>[0-9] {2} ) ' + \
' (?P<host>.*) (?P<mode>.*) (?P<kernel>.*)$ '
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
wififmt = ' ^# wifi *(?P<d> \ S*) *(?P<s> \ S*) *(?P<t>[0-9 \ .]+).* '
2019-05-14 10:53:57 -07:00
tstatfmt = ' ^# turbostat (?P<t> \ S*) '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
testerrfmt = ' ^# enter_sleep_error (?P<e>.*) '
2017-07-05 14:42:55 -07:00
sysinfofmt = ' ^# sysinfo .* '
2018-01-30 00:17:20 -08:00
cmdlinefmt = ' ^# command \ | (?P<cmd>.*) '
2020-07-20 18:02:49 -07:00
kparamsfmt = ' ^# kparams \ | (?P<kp>.*) '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
devpropfmt = ' # Device Properties: .* '
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
pinfofmt = ' # platform-(?P<val>[a-z,A-Z,0-9]*): (?P<info>.*) '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
tracertypefmt = ' # tracer: (?P<t>.*) '
firmwarefmt = ' # fwsuspend (?P<s>[0-9]*) fwresume (?P<r>[0-9]*)$ '
procexecfmt = ' ps - (?P<ps>.*)$ '
2014-08-08 09:11:59 -07:00
ftrace_line_fmt_fg = \
' ^ *(?P<time>[0-9 \ .]*) * \ | *(?P<cpu>[0-9]*) \ ) ' + \
' *(?P<proc>.*)-(?P<pid>[0-9]*) * \ | ' + \
2016-07-15 23:34:14 +02:00
' [ +!# \ *@$]*(?P<dur>[0-9 \ .]*) .* \ | (?P<msg>.*) '
2014-08-08 09:11:59 -07:00
ftrace_line_fmt_nop = \
' *(?P<proc>.*)-(?P<pid>[0-9]*) * \ [(?P<cpu>[0-9]*) \ ] * ' + \
2020-07-20 18:02:49 -07:00
' (?P<flags> \ S*) *(?P<time>[0-9 \ .]*): * ' + \
2014-08-08 09:11:59 -07:00
' (?P<msg>.*) '
2020-07-20 18:02:49 -07:00
machinesuspend = ' machine_suspend \ [.* '
2016-07-15 23:34:14 +02:00
def __init__ ( self ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . stamp = ' '
self . sysinfo = ' '
self . cmdline = ' '
self . testerror = [ ]
2019-05-14 10:53:57 -07:00
self . turbostat = [ ]
2019-05-14 10:53:58 -07:00
self . wifi = [ ]
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
self . fwdata = [ ]
self . ftrace_line_fmt = self . ftrace_line_fmt_nop
self . cgformat = False
self . data = 0
2016-07-15 23:34:14 +02:00
self . ktemp = dict ( )
2014-08-08 09:11:59 -07:00
def setTracerType ( self , tracer ) :
if ( tracer == ' function_graph ' ) :
self . cgformat = True
self . ftrace_line_fmt = self . ftrace_line_fmt_fg
elif ( tracer == ' nop ' ) :
self . ftrace_line_fmt = self . ftrace_line_fmt_nop
else :
2016-12-14 10:37:07 -08:00
doError ( ' Invalid tracer format: [ %s ] ' % tracer )
2020-07-20 18:02:49 -07:00
def stampInfo ( self , line , sv ) :
2019-05-14 10:53:57 -07:00
if re . match ( self . stampfmt , line ) :
self . stamp = line
return True
elif re . match ( self . sysinfofmt , line ) :
self . sysinfo = line
return True
elif re . match ( self . tstatfmt , line ) :
self . turbostat . append ( line )
return True
2019-05-14 10:53:58 -07:00
elif re . match ( self . wififmt , line ) :
self . wifi . append ( line )
return True
2019-05-14 10:53:57 -07:00
elif re . match ( self . testerrfmt , line ) :
self . testerror . append ( line )
return True
elif re . match ( self . firmwarefmt , line ) :
self . fwdata . append ( line )
return True
2020-07-20 18:02:49 -07:00
elif ( re . match ( self . devpropfmt , line ) ) :
self . parseDevprops ( line , sv )
return True
elif ( re . match ( self . pinfofmt , line ) ) :
self . parsePlatformInfo ( line , sv )
return True
m = re . match ( self . cmdlinefmt , line )
if m :
self . cmdline = m . group ( ' cmd ' )
return True
m = re . match ( self . tracertypefmt , line )
if ( m ) :
self . setTracerType ( m . group ( ' t ' ) )
return True
2019-05-14 10:53:57 -07:00
return False
2017-07-05 14:42:55 -07:00
def parseStamp ( self , data , sv ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
# global test data
2017-07-05 14:42:55 -07:00
m = re . match ( self . stampfmt , self . stamp )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if not self . stamp or not m :
doError ( ' data does not include the expected stamp ' )
2017-07-05 14:42:55 -07:00
data . stamp = { ' time ' : ' ' , ' host ' : ' ' , ' mode ' : ' ' }
dt = datetime ( int ( m . group ( ' y ' ) ) + 2000 , int ( m . group ( ' m ' ) ) ,
int ( m . group ( ' d ' ) ) , int ( m . group ( ' H ' ) ) , int ( m . group ( ' M ' ) ) ,
int ( m . group ( ' S ' ) ) )
data . stamp [ ' time ' ] = dt . strftime ( ' % B %d % Y, % I: % M: % S % p ' )
data . stamp [ ' host ' ] = m . group ( ' host ' )
data . stamp [ ' mode ' ] = m . group ( ' mode ' )
data . stamp [ ' kernel ' ] = m . group ( ' kernel ' )
if re . match ( self . sysinfofmt , self . sysinfo ) :
for f in self . sysinfo . split ( ' | ' ) :
if ' # ' in f :
continue
tmp = f . strip ( ) . split ( ' : ' , 1 )
key = tmp [ 0 ]
val = tmp [ 1 ]
data . stamp [ key ] = val
sv . hostname = data . stamp [ ' host ' ]
sv . suspendmode = data . stamp [ ' mode ' ]
2020-07-20 18:02:49 -07:00
if sv . suspendmode == ' freeze ' :
self . machinesuspend = ' timekeeping_freeze \ [.* '
else :
self . machinesuspend = ' machine_suspend \ [.* '
2017-07-05 14:42:55 -07:00
if sv . suspendmode == ' command ' and sv . ftracefile != ' ' :
2018-01-30 00:17:20 -08:00
modes = [ ' on ' , ' freeze ' , ' standby ' , ' mem ' , ' disk ' ]
2020-07-20 18:02:49 -07:00
fp = sv . openlog ( sv . ftracefile , ' r ' )
2018-05-24 09:36:28 -07:00
for line in fp :
m = re . match ( ' .* machine_suspend \ [(?P<mode>.*) \ ] ' , line )
if m and m . group ( ' mode ' ) in [ ' 1 ' , ' 2 ' , ' 3 ' , ' 4 ' ] :
sv . suspendmode = modes [ int ( m . group ( ' mode ' ) ) ]
data . stamp [ ' mode ' ] = sv . suspendmode
break
fp . close ( )
2020-07-20 18:02:49 -07:00
sv . cmdline = self . cmdline
2017-07-05 14:42:55 -07:00
if not sv . stamp :
sv . stamp = data . stamp
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
# firmware data
if sv . suspendmode == ' mem ' and len ( self . fwdata ) > data . testnumber :
2019-05-14 10:53:57 -07:00
m = re . match ( self . firmwarefmt , self . fwdata [ data . testnumber ] )
if m :
data . fwSuspend , data . fwResume = int ( m . group ( ' s ' ) ) , int ( m . group ( ' r ' ) )
if ( data . fwSuspend > 0 or data . fwResume > 0 ) :
data . fwValid = True
# turbostat data
if len ( self . turbostat ) > data . testnumber :
m = re . match ( self . tstatfmt , self . turbostat [ data . testnumber ] )
if m :
data . turbostat = m . group ( ' t ' )
2019-05-14 10:53:58 -07:00
# wifi data
if len ( self . wifi ) > data . testnumber :
m = re . match ( self . wififmt , self . wifi [ data . testnumber ] )
if m :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
data . wifi = { ' dev ' : m . group ( ' d ' ) , ' stat ' : m . group ( ' s ' ) ,
' time ' : float ( m . group ( ' t ' ) ) }
data . stamp [ ' wifi ' ] = m . group ( ' d ' )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
# sleep mode enter errors
if len ( self . testerror ) > data . testnumber :
m = re . match ( self . testerrfmt , self . testerror [ data . testnumber ] )
if m :
data . enterfail = m . group ( ' e ' )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
def devprops ( self , data ) :
props = dict ( )
devlist = data . split ( ' ; ' )
for dev in devlist :
f = dev . split ( ' , ' )
if len ( f ) < 3 :
continue
dev = f [ 0 ]
props [ dev ] = DevProps ( )
props [ dev ] . altname = f [ 1 ]
if int ( f [ 2 ] ) :
props [ dev ] . isasync = True
else :
props [ dev ] . isasync = False
return props
def parseDevprops ( self , line , sv ) :
idx = line . index ( ' : ' ) + 2
if idx > = len ( line ) :
return
props = self . devprops ( line [ idx : ] )
if sv . suspendmode == ' command ' and ' testcommandstring ' in props :
sv . testcommand = props [ ' testcommandstring ' ] . altname
sv . devprops = props
def parsePlatformInfo ( self , line , sv ) :
m = re . match ( self . pinfofmt , line )
if not m :
return
name , info = m . group ( ' val ' ) , m . group ( ' info ' )
if name == ' devinfo ' :
sv . devprops = self . devprops ( sv . b64unzip ( info ) )
return
elif name == ' testcmd ' :
sv . testcommand = info
return
field = info . split ( ' | ' )
if len ( field ) < 2 :
return
cmdline = field [ 0 ] . strip ( )
output = sv . b64unzip ( field [ 1 ] . strip ( ) )
sv . platinfo . append ( [ name , cmdline , output ] )
2014-01-16 16:18:22 -08:00
2016-07-15 23:34:14 +02:00
# Class: TestRun
# Description:
# A container for a suspend/resume test run. This is necessary as
# there could be more than one, and they need to be separate.
class TestRun :
def __init__ ( self , dataobj ) :
self . data = dataobj
self . ftemp = dict ( )
self . ttemp = dict ( )
2016-12-14 10:37:05 -08:00
class ProcessMonitor :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
def __init__ ( self ) :
self . proclist = dict ( )
self . running = False
2016-12-14 10:37:05 -08:00
def procstat ( self ) :
c = [ ' cat /proc/[1-9]*/stat 2>/dev/null ' ]
2016-12-14 10:37:06 -08:00
process = Popen ( c , shell = True , stdout = PIPE )
2016-12-14 10:37:05 -08:00
running = dict ( )
for line in process . stdout :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
data = ascii ( line ) . split ( )
2016-12-14 10:37:05 -08:00
pid = data [ 0 ]
name = re . sub ( ' [()] ' , ' ' , data [ 1 ] )
user = int ( data [ 13 ] )
kern = int ( data [ 14 ] )
kjiff = ujiff = 0
if pid not in self . proclist :
self . proclist [ pid ] = { ' name ' : name , ' user ' : user , ' kern ' : kern }
else :
val = self . proclist [ pid ]
ujiff = user - val [ ' user ' ]
kjiff = kern - val [ ' kern ' ]
val [ ' user ' ] = user
val [ ' kern ' ] = kern
if ujiff > 0 or kjiff > 0 :
running [ pid ] = ujiff + kjiff
2017-04-07 11:05:35 -07:00
process . wait ( )
2016-12-14 10:37:05 -08:00
out = ' '
for pid in running :
jiffies = running [ pid ]
val = self . proclist [ pid ]
if out :
out + = ' , '
out + = ' %s - %s %d ' % ( val [ ' name ' ] , pid , jiffies )
return ' ps - ' + out
def processMonitor ( self , tid ) :
while self . running :
out = self . procstat ( )
if out :
sysvals . fsetVal ( out , ' trace_marker ' )
def start ( self ) :
self . thread = Thread ( target = self . processMonitor , args = ( 0 , ) )
self . running = True
self . thread . start ( )
def stop ( self ) :
self . running = False
2014-08-08 09:11:59 -07:00
# ----------------- FUNCTIONS --------------------
2014-01-16 16:18:22 -08:00
2014-08-08 09:11:59 -07:00
# Function: doesTraceLogHaveTraceEvents
# Description:
2018-01-30 00:17:20 -08:00
# Quickly determine if the ftrace log has all of the trace events,
# markers, and/or kprobes required for primary parsing.
2014-08-08 09:11:59 -07:00
def doesTraceLogHaveTraceEvents ( ) :
2019-05-14 10:53:58 -07:00
kpcheck = [ ' _cal: ( ' , ' _ret: ( ' ]
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
techeck = [ ' suspend_resume ' , ' device_pm_callback ' ]
2019-05-14 10:53:58 -07:00
tmcheck = [ ' SUSPEND START ' , ' RESUME COMPLETE ' ]
2016-07-15 23:34:14 +02:00
sysvals . usekprobes = False
2018-01-30 00:17:20 -08:00
fp = sysvals . openlog ( sysvals . ftracefile , ' r ' )
for line in fp :
# check for kprobes
if not sysvals . usekprobes :
for i in kpcheck :
if i in line :
sysvals . usekprobes = True
# check for all necessary trace events
check = techeck [ : ]
for i in techeck :
if i in line :
check . remove ( i )
techeck = check
# check for all necessary trace markers
check = tmcheck [ : ]
for i in tmcheck :
if i in line :
check . remove ( i )
tmcheck = check
fp . close ( )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sysvals . usetraceevents = True if len ( techeck ) < 2 else False
sysvals . usetracemarkers = True if len ( tmcheck ) == 0 else False
2014-08-08 09:11:59 -07:00
# Function: appendIncompleteTraceLog
# Description:
# [deprecated for kernel 3.15 or newer]
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
# Adds callgraph data which lacks trace event data. This is only
# for timelines generated from 3.15 or older
2014-08-08 09:11:59 -07:00
# Arguments:
# testruns: the array of Data objects obtained from parseKernelLog
def appendIncompleteTraceLog ( testruns ) :
# create TestRun vessels for ftrace parsing
testcnt = len ( testruns )
2016-07-15 23:34:14 +02:00
testidx = 0
2014-08-08 09:11:59 -07:00
testrun = [ ]
for data in testruns :
testrun . append ( TestRun ( data ) )
# extract the callgraph and traceevent data
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' Analyzing the ftrace data ( %s )... ' % \
os . path . basename ( sysvals . ftracefile ) )
2016-07-15 23:34:14 +02:00
tp = TestProps ( )
2018-01-30 00:17:20 -08:00
tf = sysvals . openlog ( sysvals . ftracefile , ' r ' )
2016-07-15 23:34:14 +02:00
data = 0
2014-01-16 16:18:22 -08:00
for line in tf :
2014-08-08 09:11:59 -07:00
# remove any latent carriage returns
line = line . replace ( ' \r \n ' , ' ' )
2020-07-20 18:02:49 -07:00
if tp . stampInfo ( line , sysvals ) :
2014-01-16 16:18:22 -08:00
continue
2016-07-15 23:34:14 +02:00
# parse only valid lines, if this is not one move on
m = re . match ( tp . ftrace_line_fmt , line )
2014-01-16 16:18:22 -08:00
if ( not m ) :
continue
2014-08-08 09:11:59 -07:00
# gather the basic message data from the line
m_time = m . group ( ' time ' )
m_pid = m . group ( ' pid ' )
m_msg = m . group ( ' msg ' )
2016-07-15 23:34:14 +02:00
if ( tp . cgformat ) :
2014-08-08 09:11:59 -07:00
m_param3 = m . group ( ' dur ' )
else :
m_param3 = ' traceevent '
2014-01-16 16:18:22 -08:00
if ( m_time and m_pid and m_msg ) :
2014-08-08 09:11:59 -07:00
t = FTraceLine ( m_time , m_msg , m_param3 )
2014-01-16 16:18:22 -08:00
pid = int ( m_pid )
else :
continue
# the line should be a call, return, or event
if ( not t . fcall and not t . freturn and not t . fevent ) :
continue
2016-07-15 23:34:14 +02:00
# look for the suspend start marker
if ( t . startMarker ( ) ) :
data = testrun [ testidx ] . data
2017-07-05 14:42:55 -07:00
tp . parseStamp ( data , sysvals )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
data . setStart ( t . time , t . name )
2016-07-15 23:34:14 +02:00
continue
if ( not data ) :
continue
# find the end of resume
if ( t . endMarker ( ) ) :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
data . setEnd ( t . time , t . name )
2016-07-15 23:34:14 +02:00
testidx + = 1
if ( testidx > = testcnt ) :
break
continue
# trace event processing
if ( t . fevent ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
continue
2016-07-15 23:34:14 +02:00
# call/return processing
elif sysvals . usecallgraph :
# create a callgraph object for the data
if ( pid not in testrun [ testidx ] . ftemp ) :
testrun [ testidx ] . ftemp [ pid ] = [ ]
2018-01-30 00:17:20 -08:00
testrun [ testidx ] . ftemp [ pid ] . append ( FTraceCallGraph ( pid , sysvals ) )
2016-07-15 23:34:14 +02:00
# when the call is finished, see which device matches it
cg = testrun [ testidx ] . ftemp [ pid ] [ - 1 ]
2018-01-30 00:17:20 -08:00
res = cg . addLine ( t )
if ( res != 0 ) :
testrun [ testidx ] . ftemp [ pid ] . append ( FTraceCallGraph ( pid , sysvals ) )
if ( res == - 1 ) :
testrun [ testidx ] . ftemp [ pid ] [ - 1 ] . addLine ( t )
2014-08-08 09:11:59 -07:00
tf . close ( )
for test in testrun :
# add the callgraph data to the device hierarchy
for pid in test . ftemp :
for cg in test . ftemp [ pid ] :
2018-01-30 00:17:20 -08:00
if len ( cg . list ) < 1 or cg . invalid or ( cg . end - cg . start == 0 ) :
2016-07-15 23:34:14 +02:00
continue
if ( not cg . postProcess ( ) ) :
2014-08-08 09:11:59 -07:00
id = ' task %s cpu %s ' % ( pid , m . group ( ' cpu ' ) )
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' Sanity check failed for ' + \
2014-08-08 09:11:59 -07:00
id + ' , ignoring this callback ' )
continue
callstart = cg . start
callend = cg . end
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for p in test . data . sortedPhases ( ) :
2014-08-08 09:11:59 -07:00
if ( test . data . dmesg [ p ] [ ' start ' ] < = callstart and
callstart < = test . data . dmesg [ p ] [ ' end ' ] ) :
list = test . data . dmesg [ p ] [ ' list ' ]
for devname in list :
dev = list [ devname ]
if ( pid == dev [ ' pid ' ] and
callstart < = dev [ ' start ' ] and
callend > = dev [ ' end ' ] ) :
dev [ ' ftrace ' ] = cg
break
# Function: parseTraceLog
# Description:
# Analyze an ftrace log output file generated from this app during
# the execution phase. Used when the ftrace log is the primary data source
# and includes the suspend_resume and device_pm_callback trace events
# The ftrace filename is taken from sysvals
# Output:
# An array of Data objects
2018-01-30 00:17:20 -08:00
def parseTraceLog ( live = False ) :
sysvals . vprint ( ' Analyzing the ftrace data ( %s )... ' % \
os . path . basename ( sysvals . ftracefile ) )
2014-08-08 09:11:59 -07:00
if ( os . path . exists ( sysvals . ftracefile ) == False ) :
2016-12-14 10:37:07 -08:00
doError ( ' %s does not exist ' % sysvals . ftracefile )
2018-01-30 00:17:20 -08:00
if not live :
sysvals . setupAllKprobes ( )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
ksuscalls = [ ' ksys_sync ' , ' pm_prepare_console ' ]
2018-10-08 15:56:32 -07:00
krescalls = [ ' pm_restore_console ' ]
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
tracewatch = [ ' irq_wakeup ' ]
2016-07-15 23:34:14 +02:00
if sysvals . usekprobes :
tracewatch + = [ ' sync_filesystems ' , ' freeze_processes ' , ' syscore_suspend ' ,
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
' syscore_resume ' , ' resume_console ' , ' thaw_processes ' , ' CPU_ON ' ,
2020-07-20 18:02:49 -07:00
' CPU_OFF ' , ' acpi_suspend ' ]
2014-08-08 09:11:59 -07:00
# extract the callgraph and traceevent data
2020-07-20 18:02:49 -07:00
s2idle_enter = hwsus = False
2016-07-15 23:34:14 +02:00
tp = TestProps ( )
2020-07-20 18:02:49 -07:00
testruns , testdata = [ ] , [ ]
testrun , data , limbo = 0 , 0 , True
2018-01-30 00:17:20 -08:00
tf = sysvals . openlog ( sysvals . ftracefile , ' r ' )
2014-08-08 09:11:59 -07:00
phase = ' suspend_prepare '
for line in tf :
# remove any latent carriage returns
line = line . replace ( ' \r \n ' , ' ' )
2020-07-20 18:02:49 -07:00
if tp . stampInfo ( line , sysvals ) :
2016-07-15 23:34:14 +02:00
continue
2016-12-14 10:37:05 -08:00
# ignore all other commented lines
if line [ 0 ] == ' # ' :
continue
2014-08-08 09:11:59 -07:00
# ftrace line: parse only valid lines
2016-07-15 23:34:14 +02:00
m = re . match ( tp . ftrace_line_fmt , line )
2014-08-08 09:11:59 -07:00
if ( not m ) :
continue
# gather the basic message data from the line
m_time = m . group ( ' time ' )
2016-07-15 23:34:14 +02:00
m_proc = m . group ( ' proc ' )
2014-08-08 09:11:59 -07:00
m_pid = m . group ( ' pid ' )
m_msg = m . group ( ' msg ' )
2016-07-15 23:34:14 +02:00
if ( tp . cgformat ) :
2014-08-08 09:11:59 -07:00
m_param3 = m . group ( ' dur ' )
else :
m_param3 = ' traceevent '
if ( m_time and m_pid and m_msg ) :
t = FTraceLine ( m_time , m_msg , m_param3 )
pid = int ( m_pid )
else :
continue
# the line should be a call, return, or event
if ( not t . fcall and not t . freturn and not t . fevent ) :
continue
2016-07-15 23:34:14 +02:00
# find the start of suspend
if ( t . startMarker ( ) ) :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
data , limbo = Data ( len ( testdata ) ) , False
2016-07-15 23:34:14 +02:00
testdata . append ( data )
testrun = TestRun ( data )
testruns . append ( testrun )
2017-07-05 14:42:55 -07:00
tp . parseStamp ( data , sysvals )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
data . setStart ( t . time , t . name )
2018-10-08 15:56:32 -07:00
data . first_suspend_prepare = True
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phase = data . setPhase ( ' suspend_prepare ' , t . time , True )
2016-07-15 23:34:14 +02:00
continue
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if ( not data or limbo ) :
2016-07-15 23:34:14 +02:00
continue
2016-12-14 10:37:05 -08:00
# process cpu exec line
if t . type == ' tracing_mark_write ' :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
m = re . match ( tp . procexecfmt , t . name )
2016-12-14 10:37:05 -08:00
if ( m ) :
proclist = dict ( )
for ps in m . group ( ' ps ' ) . split ( ' , ' ) :
val = ps . split ( )
if not val :
continue
name = val [ 0 ] . replace ( ' -- ' , ' - ' )
proclist [ name ] = int ( val [ 1 ] )
data . pstl [ t . time ] = proclist
continue
2016-07-15 23:34:14 +02:00
# find the end of resume
if ( t . endMarker ( ) ) :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if data . tKernRes == 0 :
data . tKernRes = t . time
data . handleEndMarker ( t . time , t . name )
2016-07-15 23:34:14 +02:00
if ( not sysvals . usetracemarkers ) :
# no trace markers? then quit and be sure to finish recording
# the event we used to trigger resume end
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if ( ' thaw_processes ' in testrun . ttemp and len ( testrun . ttemp [ ' thaw_processes ' ] ) > 0 ) :
2016-07-15 23:34:14 +02:00
# if an entry exists, assume this is its end
testrun . ttemp [ ' thaw_processes ' ] [ - 1 ] [ ' end ' ] = t . time
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
limbo = True
2014-08-08 09:11:59 -07:00
continue
# trace event processing
if ( t . fevent ) :
if ( t . type == ' suspend_resume ' ) :
# suspend_resume trace events have two types, begin and end
if ( re . match ( ' (?P<name>.*) begin$ ' , t . name ) ) :
isbegin = True
elif ( re . match ( ' (?P<name>.*) end$ ' , t . name ) ) :
isbegin = False
else :
continue
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
if ' [ ' in t . name :
m = re . match ( ' (?P<name>.*) \ [.* ' , t . name )
2014-08-08 09:11:59 -07:00
else :
m = re . match ( ' (?P<name>.*) .* ' , t . name )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
name = m . group ( ' name ' )
2014-08-08 09:11:59 -07:00
# ignore these events
2016-07-15 23:34:14 +02:00
if ( name . split ( ' [ ' ) [ 0 ] in tracewatch ) :
2014-08-08 09:11:59 -07:00
continue
# -- phase changes --
2016-12-14 10:37:05 -08:00
# start of kernel suspend
if ( re . match ( ' suspend_enter \ [.* ' , t . name ) ) :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if ( isbegin and data . tKernSus == 0 ) :
2016-12-14 10:37:05 -08:00
data . tKernSus = t . time
continue
2014-08-08 09:11:59 -07:00
# suspend_prepare start
2016-12-14 10:37:05 -08:00
elif ( re . match ( ' dpm_prepare \ [.* ' , t . name ) ) :
2018-10-08 15:56:32 -07:00
if isbegin and data . first_suspend_prepare :
data . first_suspend_prepare = False
if data . tKernSus == 0 :
data . tKernSus = t . time
continue
phase = data . setPhase ( ' suspend_prepare ' , t . time , isbegin )
2014-08-08 09:11:59 -07:00
continue
# suspend start
elif ( re . match ( ' dpm_suspend \ [.* ' , t . name ) ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phase = data . setPhase ( ' suspend ' , t . time , isbegin )
2014-08-08 09:11:59 -07:00
continue
# suspend_late start
elif ( re . match ( ' dpm_suspend_late \ [.* ' , t . name ) ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phase = data . setPhase ( ' suspend_late ' , t . time , isbegin )
2014-08-08 09:11:59 -07:00
continue
# suspend_noirq start
elif ( re . match ( ' dpm_suspend_noirq \ [.* ' , t . name ) ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phase = data . setPhase ( ' suspend_noirq ' , t . time , isbegin )
2014-08-08 09:11:59 -07:00
continue
# suspend_machine/resume_machine
2020-07-20 18:02:49 -07:00
elif ( re . match ( tp . machinesuspend , t . name ) ) :
lp = data . lastPhase ( )
2014-08-08 09:11:59 -07:00
if ( isbegin ) :
2020-07-20 18:02:49 -07:00
hwsus = True
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if lp . startswith ( ' resume_machine ' ) :
2020-07-20 18:02:49 -07:00
# trim out s2idle loops, track time trying to freeze
llp = data . lastPhase ( 2 )
if llp . startswith ( ' suspend_machine ' ) :
2020-11-10 18:36:17 -08:00
if ' waking ' not in data . dmesg [ llp ] :
data . dmesg [ llp ] [ ' waking ' ] = [ 0 , 0.0 ]
data . dmesg [ llp ] [ ' waking ' ] [ 0 ] + = 1
data . dmesg [ llp ] [ ' waking ' ] [ 1 ] + = \
2020-07-20 18:02:49 -07:00
t . time - data . dmesg [ lp ] [ ' start ' ]
data . currphase = ' '
del data . dmesg [ lp ]
continue
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phase = data . setPhase ( ' suspend_machine ' , data . dmesg [ lp ] [ ' end ' ] , True )
data . setPhase ( phase , t . time , False )
if data . tSuspended == 0 :
2014-08-08 09:11:59 -07:00
data . tSuspended = t . time
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
else :
2020-07-20 18:02:49 -07:00
if lp . startswith ( ' resume_machine ' ) :
data . dmesg [ lp ] [ ' end ' ] = t . time
continue
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phase = data . setPhase ( ' resume_machine ' , t . time , True )
if ( sysvals . suspendmode in [ ' mem ' , ' disk ' ] ) :
2018-10-08 15:56:32 -07:00
susp = phase . replace ( ' resume ' , ' suspend ' )
if susp in data . dmesg :
data . dmesg [ susp ] [ ' end ' ] = t . time
2016-07-15 23:34:14 +02:00
data . tSuspended = t . time
2018-10-08 15:56:32 -07:00
data . tResumed = t . time
2016-07-15 23:34:14 +02:00
continue
2014-08-08 09:11:59 -07:00
# resume_noirq start
elif ( re . match ( ' dpm_resume_noirq \ [.* ' , t . name ) ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phase = data . setPhase ( ' resume_noirq ' , t . time , isbegin )
2014-08-08 09:11:59 -07:00
continue
# resume_early start
elif ( re . match ( ' dpm_resume_early \ [.* ' , t . name ) ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phase = data . setPhase ( ' resume_early ' , t . time , isbegin )
2014-08-08 09:11:59 -07:00
continue
# resume start
elif ( re . match ( ' dpm_resume \ [.* ' , t . name ) ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phase = data . setPhase ( ' resume ' , t . time , isbegin )
2014-08-08 09:11:59 -07:00
continue
# resume complete start
elif ( re . match ( ' dpm_complete \ [.* ' , t . name ) ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phase = data . setPhase ( ' resume_complete ' , t . time , isbegin )
2014-08-08 09:11:59 -07:00
continue
2016-07-15 23:34:14 +02:00
# skip trace events inside devices calls
if ( not data . isTraceEventOutsideDeviceCalls ( pid , t . time ) ) :
continue
# global events (outside device calls) are graphed
if ( name not in testrun . ttemp ) :
testrun . ttemp [ name ] = [ ]
2020-07-20 18:02:49 -07:00
# special handling for s2idle_enter
if name == ' machine_suspend ' :
if hwsus :
s2idle_enter = hwsus = False
elif s2idle_enter and not isbegin :
if ( len ( testrun . ttemp [ name ] ) > 0 ) :
testrun . ttemp [ name ] [ - 1 ] [ ' end ' ] = t . time
testrun . ttemp [ name ] [ - 1 ] [ ' loop ' ] + = 1
elif not s2idle_enter and isbegin :
s2idle_enter = True
testrun . ttemp [ name ] . append ( { ' begin ' : t . time ,
' end ' : t . time , ' pid ' : pid , ' loop ' : 0 } )
continue
2016-07-15 23:34:14 +02:00
if ( isbegin ) :
# create a new list entry
testrun . ttemp [ name ] . append ( \
{ ' begin ' : t . time , ' end ' : t . time , ' pid ' : pid } )
2014-08-08 09:11:59 -07:00
else :
2016-07-15 23:34:14 +02:00
if ( len ( testrun . ttemp [ name ] ) > 0 ) :
# if an entry exists, assume this is its end
testrun . ttemp [ name ] [ - 1 ] [ ' end ' ] = t . time
2014-08-08 09:11:59 -07:00
# device callback start
elif ( t . type == ' device_pm_callback_start ' ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if phase not in data . dmesg :
continue
2014-08-08 09:11:59 -07:00
m = re . match ( ' (?P<drv>.*) (?P<d>.*), parent: *(?P<p>.*), .* ' , \
t . name ) ;
if ( not m ) :
continue
drv = m . group ( ' drv ' )
n = m . group ( ' d ' )
p = m . group ( ' p ' )
if ( n and p ) :
data . newAction ( phase , n , pid , p , t . time , - 1 , drv )
2016-12-14 10:37:05 -08:00
if pid not in data . devpids :
data . devpids . append ( pid )
2014-08-08 09:11:59 -07:00
# device callback finish
elif ( t . type == ' device_pm_callback_end ' ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if phase not in data . dmesg :
continue
2014-08-08 09:11:59 -07:00
m = re . match ( ' (?P<drv>.*) (?P<d>.*), err.* ' , t . name ) ;
if ( not m ) :
continue
n = m . group ( ' d ' )
2020-07-20 18:02:49 -07:00
dev = data . findDevice ( phase , n )
if dev :
2014-08-08 09:11:59 -07:00
dev [ ' length ' ] = t . time - dev [ ' start ' ]
dev [ ' end ' ] = t . time
2016-07-15 23:34:14 +02:00
# kprobe event processing
elif ( t . fkprobe ) :
kprobename = t . type
kprobedata = t . name
key = ( kprobename , pid )
# displayname is generated from kprobe data
displayname = ' '
if ( t . fcall ) :
displayname = sysvals . kprobeDisplayName ( kprobename , kprobedata )
if not displayname :
continue
if ( key not in tp . ktemp ) :
tp . ktemp [ key ] = [ ]
tp . ktemp [ key ] . append ( {
' pid ' : pid ,
' begin ' : t . time ,
2019-05-14 10:53:58 -07:00
' end ' : - 1 ,
2016-07-15 23:34:14 +02:00
' name ' : displayname ,
' cdata ' : kprobedata ,
' proc ' : m_proc ,
} )
2018-10-08 15:56:32 -07:00
# start of kernel resume
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if ( data . tKernSus == 0 and phase == ' suspend_prepare ' \
and kprobename in ksuscalls ) :
2018-10-08 15:56:32 -07:00
data . tKernSus = t . time
2016-07-15 23:34:14 +02:00
elif ( t . freturn ) :
if ( key not in tp . ktemp ) or len ( tp . ktemp [ key ] ) < 1 :
continue
2019-05-14 10:53:58 -07:00
e = next ( ( x for x in reversed ( tp . ktemp [ key ] ) if x [ ' end ' ] < 0 ) , 0 )
if not e :
continue
e [ ' end ' ] = t . time
e [ ' rdata ' ] = kprobedata
2016-12-14 10:37:05 -08:00
# end of kernel resume
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if ( phase != ' suspend_prepare ' and kprobename in krescalls ) :
if phase in data . dmesg :
data . dmesg [ phase ] [ ' end ' ] = t . time
2016-12-14 10:37:05 -08:00
data . tKernRes = t . time
2014-08-08 09:11:59 -07:00
# callgraph processing
elif sysvals . usecallgraph :
2014-01-16 16:18:22 -08:00
# create a callgraph object for the data
2016-07-15 23:34:14 +02:00
key = ( m_proc , pid )
if ( key not in testrun . ftemp ) :
testrun . ftemp [ key ] = [ ]
2018-01-30 00:17:20 -08:00
testrun . ftemp [ key ] . append ( FTraceCallGraph ( pid , sysvals ) )
2014-01-16 16:18:22 -08:00
# when the call is finished, see which device matches it
2016-07-15 23:34:14 +02:00
cg = testrun . ftemp [ key ] [ - 1 ]
2018-01-30 00:17:20 -08:00
res = cg . addLine ( t )
if ( res != 0 ) :
testrun . ftemp [ key ] . append ( FTraceCallGraph ( pid , sysvals ) )
if ( res == - 1 ) :
testrun . ftemp [ key ] [ - 1 ] . addLine ( t )
2014-08-08 09:11:59 -07:00
tf . close ( )
2019-05-14 10:53:58 -07:00
if len ( testdata ) < 1 :
sysvals . vprint ( ' WARNING: ftrace start marker is missing ' )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if data and not data . devicegroups :
2019-05-14 10:53:58 -07:00
sysvals . vprint ( ' WARNING: ftrace end marker is missing ' )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
data . handleEndMarker ( t . time , t . name )
2014-08-08 09:11:59 -07:00
2016-07-15 23:34:14 +02:00
if sysvals . suspendmode == ' command ' :
for test in testruns :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for p in test . data . sortedPhases ( ) :
2016-12-14 10:37:06 -08:00
if p == ' suspend_prepare ' :
2016-07-15 23:34:14 +02:00
test . data . dmesg [ p ] [ ' start ' ] = test . data . start
test . data . dmesg [ p ] [ ' end ' ] = test . data . end
else :
2016-12-14 10:37:06 -08:00
test . data . dmesg [ p ] [ ' start ' ] = test . data . end
test . data . dmesg [ p ] [ ' end ' ] = test . data . end
test . data . tSuspended = test . data . end
test . data . tResumed = test . data . end
2016-07-15 23:34:14 +02:00
test . data . fwValid = False
2016-12-14 10:37:05 -08:00
# dev source and procmon events can be unreadable with mixed phase height
if sysvals . usedevsrc or sysvals . useprocmon :
sysvals . mixedphaseheight = False
2018-10-08 15:56:32 -07:00
# expand phase boundaries so there are no gaps
for data in testdata :
lp = data . sortedPhases ( ) [ 0 ]
for p in data . sortedPhases ( ) :
if ( p != lp and not ( ' machine ' in p and ' machine ' in lp ) ) :
data . dmesg [ lp ] [ ' end ' ] = data . dmesg [ p ] [ ' start ' ]
lp = p
2016-12-14 10:37:06 -08:00
for i in range ( len ( testruns ) ) :
test = testruns [ i ]
data = test . data
# find the total time range for this test (begin, end)
tlb , tle = data . start , data . end
if i < len ( testruns ) - 1 :
tle = testruns [ i + 1 ] . data . start
2016-12-14 10:37:05 -08:00
# add the process usage data to the timeline
if sysvals . useprocmon :
2016-12-14 10:37:06 -08:00
data . createProcessUsageEvents ( )
2014-08-08 09:11:59 -07:00
# add the traceevent data to the device hierarchy
if ( sysvals . usetraceevents ) :
2016-07-15 23:34:14 +02:00
# add actual trace funcs
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for name in sorted ( test . ttemp ) :
2014-08-08 09:11:59 -07:00
for event in test . ttemp [ name ] :
2020-07-20 18:02:49 -07:00
if event [ ' end ' ] - event [ ' begin ' ] < = 0 :
continue
title = name
if name == ' machine_suspend ' and ' loop ' in event :
title = ' s2idle_enter_ %d x ' % event [ ' loop ' ]
data . newActionGlobal ( title , event [ ' begin ' ] , event [ ' end ' ] , event [ ' pid ' ] )
2016-07-15 23:34:14 +02:00
# add the kprobe based virtual tracefuncs as actual devices
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for key in sorted ( tp . ktemp ) :
2016-07-15 23:34:14 +02:00
name , pid = key
if name not in sysvals . tracefuncs :
2014-08-08 09:11:59 -07:00
continue
2019-05-14 10:53:58 -07:00
if pid not in data . devpids :
data . devpids . append ( pid )
2016-07-15 23:34:14 +02:00
for e in tp . ktemp [ key ] :
kb , ke = e [ ' begin ' ] , e [ ' end ' ]
2019-05-14 10:53:58 -07:00
if ke - kb < 0.000001 or tlb > kb or tle < = kb :
2016-07-15 23:34:14 +02:00
continue
2016-12-14 10:37:06 -08:00
color = sysvals . kprobeColor ( name )
data . newActionGlobal ( e [ ' name ' ] , kb , ke , pid , color )
2016-07-15 23:34:14 +02:00
# add config base kprobes and dev kprobes
2016-12-14 10:37:06 -08:00
if sysvals . usedevsrc :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for key in sorted ( tp . ktemp ) :
2016-12-14 10:37:06 -08:00
name , pid = key
if name in sysvals . tracefuncs or name not in sysvals . dev_tracefuncs :
2016-07-15 23:34:14 +02:00
continue
2016-12-14 10:37:06 -08:00
for e in tp . ktemp [ key ] :
kb , ke = e [ ' begin ' ] , e [ ' end ' ]
2019-05-14 10:53:58 -07:00
if ke - kb < 0.000001 or tlb > kb or tle < = kb :
2016-12-14 10:37:06 -08:00
continue
data . addDeviceFunctionCall ( e [ ' name ' ] , name , e [ ' proc ' ] , pid , kb ,
2016-07-15 23:34:14 +02:00
ke , e [ ' cdata ' ] , e [ ' rdata ' ] )
if sysvals . usecallgraph :
# add the callgraph data to the device hierarchy
sortlist = dict ( )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for key in sorted ( test . ftemp ) :
2016-07-15 23:34:14 +02:00
proc , pid = key
for cg in test . ftemp [ key ] :
2018-01-30 00:17:20 -08:00
if len ( cg . list ) < 1 or cg . invalid or ( cg . end - cg . start == 0 ) :
2016-07-15 23:34:14 +02:00
continue
if ( not cg . postProcess ( ) ) :
id = ' task %s ' % ( pid )
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' Sanity check failed for ' + \
2016-07-15 23:34:14 +02:00
id + ' , ignoring this callback ' )
continue
# match cg data to devices
2018-01-30 00:17:20 -08:00
devname = ' '
if sysvals . suspendmode != ' command ' :
devname = cg . deviceMatch ( pid , data )
if not devname :
2016-07-15 23:34:14 +02:00
sortkey = ' %f %f %d ' % ( cg . start , cg . end , pid )
sortlist [ sortkey ] = cg
2019-05-14 10:53:58 -07:00
elif len ( cg . list ) > 1000000 and cg . name != sysvals . ftopfunc :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sysvals . vprint ( ' WARNING: the callgraph for %s is massive ( %d lines) ' % \
( devname , len ( cg . list ) ) )
2016-07-15 23:34:14 +02:00
# create blocks for orphan cg data
for sortkey in sorted ( sortlist ) :
cg = sortlist [ sortkey ]
2017-04-07 11:05:35 -07:00
name = cg . name
2016-07-15 23:34:14 +02:00
if sysvals . isCallgraphFunc ( name ) :
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' Callgraph found for task %d : %.3f ms, %s ' % ( cg . pid , ( cg . end - cg . start ) * 1000 , name ) )
2016-12-14 10:37:06 -08:00
cg . newActionFromFunction ( data )
2016-07-15 23:34:14 +02:00
if sysvals . suspendmode == ' command ' :
2018-05-24 09:36:28 -07:00
return ( testdata , ' ' )
2014-01-16 16:18:22 -08:00
2014-08-08 09:11:59 -07:00
# fill in any missing phases
2018-05-24 09:36:28 -07:00
error = [ ]
2014-08-08 09:11:59 -07:00
for data in testdata :
2018-05-24 09:36:28 -07:00
tn = ' ' if len ( testdata ) == 1 else ( ' %d ' % ( data . testnumber + 1 ) )
terr = ' '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phasedef = data . phasedef
lp = ' suspend_prepare '
for p in sorted ( phasedef , key = lambda k : phasedef [ k ] [ ' order ' ] ) :
if p not in data . dmesg :
2018-05-24 09:36:28 -07:00
if not terr :
2020-07-20 18:02:49 -07:00
ph = p if ' machine ' in p else lp
terr = ' %s %s failed in %s phase ' % ( sysvals . suspendmode , tn , ph )
pprint ( ' TEST %s FAILED: %s ' % ( tn , terr ) )
2018-05-24 09:36:28 -07:00
error . append ( terr )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if data . tSuspended == 0 :
data . tSuspended = data . dmesg [ lp ] [ ' end ' ]
if data . tResumed == 0 :
data . tResumed = data . dmesg [ lp ] [ ' end ' ]
data . fwValid = False
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' WARNING: phase " %s " is missing! ' % p )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
lp = p
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if not terr and ' dev ' in data . wifi and data . wifi [ ' stat ' ] == ' timeout ' :
terr = ' %s %s failed in wifi_resume <i>( %s %.0f s timeout)</i> ' % \
( sysvals . suspendmode , tn , data . wifi [ ' dev ' ] , data . wifi [ ' time ' ] )
error . append ( terr )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if not terr and data . enterfail :
2018-10-08 15:56:32 -07:00
pprint ( ' test %s FAILED: enter %s failed with %s ' % ( tn , sysvals . suspendmode , data . enterfail ) )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
terr = ' test %s failed to enter %s mode ' % ( tn , sysvals . suspendmode )
error . append ( terr )
if data . tSuspended == 0 :
data . tSuspended = data . tKernRes
if data . tResumed == 0 :
data . tResumed = data . tSuspended
2014-08-08 09:11:59 -07:00
if ( len ( sysvals . devicefilter ) > 0 ) :
data . deviceFilter ( sysvals . devicefilter )
data . fixupInitcallsThatDidntReturn ( )
2016-12-14 10:37:05 -08:00
if sysvals . usedevsrc :
data . optimizeDevSrc ( )
2014-08-08 09:11:59 -07:00
2016-12-14 10:37:06 -08:00
# x2: merge any overlapping devices between test runs
2016-12-14 10:37:05 -08:00
if sysvals . usedevsrc and len ( testdata ) > 1 :
tc = len ( testdata )
for i in range ( tc - 1 ) :
devlist = testdata [ i ] . overflowDevices ( )
for j in range ( i + 1 , tc ) :
testdata [ j ] . mergeOverlapDevices ( devlist )
2016-12-14 10:37:06 -08:00
testdata [ 0 ] . stitchTouchingThreads ( testdata [ 1 : ] )
2018-05-24 09:36:28 -07:00
return ( testdata , ' , ' . join ( error ) )
2014-08-08 09:11:59 -07:00
# Function: loadKernelLog
2014-01-16 16:18:22 -08:00
# Description:
2014-08-08 09:11:59 -07:00
# [deprecated for kernel 3.15.0 or newer]
# load the dmesg file into memory and fix up any ordering issues
# The dmesg filename is taken from sysvals
# Output:
# An array of empty Data objects with only their dmesgtext attributes set
2018-01-30 00:17:20 -08:00
def loadKernelLog ( ) :
sysvals . vprint ( ' Analyzing the dmesg data ( %s )... ' % \
os . path . basename ( sysvals . dmesgfile ) )
2014-08-08 09:11:59 -07:00
if ( os . path . exists ( sysvals . dmesgfile ) == False ) :
2016-12-14 10:37:07 -08:00
doError ( ' %s does not exist ' % sysvals . dmesgfile )
2014-08-08 09:11:59 -07:00
2016-07-15 23:34:14 +02:00
# there can be multiple test runs in a single file
tp = TestProps ( )
2016-12-14 10:37:07 -08:00
tp . stamp = datetime . now ( ) . strftime ( ' # suspend- % m %d % y- % H % M % S localhost mem unknown ' )
2014-08-08 09:11:59 -07:00
testruns = [ ]
data = 0
2018-01-30 00:17:20 -08:00
lf = sysvals . openlog ( sysvals . dmesgfile , ' r ' )
2014-01-16 16:18:22 -08:00
for line in lf :
2014-08-08 09:11:59 -07:00
line = line . replace ( ' \r \n ' , ' ' )
idx = line . find ( ' [ ' )
if idx > 1 :
line = line [ idx : ]
2020-07-20 18:02:49 -07:00
if tp . stampInfo ( line , sysvals ) :
2014-08-08 09:11:59 -07:00
continue
m = re . match ( ' [ \t ]*( \ [ *)(?P<ktime>[0-9 \ .]*)( \ ]) (?P<msg>.*) ' , line )
2016-07-15 23:34:14 +02:00
if ( not m ) :
continue
msg = m . group ( " msg " )
if ( re . match ( ' PM: Syncing filesystems.* ' , msg ) ) :
if ( data ) :
testruns . append ( data )
data = Data ( len ( testruns ) )
2017-07-05 14:42:55 -07:00
tp . parseStamp ( data , sysvals )
2016-07-15 23:34:14 +02:00
if ( not data ) :
continue
2016-12-14 10:37:07 -08:00
m = re . match ( ' .* *(?P<k>[0-9] \ .[0-9] {2} \ .[0-9]-.*) .* ' , msg )
if ( m ) :
sysvals . stamp [ ' kernel ' ] = m . group ( ' k ' )
m = re . match ( ' PM: Preparing system for (?P<m>.*) sleep ' , msg )
if ( m ) :
sysvals . stamp [ ' mode ' ] = sysvals . suspendmode = m . group ( ' m ' )
2016-07-15 23:34:14 +02:00
data . dmesgtext . append ( line )
2014-01-16 16:18:22 -08:00
lf . close ( )
2014-08-08 09:11:59 -07:00
2016-12-14 10:37:07 -08:00
if data :
testruns . append ( data )
if len ( testruns ) < 1 :
2019-05-14 10:53:58 -07:00
doError ( ' dmesg log has no suspend/resume data: %s ' \
2016-12-14 10:37:07 -08:00
% sysvals . dmesgfile )
2014-08-08 09:11:59 -07:00
# fix lines with same timestamp/function with the call and return swapped
for data in testruns :
last = ' '
for line in data . dmesgtext :
mc = re . match ( ' .*( \ [ *)(?P<t>[0-9 \ .]*)( \ ]) calling ' + \
' (?P<f>.*) \ + @ .*, parent: .* ' , line )
mr = re . match ( ' .*( \ [ *)(?P<t>[0-9 \ .]*)( \ ]) call ' + \
' (?P<f>.*) \ + returned .* after (?P<dt>.*) usecs ' , last )
if ( mc and mr and ( mc . group ( ' t ' ) == mr . group ( ' t ' ) ) and
( mc . group ( ' f ' ) == mr . group ( ' f ' ) ) ) :
i = data . dmesgtext . index ( last )
j = data . dmesgtext . index ( line )
data . dmesgtext [ i ] = line
data . dmesgtext [ j ] = last
last = line
return testruns
# Function: parseKernelLog
2014-01-16 16:18:22 -08:00
# Description:
2014-08-08 09:11:59 -07:00
# [deprecated for kernel 3.15.0 or newer]
2014-01-16 16:18:22 -08:00
# Analyse a dmesg log output file generated from this app during
# the execution phase. Create a set of device structures in memory
# for subsequent formatting in the html output file
2014-08-08 09:11:59 -07:00
# This call is only for legacy support on kernels where the ftrace
# data lacks the suspend_resume or device_pm_callbacks trace events.
# Arguments:
# data: an empty Data object (with dmesgtext) obtained from loadKernelLog
# Output:
# The filled Data object
def parseKernelLog ( data ) :
phase = ' suspend_runtime '
2014-01-16 16:18:22 -08:00
2014-08-08 09:11:59 -07:00
if ( data . fwValid ) :
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' Firmware Suspend = %u ns, Firmware Resume = %u ns ' % \
2014-08-08 09:11:59 -07:00
( data . fwSuspend , data . fwResume ) )
2014-01-16 16:18:22 -08:00
2014-08-08 09:11:59 -07:00
# dmesg phase match table
2014-01-16 16:18:22 -08:00
dm = {
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
' suspend_prepare ' : [ ' PM: Syncing filesystems.* ' ] ,
' suspend ' : [ ' PM: Entering [a-z]* sleep.* ' , ' Suspending console.* ' ] ,
' suspend_late ' : [ ' PM: suspend of devices complete after.* ' ] ,
' suspend_noirq ' : [ ' PM: late suspend of devices complete after.* ' ] ,
' suspend_machine ' : [ ' PM: noirq suspend of devices complete after.* ' ] ,
' resume_machine ' : [ ' ACPI: Low-level resume complete.* ' ] ,
' resume_noirq ' : [ ' ACPI: Waking up from system sleep state.* ' ] ,
' resume_early ' : [ ' PM: noirq resume of devices complete after.* ' ] ,
' resume ' : [ ' PM: early resume of devices complete after.* ' ] ,
' resume_complete ' : [ ' PM: resume of devices complete after.* ' ] ,
' post_resume ' : [ ' .*Restarting tasks \ . \ . \ ..* ' ] ,
2014-01-16 16:18:22 -08:00
}
2014-08-08 09:11:59 -07:00
if ( sysvals . suspendmode == ' standby ' ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
dm [ ' resume_machine ' ] = [ ' PM: Restoring platform NVS memory ' ]
2014-08-08 09:11:59 -07:00
elif ( sysvals . suspendmode == ' disk ' ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
dm [ ' suspend_late ' ] = [ ' PM: freeze of devices complete after.* ' ]
dm [ ' suspend_noirq ' ] = [ ' PM: late freeze of devices complete after.* ' ]
dm [ ' suspend_machine ' ] = [ ' PM: noirq freeze of devices complete after.* ' ]
dm [ ' resume_machine ' ] = [ ' PM: Restoring platform NVS memory ' ]
dm [ ' resume_early ' ] = [ ' PM: noirq restore of devices complete after.* ' ]
dm [ ' resume ' ] = [ ' PM: early restore of devices complete after.* ' ]
dm [ ' resume_complete ' ] = [ ' PM: restore of devices complete after.* ' ]
2014-08-08 09:11:59 -07:00
elif ( sysvals . suspendmode == ' freeze ' ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
dm [ ' resume_machine ' ] = [ ' ACPI: resume from mwait ' ]
2014-08-08 09:11:59 -07:00
# action table (expected events that occur and show up in dmesg)
at = {
' sync_filesystems ' : {
' smsg ' : ' PM: Syncing filesystems.* ' ,
' emsg ' : ' PM: Preparing system for mem sleep.* ' } ,
' freeze_user_processes ' : {
' smsg ' : ' Freezing user space processes .* ' ,
' emsg ' : ' Freezing remaining freezable tasks.* ' } ,
' freeze_tasks ' : {
' smsg ' : ' Freezing remaining freezable tasks.* ' ,
' emsg ' : ' PM: Entering (?P<mode>[a-z,A-Z]*) sleep.* ' } ,
' ACPI prepare ' : {
' smsg ' : ' ACPI: Preparing to enter system sleep state.* ' ,
' emsg ' : ' PM: Saving platform NVS memory.* ' } ,
' PM vns ' : {
' smsg ' : ' PM: Saving platform NVS memory.* ' ,
' emsg ' : ' Disabling non-boot CPUs .* ' } ,
}
t0 = - 1.0
cpu_start = - 1.0
prevktime = - 1.0
actions = dict ( )
for line in data . dmesgtext :
2014-01-16 16:18:22 -08:00
# parse each dmesg line into the time and message
2014-08-08 09:11:59 -07:00
m = re . match ( ' [ \t ]*( \ [ *)(?P<ktime>[0-9 \ .]*)( \ ]) (?P<msg>.*) ' , line )
2014-01-16 16:18:22 -08:00
if ( m ) :
2014-08-08 09:11:59 -07:00
val = m . group ( ' ktime ' )
try :
ktime = float ( val )
except :
continue
msg = m . group ( ' msg ' )
# initialize data start to first line time
if t0 < 0 :
data . setStart ( ktime )
t0 = ktime
2014-01-16 16:18:22 -08:00
else :
continue
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
# check for a phase change line
phasechange = False
for p in dm :
for s in dm [ p ] :
if ( re . match ( s , msg ) ) :
phasechange , phase = True , p
break
2014-08-08 09:11:59 -07:00
# hack for determining resume_machine end for freeze
if ( not sysvals . usetraceevents and sysvals . suspendmode == ' freeze ' \
and phase == ' resume_machine ' and \
re . match ( ' calling (?P<f>.*) \ + @ .*, parent: .* ' , msg ) ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
data . setPhase ( phase , ktime , False )
2014-08-08 09:11:59 -07:00
phase = ' resume_noirq '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
data . setPhase ( phase , ktime , True )
if phasechange :
if phase == ' suspend_prepare ' :
data . setPhase ( phase , ktime , True )
data . setStart ( ktime )
data . tKernSus = ktime
elif phase == ' suspend ' :
lp = data . lastPhase ( )
if lp :
data . setPhase ( lp , ktime , False )
data . setPhase ( phase , ktime , True )
elif phase == ' suspend_late ' :
lp = data . lastPhase ( )
if lp :
data . setPhase ( lp , ktime , False )
data . setPhase ( phase , ktime , True )
elif phase == ' suspend_noirq ' :
lp = data . lastPhase ( )
if lp :
data . setPhase ( lp , ktime , False )
data . setPhase ( phase , ktime , True )
elif phase == ' suspend_machine ' :
lp = data . lastPhase ( )
if lp :
data . setPhase ( lp , ktime , False )
data . setPhase ( phase , ktime , True )
elif phase == ' resume_machine ' :
lp = data . lastPhase ( )
if ( sysvals . suspendmode in [ ' freeze ' , ' standby ' ] ) :
data . tSuspended = prevktime
if lp :
data . setPhase ( lp , prevktime , False )
else :
data . tSuspended = ktime
if lp :
data . setPhase ( lp , prevktime , False )
data . tResumed = ktime
data . setPhase ( phase , ktime , True )
elif phase == ' resume_noirq ' :
lp = data . lastPhase ( )
if lp :
data . setPhase ( lp , ktime , False )
data . setPhase ( phase , ktime , True )
elif phase == ' resume_early ' :
lp = data . lastPhase ( )
if lp :
data . setPhase ( lp , ktime , False )
data . setPhase ( phase , ktime , True )
elif phase == ' resume ' :
lp = data . lastPhase ( )
if lp :
data . setPhase ( lp , ktime , False )
data . setPhase ( phase , ktime , True )
elif phase == ' resume_complete ' :
lp = data . lastPhase ( )
if lp :
data . setPhase ( lp , ktime , False )
data . setPhase ( phase , ktime , True )
elif phase == ' post_resume ' :
lp = data . lastPhase ( )
if lp :
data . setPhase ( lp , ktime , False )
data . setEnd ( ktime )
data . tKernRes = ktime
break
2014-01-16 16:18:22 -08:00
# -- device callbacks --
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if ( phase in data . sortedPhases ( ) ) :
2014-01-16 16:18:22 -08:00
# device init call
2014-08-08 09:11:59 -07:00
if ( re . match ( ' calling (?P<f>.*) \ + @ .*, parent: .* ' , msg ) ) :
sm = re . match ( ' calling (?P<f>.*) \ + @ ' + \
' (?P<n>.*), parent: (?P<p>.*) ' , msg ) ;
f = sm . group ( ' f ' )
n = sm . group ( ' n ' )
p = sm . group ( ' p ' )
2014-01-16 16:18:22 -08:00
if ( f and n and p ) :
2014-08-08 09:11:59 -07:00
data . newAction ( phase , f , int ( n ) , p , ktime , - 1 , ' ' )
2014-01-16 16:18:22 -08:00
# device init return
2014-08-08 09:11:59 -07:00
elif ( re . match ( ' call (?P<f>.*) \ + returned .* after ' + \
' (?P<t>.*) usecs ' , msg ) ) :
sm = re . match ( ' call (?P<f>.*) \ + returned .* after ' + \
' (?P<t>.*) usecs(?P<a>.*) ' , msg ) ;
f = sm . group ( ' f ' )
t = sm . group ( ' t ' )
2014-01-16 16:18:22 -08:00
list = data . dmesg [ phase ] [ ' list ' ]
if ( f in list ) :
dev = list [ f ]
dev [ ' length ' ] = int ( t )
dev [ ' end ' ] = ktime
2014-08-08 09:11:59 -07:00
# if trace events are not available, these are better than nothing
if ( not sysvals . usetraceevents ) :
# look for known actions
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for a in sorted ( at ) :
2014-08-08 09:11:59 -07:00
if ( re . match ( at [ a ] [ ' smsg ' ] , msg ) ) :
if ( a not in actions ) :
actions [ a ] = [ ]
actions [ a ] . append ( { ' begin ' : ktime , ' end ' : ktime } )
if ( re . match ( at [ a ] [ ' emsg ' ] , msg ) ) :
2016-07-15 23:34:14 +02:00
if ( a in actions ) :
actions [ a ] [ - 1 ] [ ' end ' ] = ktime
2014-08-08 09:11:59 -07:00
# now look for CPU on/off events
if ( re . match ( ' Disabling non-boot CPUs .* ' , msg ) ) :
# start of first cpu suspend
cpu_start = ktime
elif ( re . match ( ' Enabling non-boot CPUs .* ' , msg ) ) :
# start of first cpu resume
cpu_start = ktime
elif ( re . match ( ' smpboot: CPU (?P<cpu>[0-9]*) is now offline ' , msg ) ) :
# end of a cpu suspend, start of the next
m = re . match ( ' smpboot: CPU (?P<cpu>[0-9]*) is now offline ' , msg )
cpu = ' CPU ' + m . group ( ' cpu ' )
if ( cpu not in actions ) :
actions [ cpu ] = [ ]
actions [ cpu ] . append ( { ' begin ' : cpu_start , ' end ' : ktime } )
cpu_start = ktime
elif ( re . match ( ' CPU(?P<cpu>[0-9]*) is up ' , msg ) ) :
# end of a cpu resume, start of the next
m = re . match ( ' CPU(?P<cpu>[0-9]*) is up ' , msg )
cpu = ' CPU ' + m . group ( ' cpu ' )
if ( cpu not in actions ) :
actions [ cpu ] = [ ]
actions [ cpu ] . append ( { ' begin ' : cpu_start , ' end ' : ktime } )
cpu_start = ktime
prevktime = ktime
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
data . initDevicegroups ( )
2014-01-16 16:18:22 -08:00
# fill in any missing phases
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phasedef = data . phasedef
terr , lp = ' ' , ' suspend_prepare '
for p in sorted ( phasedef , key = lambda k : phasedef [ k ] [ ' order ' ] ) :
if p not in data . dmesg :
if not terr :
2018-10-08 15:56:32 -07:00
pprint ( ' TEST FAILED: %s failed in %s phase ' % ( sysvals . suspendmode , lp ) )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
terr = ' %s failed in %s phase ' % ( sysvals . suspendmode , lp )
if data . tSuspended == 0 :
data . tSuspended = data . dmesg [ lp ] [ ' end ' ]
if data . tResumed == 0 :
data . tResumed = data . dmesg [ lp ] [ ' end ' ]
sysvals . vprint ( ' WARNING: phase " %s " is missing! ' % p )
lp = p
lp = data . sortedPhases ( ) [ 0 ]
for p in data . sortedPhases ( ) :
if ( p != lp and not ( ' machine ' in p and ' machine ' in lp ) ) :
data . dmesg [ lp ] [ ' end ' ] = data . dmesg [ p ] [ ' start ' ]
2014-01-16 16:18:22 -08:00
lp = p
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if data . tSuspended == 0 :
data . tSuspended = data . tKernRes
if data . tResumed == 0 :
data . tResumed = data . tSuspended
2014-01-16 16:18:22 -08:00
2014-08-08 09:11:59 -07:00
# fill in any actions we've found
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for name in sorted ( actions ) :
2014-08-08 09:11:59 -07:00
for event in actions [ name ] :
2016-07-15 23:34:14 +02:00
data . newActionGlobal ( name , event [ ' begin ' ] , event [ ' end ' ] )
2014-08-08 09:11:59 -07:00
if ( len ( sysvals . devicefilter ) > 0 ) :
data . deviceFilter ( sysvals . devicefilter )
2014-01-16 16:18:22 -08:00
data . fixupInitcallsThatDidntReturn ( )
return True
2017-04-07 11:05:35 -07:00
def callgraphHTML ( sv , hf , num , cg , title , color , devid ) :
html_func_top = ' <article id= " {0} " class= " atop " style= " background: {1} " > \n <input type= " checkbox " class= " pf " id= " f {2} " checked/><label for= " f {2} " > {3} {4} </label> \n '
html_func_start = ' <article> \n <input type= " checkbox " class= " pf " id= " f {0} " checked/><label for= " f {0} " > {1} {2} </label> \n '
html_func_end = ' </article> \n '
html_func_leaf = ' <article> {0} {1} </article> \n '
cgid = devid
if cg . id :
cgid + = cg . id
cglen = ( cg . end - cg . start ) * 1000
if cglen < sv . mincglen :
return num
fmt = ' <r>( %.3f ms @ ' + sv . timeformat + ' to ' + sv . timeformat + ' )</r> '
flen = fmt % ( cglen , cg . start , cg . end )
hf . write ( html_func_top . format ( cgid , color , num , title , flen ) )
num + = 1
for line in cg . list :
if ( line . length < 0.000000001 ) :
flen = ' '
else :
fmt = ' <n>( %.3f ms @ ' + sv . timeformat + ' )</n> '
flen = fmt % ( line . length * 1000 , line . time )
2018-01-30 00:17:20 -08:00
if line . isLeaf ( ) :
2017-04-07 11:05:35 -07:00
hf . write ( html_func_leaf . format ( line . name , flen ) )
2018-01-30 00:17:20 -08:00
elif line . freturn :
2017-04-07 11:05:35 -07:00
hf . write ( html_func_end )
else :
hf . write ( html_func_start . format ( num , line . name , flen ) )
num + = 1
hf . write ( html_func_end )
return num
def addCallgraphs ( sv , hf , data ) :
hf . write ( ' <section id= " callgraphs " class= " callgraph " > \n ' )
# write out the ftrace data converted to html
num = 0
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for p in data . sortedPhases ( ) :
2017-04-07 11:05:35 -07:00
if sv . cgphase and p != sv . cgphase :
continue
list = data . dmesg [ p ] [ ' list ' ]
2020-07-20 18:02:49 -07:00
for d in data . sortedDevices ( p ) :
if len ( sv . cgfilter ) > 0 and d not in sv . cgfilter :
2017-07-05 14:42:55 -07:00
continue
2020-07-20 18:02:49 -07:00
dev = list [ d ]
2017-04-07 11:05:35 -07:00
color = ' white '
if ' color ' in data . dmesg [ p ] :
color = data . dmesg [ p ] [ ' color ' ]
if ' color ' in dev :
color = dev [ ' color ' ]
2020-07-20 18:02:49 -07:00
name = d if ' [ ' not in d else d . split ( ' [ ' ) [ 0 ]
if ( d in sv . devprops ) :
name = sv . devprops [ d ] . altName ( d )
if ' drv ' in dev and dev [ ' drv ' ] :
name + = ' { %s } ' % dev [ ' drv ' ]
2017-04-07 11:05:35 -07:00
if sv . suspendmode in suspendmodename :
name + = ' ' + p
if ( ' ftrace ' in dev ) :
cg = dev [ ' ftrace ' ]
2019-05-14 10:53:58 -07:00
if cg . name == sv . ftopfunc :
name = ' top level suspend/resume call '
2017-04-07 11:05:35 -07:00
num = callgraphHTML ( sv , hf , num , cg ,
name , color , dev [ ' id ' ] )
if ( ' ftraces ' in dev ) :
for cg in dev [ ' ftraces ' ] :
num = callgraphHTML ( sv , hf , num , cg ,
name + ' → ' + cg . name , color , dev [ ' id ' ] )
hf . write ( ' \n \n </section> \n ' )
2019-05-14 10:53:57 -07:00
def summaryCSS ( title , center = True ) :
tdcenter = ' text-align:center; ' if center else ' '
out = ' <!DOCTYPE html> \n <html> \n <head> \n \
2014-08-08 09:11:59 -07:00
< meta http - equiv = " content-type " content = " text/html; charset=UTF-8 " > \n \
2019-05-14 10:53:57 -07:00
< title > ' +title+ ' < / title > \n \
2014-08-08 09:11:59 -07:00
< style type = \' text/css \' > \n \
2017-04-07 11:05:35 -07:00
. stamp { width : 100 % ; text - align : center ; background : #888;line-height:30px;color:white;font: 25px Arial;}\n\
2019-05-14 10:53:57 -07:00
table { width : 100 % ; border - collapse : collapse ; border : 1 px solid ; } \n \
2017-04-07 11:05:35 -07:00
th { border : 1 px solid black ; background : #222;color:white;}\n\
2019-05-14 10:53:57 -07:00
td { font : 14 px " Times New Roman " ; ' +tdcenter+ ' } \n \
2018-05-24 09:36:28 -07:00
tr . head td { border : 1 px solid black ; background : #aaa;}\n\
tr . alt { background - color : #ddd;}\n\
tr . notice { color : red ; } \n \
. minval { background - color : #BBFFBB;}\n\
. medval { background - color : #BBBBFF;}\n\
. maxval { background - color : #FFBBBB;}\n\
. head a { color : #000;text-decoration: none;}\n\
2014-08-08 09:11:59 -07:00
< / style > \n < / head > \n < body > \n '
2019-05-14 10:53:57 -07:00
return out
# Function: createHTMLSummarySimple
# Description:
# Create summary html file for a series of tests
# Arguments:
# testruns: array of Data objects from parseTraceLog
def createHTMLSummarySimple ( testruns , htmlfile , title ) :
# write the html header first (html head, css code, up to body start)
html = summaryCSS ( ' Summary - SleepGraph ' )
2014-08-08 09:11:59 -07:00
2018-05-24 09:36:28 -07:00
# extract the test data into list
list = dict ( )
2019-05-14 10:53:58 -07:00
tAvg , tMin , tMax , tMed = [ 0.0 , 0.0 ] , [ 0.0 , 0.0 ] , [ 0.0 , 0.0 ] , [ dict ( ) , dict ( ) ]
2018-05-24 09:36:28 -07:00
iMin , iMed , iMax = [ 0 , 0 ] , [ 0 , 0 ] , [ 0 , 0 ]
num = 0
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
useturbo = usewifi = False
2018-05-24 09:36:28 -07:00
lastmode = ' '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
cnt = dict ( )
2018-05-24 09:36:28 -07:00
for data in sorted ( testruns , key = lambda v : ( v [ ' mode ' ] , v [ ' host ' ] , v [ ' kernel ' ] , v [ ' time ' ] ) ) :
mode = data [ ' mode ' ]
if mode not in list :
list [ mode ] = { ' data ' : [ ] , ' avg ' : [ 0 , 0 ] , ' min ' : [ 0 , 0 ] , ' max ' : [ 0 , 0 ] , ' med ' : [ 0 , 0 ] }
if lastmode and lastmode != mode and num > 0 :
for i in range ( 2 ) :
s = sorted ( tMed [ i ] )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
list [ lastmode ] [ ' med ' ] [ i ] = s [ int ( len ( s ) / / 2 ) ]
2019-05-14 10:53:58 -07:00
iMed [ i ] = tMed [ i ] [ list [ lastmode ] [ ' med ' ] [ i ] ]
2018-05-24 09:36:28 -07:00
list [ lastmode ] [ ' avg ' ] = [ tAvg [ 0 ] / num , tAvg [ 1 ] / num ]
list [ lastmode ] [ ' min ' ] = tMin
list [ lastmode ] [ ' max ' ] = tMax
list [ lastmode ] [ ' idx ' ] = ( iMin , iMed , iMax )
2019-05-14 10:53:58 -07:00
tAvg , tMin , tMax , tMed = [ 0.0 , 0.0 ] , [ 0.0 , 0.0 ] , [ 0.0 , 0.0 ] , [ dict ( ) , dict ( ) ]
2018-05-24 09:36:28 -07:00
iMin , iMed , iMax = [ 0 , 0 ] , [ 0 , 0 ] , [ 0 , 0 ]
num = 0
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
pkgpc10 = syslpi = wifi = ' '
2019-05-14 10:53:58 -07:00
if ' pkgpc10 ' in data and ' syslpi ' in data :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
pkgpc10 , syslpi , useturbo = data [ ' pkgpc10 ' ] , data [ ' syslpi ' ] , True
if ' wifi ' in data :
wifi , usewifi = data [ ' wifi ' ] , True
2019-05-14 10:53:57 -07:00
res = data [ ' result ' ]
2018-05-24 09:36:28 -07:00
tVal = [ float ( data [ ' suspend ' ] ) , float ( data [ ' resume ' ] ) ]
list [ mode ] [ ' data ' ] . append ( [ data [ ' host ' ] , data [ ' kernel ' ] ,
2019-05-14 10:53:57 -07:00
data [ ' time ' ] , tVal [ 0 ] , tVal [ 1 ] , data [ ' url ' ] , res ,
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
data [ ' issues ' ] , data [ ' sus_worst ' ] , data [ ' sus_worsttime ' ] ,
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
data [ ' res_worst ' ] , data [ ' res_worsttime ' ] , pkgpc10 , syslpi , wifi ] )
2018-05-24 09:36:28 -07:00
idx = len ( list [ mode ] [ ' data ' ] ) - 1
2019-05-14 10:53:57 -07:00
if res . startswith ( ' fail in ' ) :
res = ' fail '
if res not in cnt :
cnt [ res ] = 1
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
else :
2019-05-14 10:53:57 -07:00
cnt [ res ] + = 1
if res == ' pass ' :
2018-05-24 09:36:28 -07:00
for i in range ( 2 ) :
2019-05-14 10:53:58 -07:00
tMed [ i ] [ tVal [ i ] ] = idx
2018-05-24 09:36:28 -07:00
tAvg [ i ] + = tVal [ i ]
if tMin [ i ] == 0 or tVal [ i ] < tMin [ i ] :
iMin [ i ] = idx
tMin [ i ] = tVal [ i ]
if tMax [ i ] == 0 or tVal [ i ] > tMax [ i ] :
iMax [ i ] = idx
tMax [ i ] = tVal [ i ]
num + = 1
lastmode = mode
if lastmode and num > 0 :
for i in range ( 2 ) :
s = sorted ( tMed [ i ] )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
list [ lastmode ] [ ' med ' ] [ i ] = s [ int ( len ( s ) / / 2 ) ]
2019-05-14 10:53:58 -07:00
iMed [ i ] = tMed [ i ] [ list [ lastmode ] [ ' med ' ] [ i ] ]
2018-05-24 09:36:28 -07:00
list [ lastmode ] [ ' avg ' ] = [ tAvg [ 0 ] / num , tAvg [ 1 ] / num ]
list [ lastmode ] [ ' min ' ] = tMin
list [ lastmode ] [ ' max ' ] = tMax
list [ lastmode ] [ ' idx ' ] = ( iMin , iMed , iMax )
2014-08-08 09:11:59 -07:00
# group test header
2018-05-24 09:36:28 -07:00
desc = [ ]
for ilk in sorted ( cnt , reverse = True ) :
if cnt [ ilk ] > 0 :
desc . append ( ' %d %s ' % ( cnt [ ilk ] , ilk ) )
2018-10-08 15:56:32 -07:00
html + = ' <div class= " stamp " > %s ( %d tests: %s )</div> \n ' % ( title , len ( testruns ) , ' , ' . join ( desc ) )
2014-08-08 09:11:59 -07:00
th = ' \t <th> {0} </th> \n '
td = ' \t <td> {0} </td> \n '
2018-05-24 09:36:28 -07:00
tdh = ' \t <td {1} > {0} </td> \n '
2017-04-07 11:05:35 -07:00
tdlink = ' \t <td><a href= " {0} " >html</a></td> \n '
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
cols = 12
if useturbo :
cols + = 2
if usewifi :
cols + = 1
colspan = ' %d ' % cols
2014-08-08 09:11:59 -07:00
# table header
2019-05-14 10:53:57 -07:00
html + = ' <table> \n <tr> \n ' + th . format ( ' # ' ) + \
2017-04-07 11:05:35 -07:00
th . format ( ' Mode ' ) + th . format ( ' Host ' ) + th . format ( ' Kernel ' ) + \
2018-05-24 09:36:28 -07:00
th . format ( ' Test Time ' ) + th . format ( ' Result ' ) + th . format ( ' Issues ' ) + \
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
th . format ( ' Suspend ' ) + th . format ( ' Resume ' ) + \
th . format ( ' Worst Suspend Device ' ) + th . format ( ' SD Time ' ) + \
2019-05-14 10:53:58 -07:00
th . format ( ' Worst Resume Device ' ) + th . format ( ' RD Time ' )
if useturbo :
html + = th . format ( ' PkgPC10 ' ) + th . format ( ' SysLPI ' )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if usewifi :
html + = th . format ( ' Wifi ' )
2019-05-14 10:53:58 -07:00
html + = th . format ( ' Detail ' ) + ' </tr> \n '
2018-05-24 09:36:28 -07:00
# export list into html
head = ' <tr class= " head " ><td> {0} </td><td> {1} </td> ' + \
2019-05-14 10:53:58 -07:00
' <td colspan= ' + colspan + ' class= " sus " >Suspend Avg= {2} ' + \
2018-05-24 09:36:28 -07:00
' <span class=minval><a href= " #s {10} min " >Min= {3} </a></span> ' + \
' <span class=medval><a href= " #s {10} med " >Med= {4} </a></span> ' + \
' <span class=maxval><a href= " #s {10} max " >Max= {5} </a></span> ' + \
' Resume Avg= {6} ' + \
' <span class=minval><a href= " #r {10} min " >Min= {7} </a></span> ' + \
' <span class=medval><a href= " #r {10} med " >Med= {8} </a></span> ' + \
' <span class=maxval><a href= " #r {10} max " >Max= {9} </a></span></td> ' + \
' </tr> \n '
2019-05-14 10:53:58 -07:00
headnone = ' <tr class= " head " ><td> {0} </td><td> {1} </td><td colspan= ' + \
colspan + ' ></td></tr> \n '
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for mode in sorted ( list ) :
2018-05-24 09:36:28 -07:00
# header line for each suspend mode
num = 0
tAvg , tMin , tMax , tMed = list [ mode ] [ ' avg ' ] , list [ mode ] [ ' min ' ] , \
list [ mode ] [ ' max ' ] , list [ mode ] [ ' med ' ]
count = len ( list [ mode ] [ ' data ' ] )
if ' idx ' in list [ mode ] :
iMin , iMed , iMax = list [ mode ] [ ' idx ' ]
html + = head . format ( ' %d ' % count , mode . upper ( ) ,
' %.3f ' % tAvg [ 0 ] , ' %.3f ' % tMin [ 0 ] , ' %.3f ' % tMed [ 0 ] , ' %.3f ' % tMax [ 0 ] ,
' %.3f ' % tAvg [ 1 ] , ' %.3f ' % tMin [ 1 ] , ' %.3f ' % tMed [ 1 ] , ' %.3f ' % tMax [ 1 ] ,
mode . lower ( )
)
2014-08-08 09:11:59 -07:00
else :
2018-05-24 09:36:28 -07:00
iMin = iMed = iMax = [ - 1 , - 1 , - 1 ]
html + = headnone . format ( ' %d ' % count , mode . upper ( ) )
for d in list [ mode ] [ ' data ' ] :
# row classes - alternate row color
rcls = [ ' alt ' ] if num % 2 == 1 else [ ]
if d [ 6 ] != ' pass ' :
rcls . append ( ' notice ' )
html + = ' <tr class= " ' + ( ' ' . join ( rcls ) ) + ' " > \n ' if len ( rcls ) > 0 else ' <tr> \n '
# figure out if the line has sus or res highlighted
idx = list [ mode ] [ ' data ' ] . index ( d )
tHigh = [ ' ' , ' ' ]
for i in range ( 2 ) :
tag = ' s %s ' % mode if i == 0 else ' r %s ' % mode
if idx == iMin [ i ] :
tHigh [ i ] = ' id= " %s min " class=minval title= " Minimum " ' % tag
elif idx == iMax [ i ] :
tHigh [ i ] = ' id= " %s max " class=maxval title= " Maximum " ' % tag
elif idx == iMed [ i ] :
tHigh [ i ] = ' id= " %s med " class=medval title= " Median " ' % tag
html + = td . format ( " %d " % ( list [ mode ] [ ' data ' ] . index ( d ) + 1 ) ) # row
html + = td . format ( mode ) # mode
html + = td . format ( d [ 0 ] ) # host
html + = td . format ( d [ 1 ] ) # kernel
html + = td . format ( d [ 2 ] ) # time
html + = td . format ( d [ 6 ] ) # result
html + = td . format ( d [ 7 ] ) # issues
html + = tdh . format ( ' %.3f ms ' % d [ 3 ] , tHigh [ 0 ] ) if d [ 3 ] else td . format ( ' ' ) # suspend
html + = tdh . format ( ' %.3f ms ' % d [ 4 ] , tHigh [ 1 ] ) if d [ 4 ] else td . format ( ' ' ) # resume
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
html + = td . format ( d [ 8 ] ) # sus_worst
html + = td . format ( ' %.3f ms ' % d [ 9 ] ) if d [ 9 ] else td . format ( ' ' ) # sus_worst time
html + = td . format ( d [ 10 ] ) # res_worst
html + = td . format ( ' %.3f ms ' % d [ 11 ] ) if d [ 11 ] else td . format ( ' ' ) # res_worst time
2019-05-14 10:53:58 -07:00
if useturbo :
html + = td . format ( d [ 12 ] ) # pkg_pc10
html + = td . format ( d [ 13 ] ) # syslpi
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if usewifi :
html + = td . format ( d [ 14 ] ) # wifi
2018-05-24 09:36:28 -07:00
html + = tdlink . format ( d [ 5 ] ) if d [ 5 ] else td . format ( ' ' ) # url
html + = ' </tr> \n '
num + = 1
2014-08-08 09:11:59 -07:00
# flush the data to file
2017-04-07 11:05:35 -07:00
hf = open ( htmlfile , ' w ' )
hf . write ( html + ' </table> \n </body> \n </html> \n ' )
2014-08-08 09:11:59 -07:00
hf . close ( )
2019-05-14 10:53:57 -07:00
def createHTMLDeviceSummary ( testruns , htmlfile , title ) :
html = summaryCSS ( ' Device Summary - SleepGraph ' , False )
# create global device list from all tests
devall = dict ( )
for data in testruns :
host , url , devlist = data [ ' host ' ] , data [ ' url ' ] , data [ ' devlist ' ]
for type in devlist :
if type not in devall :
devall [ type ] = dict ( )
mdevlist , devlist = devall [ type ] , data [ ' devlist ' ] [ type ]
for name in devlist :
length = devlist [ name ]
if name not in mdevlist :
mdevlist [ name ] = { ' name ' : name , ' host ' : host ,
' worst ' : length , ' total ' : length , ' count ' : 1 ,
' url ' : url }
else :
if length > mdevlist [ name ] [ ' worst ' ] :
mdevlist [ name ] [ ' worst ' ] = length
mdevlist [ name ] [ ' url ' ] = url
mdevlist [ name ] [ ' host ' ] = host
mdevlist [ name ] [ ' total ' ] + = length
mdevlist [ name ] [ ' count ' ] + = 1
# generate the html
th = ' \t <th> {0} </th> \n '
td = ' \t <td align=center> {0} </td> \n '
tdr = ' \t <td align=right> {0} </td> \n '
tdlink = ' \t <td align=center><a href= " {0} " >html</a></td> \n '
limit = 1
for type in sorted ( devall , reverse = True ) :
num = 0
devlist = devall [ type ]
# table header
html + = ' <div class= " stamp " > %s ( %s devices > %d ms)</div><table> \n ' % \
( title , type . upper ( ) , limit )
html + = ' <tr> \n ' + ' <th align=right>Device Name</th> ' + \
th . format ( ' Average Time ' ) + th . format ( ' Count ' ) + \
th . format ( ' Worst Time ' ) + th . format ( ' Host (worst time) ' ) + \
th . format ( ' Link (worst time) ' ) + ' </tr> \n '
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for name in sorted ( devlist , key = lambda k : ( devlist [ k ] [ ' worst ' ] , \
devlist [ k ] [ ' total ' ] , devlist [ k ] [ ' name ' ] ) , reverse = True ) :
2019-05-14 10:53:57 -07:00
data = devall [ type ] [ name ]
data [ ' average ' ] = data [ ' total ' ] / data [ ' count ' ]
if data [ ' average ' ] < limit :
continue
# row classes - alternate row color
rcls = [ ' alt ' ] if num % 2 == 1 else [ ]
html + = ' <tr class= " ' + ( ' ' . join ( rcls ) ) + ' " > \n ' if len ( rcls ) > 0 else ' <tr> \n '
html + = tdr . format ( data [ ' name ' ] ) # name
html + = td . format ( ' %.3f ms ' % data [ ' average ' ] ) # average
html + = td . format ( data [ ' count ' ] ) # count
html + = td . format ( ' %.3f ms ' % data [ ' worst ' ] ) # worst
html + = td . format ( data [ ' host ' ] ) # host
html + = tdlink . format ( data [ ' url ' ] ) # url
html + = ' </tr> \n '
num + = 1
html + = ' </table> \n '
# flush the data to file
hf = open ( htmlfile , ' w ' )
hf . write ( html + ' </body> \n </html> \n ' )
hf . close ( )
return devall
2019-05-14 10:53:58 -07:00
def createHTMLIssuesSummary ( testruns , issues , htmlfile , title , extra = ' ' ) :
multihost = len ( [ e for e in issues if len ( e [ ' urls ' ] ) > 1 ] ) > 0
2019-05-14 10:53:57 -07:00
html = summaryCSS ( ' Issues Summary - SleepGraph ' , False )
2019-05-14 10:53:58 -07:00
total = len ( testruns )
2019-05-14 10:53:57 -07:00
# generate the html
th = ' \t <th> {0} </th> \n '
td = ' \t <td align= {0} > {1} </td> \n '
tdlink = ' <a href= " {1} " > {0} </a> '
subtitle = ' %d issues ' % len ( issues ) if len ( issues ) > 0 else ' no issues '
html + = ' <div class= " stamp " > %s ( %s )</div><table> \n ' % ( title , subtitle )
2019-05-14 10:53:58 -07:00
html + = ' <tr> \n ' + th . format ( ' Issue ' ) + th . format ( ' Count ' )
if multihost :
html + = th . format ( ' Hosts ' )
html + = th . format ( ' Tests ' ) + th . format ( ' Fail Rate ' ) + \
th . format ( ' First Instance ' ) + ' </tr> \n '
2019-05-14 10:53:57 -07:00
num = 0
for e in sorted ( issues , key = lambda v : v [ ' count ' ] , reverse = True ) :
2019-05-14 10:53:58 -07:00
testtotal = 0
2019-05-14 10:53:57 -07:00
links = [ ]
for host in sorted ( e [ ' urls ' ] ) :
2019-05-14 10:53:58 -07:00
links . append ( tdlink . format ( host , e [ ' urls ' ] [ host ] [ 0 ] ) )
testtotal + = len ( e [ ' urls ' ] [ host ] )
rate = ' %d / %d ( %.2f %% ) ' % ( testtotal , total , 100 * float ( testtotal ) / float ( total ) )
2019-05-14 10:53:57 -07:00
# row classes - alternate row color
rcls = [ ' alt ' ] if num % 2 == 1 else [ ]
html + = ' <tr class= " ' + ( ' ' . join ( rcls ) ) + ' " > \n ' if len ( rcls ) > 0 else ' <tr> \n '
html + = td . format ( ' left ' , e [ ' line ' ] ) # issue
2019-05-14 10:53:58 -07:00
html + = td . format ( ' center ' , e [ ' count ' ] ) # count
if multihost :
html + = td . format ( ' center ' , len ( e [ ' urls ' ] ) ) # hosts
html + = td . format ( ' center ' , testtotal ) # test count
html + = td . format ( ' center ' , rate ) # test rate
2019-05-14 10:53:57 -07:00
html + = td . format ( ' center nowrap ' , ' <br> ' . join ( links ) ) # links
html + = ' </tr> \n '
num + = 1
# flush the data to file
hf = open ( htmlfile , ' w ' )
2019-05-14 10:53:58 -07:00
hf . write ( html + ' </table> \n ' + extra + ' </body> \n </html> \n ' )
2019-05-14 10:53:57 -07:00
hf . close ( )
return issues
2016-07-15 23:34:14 +02:00
def ordinal ( value ) :
suffix = ' th '
if value < 10 or value > 19 :
if value % 10 == 1 :
suffix = ' st '
elif value % 10 == 2 :
suffix = ' nd '
elif value % 10 == 3 :
suffix = ' rd '
return ' %d %s ' % ( value , suffix )
2014-01-16 16:18:22 -08:00
# Function: createHTML
# Description:
2014-08-08 09:11:59 -07:00
# Create the output html file from the resident test data
# Arguments:
# testruns: array of Data objects from parseKernelLog or parseTraceLog
# Output:
# True if the html file was created, false if it failed
2018-05-24 09:36:28 -07:00
def createHTML ( testruns , testfail ) :
2016-07-15 23:34:14 +02:00
if len ( testruns ) < 1 :
2018-10-08 15:56:32 -07:00
pprint ( ' ERROR: Not enough test data to build a timeline ' )
2016-07-15 23:34:14 +02:00
return
2016-12-14 10:37:07 -08:00
kerror = False
2014-08-08 09:11:59 -07:00
for data in testruns :
2016-12-14 10:37:07 -08:00
if data . kerror :
kerror = True
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if ( sysvals . suspendmode in [ ' freeze ' , ' standby ' ] ) :
data . trimFreezeTime ( testruns [ - 1 ] . tSuspended )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
else :
data . getMemTime ( )
2014-01-16 16:18:22 -08:00
# html function templates
2018-01-30 00:17:20 -08:00
html_error = ' <div id= " {1} " title= " kernel error/warning " class= " err " style= " right: {0} % " > {2} →</div> \n '
2016-12-14 10:37:06 -08:00
html_traceevent = ' <div title= " {0} " class= " traceevent {6} " style= " left: {1} % ;top: {2} px;height: {3} px;width: {4} % ;line-height: {3} px; {7} " > {5} </div> \n '
2016-12-14 10:37:05 -08:00
html_cpuexec = ' <div class= " jiffie " style= " left: {0} % ;top: {1} px;height: {2} px;width: {3} % ;background: {4} ; " ></div> \n '
2014-01-16 16:18:22 -08:00
html_timetotal = ' <table class= " time1 " > \n <tr> ' \
2016-12-14 10:37:06 -08:00
' <td class= " green " title= " {3} " > {2} Suspend Time: <b> {0} ms</b></td> ' \
' <td class= " yellow " title= " {4} " > {2} Resume Time: <b> {1} ms</b></td> ' \
2014-08-08 09:11:59 -07:00
' </tr> \n </table> \n '
html_timetotal2 = ' <table class= " time1 " > \n <tr> ' \
2016-12-14 10:37:06 -08:00
' <td class= " green " title= " {4} " > {3} Suspend Time: <b> {0} ms</b></td> ' \
' <td class= " gray " title= " time spent in low-power mode with clock running " > ' + sysvals . suspendmode + ' time: <b> {1} ms</b></td> ' \
' <td class= " yellow " title= " {5} " > {3} Resume Time: <b> {2} ms</b></td> ' \
2014-01-16 16:18:22 -08:00
' </tr> \n </table> \n '
2016-07-15 23:34:14 +02:00
html_timetotal3 = ' <table class= " time1 " > \n <tr> ' \
' <td class= " green " >Execution Time: <b> {0} ms</b></td> ' \
' <td class= " yellow " >Command: <b> {1} </b></td> ' \
' </tr> \n </table> \n '
2018-05-24 09:36:28 -07:00
html_fail = ' <table class= " testfail " ><tr><td> {0} </td></tr></table> \n '
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
html_kdesc = ' <td class= " {3} " title= " time spent in kernel execution " > {0} Kernel {2} : {1} ms</td> '
html_fwdesc = ' <td class= " {3} " title= " time spent in firmware " > {0} Firmware {2} : {1} ms</td> '
html_wifdesc = ' <td class= " yellow " title= " time for wifi to reconnect after resume complete ( {2} ) " > {0} Wifi Resume: {1} </td> '
2014-01-16 16:18:22 -08:00
2016-07-15 23:34:14 +02:00
# html format variables
2016-12-14 10:37:07 -08:00
scaleH = 20
if kerror :
scaleH = 40
2016-07-15 23:34:14 +02:00
2014-08-08 09:11:59 -07:00
# device timeline
2016-12-14 10:37:07 -08:00
devtl = Timeline ( 30 , scaleH )
2014-01-16 16:18:22 -08:00
2017-04-07 11:05:35 -07:00
# write the test title and general info header
2018-01-30 00:17:20 -08:00
devtl . createHeader ( sysvals , testruns [ 0 ] . stamp )
2017-04-07 11:05:35 -07:00
2014-08-08 09:11:59 -07:00
# Generate the header for this timeline
for data in testruns :
tTotal = data . end - data . start
2014-01-16 16:18:22 -08:00
if ( tTotal == 0 ) :
2018-01-30 00:17:20 -08:00
doError ( ' No timeline data ' )
2016-07-15 23:34:14 +02:00
if sysvals . suspendmode == ' command ' :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
run_time = ' %.0f ' % ( tTotal * 1000 )
2016-07-15 23:34:14 +02:00
if sysvals . testcommand :
testdesc = sysvals . testcommand
else :
testdesc = ' unknown '
if ( len ( testruns ) > 1 ) :
testdesc = ordinal ( data . testnumber + 1 ) + ' ' + testdesc
thtml = html_timetotal3 . format ( run_time , testdesc )
2017-04-07 11:05:35 -07:00
devtl . html + = thtml
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
continue
# typical full suspend/resume header
stot , rtot = sktime , rktime = data . getTimeValues ( )
ssrc , rsrc , testdesc , testdesc2 = [ ' kernel ' ] , [ ' kernel ' ] , ' Kernel ' , ' '
if data . fwValid :
stot + = ( data . fwSuspend / 1000000.0 )
rtot + = ( data . fwResume / 1000000.0 )
ssrc . append ( ' firmware ' )
rsrc . append ( ' firmware ' )
testdesc = ' Total '
if ' time ' in data . wifi and data . wifi [ ' stat ' ] != ' timeout ' :
rtot + = data . end - data . tKernRes + ( data . wifi [ ' time ' ] * 1000.0 )
rsrc . append ( ' wifi ' )
testdesc = ' Total '
suspend_time , resume_time = ' %.3f ' % stot , ' %.3f ' % rtot
stitle = ' time from kernel suspend start to %s mode [ %s time] ' % \
( sysvals . suspendmode , ' & ' . join ( ssrc ) )
rtitle = ' time from %s mode to kernel resume complete [ %s time] ' % \
( sysvals . suspendmode , ' & ' . join ( rsrc ) )
if ( len ( testruns ) > 1 ) :
testdesc = testdesc2 = ordinal ( data . testnumber + 1 )
testdesc2 + = ' '
if ( len ( data . tLow ) == 0 ) :
thtml = html_timetotal . format ( suspend_time , \
resume_time , testdesc , stitle , rtitle )
else :
low_time = ' + ' . join ( data . tLow )
thtml = html_timetotal2 . format ( suspend_time , low_time , \
resume_time , testdesc , stitle , rtitle )
devtl . html + = thtml
if not data . fwValid and ' dev ' not in data . wifi :
continue
# extra detail when the times come from multiple sources
thtml = ' <table class= " time2 " > \n <tr> '
thtml + = html_kdesc . format ( testdesc2 , ' %.3f ' % sktime , ' Suspend ' , ' green ' )
if data . fwValid :
2014-08-08 09:11:59 -07:00
sftime = ' %.3f ' % ( data . fwSuspend / 1000000.0 )
rftime = ' %.3f ' % ( data . fwResume / 1000000.0 )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
thtml + = html_fwdesc . format ( testdesc2 , sftime , ' Suspend ' , ' green ' )
thtml + = html_fwdesc . format ( testdesc2 , rftime , ' Resume ' , ' yellow ' )
thtml + = html_kdesc . format ( testdesc2 , ' %.3f ' % rktime , ' Resume ' , ' yellow ' )
if ' time ' in data . wifi :
if data . wifi [ ' stat ' ] != ' timeout ' :
wtime = ' %.0f ms ' % ( data . end - data . tKernRes + ( data . wifi [ ' time ' ] * 1000.0 ) )
2014-08-08 09:11:59 -07:00
else :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
wtime = ' TIMEOUT '
thtml + = html_wifdesc . format ( testdesc2 , wtime , data . wifi [ ' dev ' ] )
thtml + = ' </tr> \n </table> \n '
devtl . html + = thtml
2018-05-24 09:36:28 -07:00
if testfail :
devtl . html + = html_fail . format ( testfail )
2014-08-08 09:11:59 -07:00
# time scale for potentially multiple datasets
t0 = testruns [ 0 ] . start
tMax = testruns [ - 1 ] . end
tTotal = tMax - t0
2014-01-16 16:18:22 -08:00
2014-08-08 09:11:59 -07:00
# determine the maximum number of rows we need to draw
2016-12-14 10:37:05 -08:00
fulllist = [ ]
2016-12-14 10:37:06 -08:00
threadlist = [ ]
pscnt = 0
devcnt = 0
2014-08-08 09:11:59 -07:00
for data in testruns :
2016-07-15 23:34:14 +02:00
data . selectTimelineDevices ( ' %f ' , tTotal , sysvals . mindevlen )
for group in data . devicegroups :
devlist = [ ]
for phase in group :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for devname in sorted ( data . tdevlist [ phase ] ) :
2016-12-14 10:37:05 -08:00
d = DevItem ( data . testnumber , phase , data . dmesg [ phase ] [ ' list ' ] [ devname ] )
devlist . append ( d )
2016-12-14 10:37:06 -08:00
if d . isa ( ' kth ' ) :
threadlist . append ( d )
else :
if d . isa ( ' ps ' ) :
pscnt + = 1
else :
devcnt + = 1
fulllist . append ( d )
2016-12-14 10:37:05 -08:00
if sysvals . mixedphaseheight :
devtl . getPhaseRows ( devlist )
if not sysvals . mixedphaseheight :
2016-12-14 10:37:06 -08:00
if len ( threadlist ) > 0 and len ( fulllist ) > 0 :
if pscnt > 0 and devcnt > 0 :
msg = ' user processes & device pm callbacks '
elif pscnt > 0 :
msg = ' user processes '
else :
msg = ' device pm callbacks '
d = testruns [ 0 ] . addHorizontalDivider ( msg , testruns [ - 1 ] . end )
fulllist . insert ( 0 , d )
2016-12-14 10:37:05 -08:00
devtl . getPhaseRows ( fulllist )
2016-12-14 10:37:06 -08:00
if len ( threadlist ) > 0 :
d = testruns [ 0 ] . addHorizontalDivider ( ' asynchronous kernel threads ' , testruns [ - 1 ] . end )
threadlist . insert ( 0 , d )
devtl . getPhaseRows ( threadlist , devtl . rows )
2016-07-15 23:34:14 +02:00
devtl . calcTotalRows ( )
# draw the full timeline
2017-04-07 11:05:35 -07:00
devtl . createZoomBox ( sysvals . suspendmode , len ( testruns ) )
2014-08-08 09:11:59 -07:00
for data in testruns :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
# draw each test run and block chronologically
phases = { ' suspend ' : [ ] , ' resume ' : [ ] }
for phase in data . sortedPhases ( ) :
if data . dmesg [ phase ] [ ' start ' ] > = data . tSuspended :
phases [ ' resume ' ] . append ( phase )
else :
phases [ ' suspend ' ] . append ( phase )
2016-07-15 23:34:14 +02:00
# now draw the actual timeline blocks
for dir in phases :
# draw suspend and resume blocks separately
bname = ' %s %d ' % ( dir [ 0 ] , data . testnumber )
if dir == ' suspend ' :
2017-04-07 11:05:35 -07:00
m0 = data . start
mMax = data . tSuspended
2016-07-15 23:34:14 +02:00
left = ' %f ' % ( ( ( m0 - t0 ) * 100.0 ) / tTotal )
else :
2017-04-07 11:05:35 -07:00
m0 = data . tSuspended
mMax = data . end
2016-12-14 10:37:05 -08:00
# in an x2 run, remove any gap between blocks
if len ( testruns ) > 1 and data . testnumber == 0 :
mMax = testruns [ 1 ] . start
2016-07-15 23:34:14 +02:00
left = ' %f ' % ( ( ( ( m0 - t0 ) * 100.0 ) + sysvals . srgap / 2 ) / tTotal )
2017-04-07 11:05:35 -07:00
mTotal = mMax - m0
2016-07-15 23:34:14 +02:00
# if a timeline block is 0 length, skip altogether
if mTotal == 0 :
continue
width = ' %f ' % ( ( ( mTotal * 100.0 ) - sysvals . srgap / 2 ) / tTotal )
2017-04-07 11:05:35 -07:00
devtl . html + = devtl . html_tblock . format ( bname , left , width , devtl . scaleH )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for b in phases [ dir ] :
2016-07-15 23:34:14 +02:00
# draw the phase color background
phase = data . dmesg [ b ]
length = phase [ ' end ' ] - phase [ ' start ' ]
left = ' %f ' % ( ( ( phase [ ' start ' ] - m0 ) * 100.0 ) / mTotal )
width = ' %f ' % ( ( length * 100.0 ) / mTotal )
2017-04-07 11:05:35 -07:00
devtl . html + = devtl . html_phase . format ( left , width , \
2016-07-15 23:34:14 +02:00
' %.3f ' % devtl . scaleH , ' %.3f ' % devtl . bodyH , \
data . dmesg [ b ] [ ' color ' ] , ' ' )
2016-12-14 10:37:07 -08:00
for e in data . errorinfo [ dir ] :
# draw red lines for any kernel errors found
2018-01-30 00:17:20 -08:00
type , t , idx1 , idx2 = e
id = ' %d _ %d ' % ( idx1 , idx2 )
2016-12-14 10:37:07 -08:00
right = ' %f ' % ( ( ( mMax - t ) * 100.0 ) / mTotal )
2018-01-30 00:17:20 -08:00
devtl . html + = html_error . format ( right , id , type )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for b in phases [ dir ] :
2016-07-15 23:34:14 +02:00
# draw the devices for this phase
phaselist = data . dmesg [ b ] [ ' list ' ]
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
for d in sorted ( data . tdevlist [ b ] ) :
2020-11-10 18:36:17 -08:00
dname = d if ( ' [ ' not in d or ' CPU ' in d ) else d . split ( ' [ ' ) [ 0 ]
2020-07-20 18:02:49 -07:00
name , dev = dname , phaselist [ d ]
drv = xtraclass = xtrainfo = xtrastyle = ' '
2016-07-15 23:34:14 +02:00
if ' htmlclass ' in dev :
xtraclass = dev [ ' htmlclass ' ]
if ' color ' in dev :
2017-04-07 11:05:35 -07:00
xtrastyle = ' background: %s ; ' % dev [ ' color ' ]
2016-07-15 23:34:14 +02:00
if ( d in sysvals . devprops ) :
name = sysvals . devprops [ d ] . altName ( d )
xtraclass = sysvals . devprops [ d ] . xtraClass ( )
xtrainfo = sysvals . devprops [ d ] . xtraInfo ( )
2016-12-14 10:37:05 -08:00
elif xtraclass == ' kth ' :
xtrainfo = ' kernel_thread '
2016-07-15 23:34:14 +02:00
if ( ' drv ' in dev and dev [ ' drv ' ] ) :
drv = ' { %s } ' % dev [ ' drv ' ]
2016-12-14 10:37:05 -08:00
rowheight = devtl . phaseRowHeight ( data . testnumber , b , dev [ ' row ' ] )
rowtop = devtl . phaseRowTop ( data . testnumber , b , dev [ ' row ' ] )
2016-07-15 23:34:14 +02:00
top = ' %.3f ' % ( rowtop + devtl . scaleH )
left = ' %f ' % ( ( ( dev [ ' start ' ] - m0 ) * 100 ) / mTotal )
width = ' %f ' % ( ( ( dev [ ' end ' ] - dev [ ' start ' ] ) * 100 ) / mTotal )
length = ' ( %0.3f ms) ' % ( ( dev [ ' end ' ] - dev [ ' start ' ] ) * 1000 )
2016-12-14 10:37:05 -08:00
title = name + drv + xtrainfo + length
2016-07-15 23:34:14 +02:00
if sysvals . suspendmode == ' command ' :
2016-12-14 10:37:06 -08:00
title + = sysvals . testcommand
2016-12-14 10:37:05 -08:00
elif xtraclass == ' ps ' :
if ' suspend ' in b :
title + = ' pre_suspend_process '
else :
title + = ' post_resume_process '
2016-07-15 23:34:14 +02:00
else :
2016-12-14 10:37:05 -08:00
title + = b
2017-04-07 11:05:35 -07:00
devtl . html + = devtl . html_device . format ( dev [ ' id ' ] , \
2016-07-15 23:34:14 +02:00
title , left , top , ' %.3f ' % rowheight , width , \
2020-07-20 18:02:49 -07:00
dname + drv , xtraclass , xtrastyle )
2016-12-14 10:37:05 -08:00
if ( ' cpuexec ' in dev ) :
for t in sorted ( dev [ ' cpuexec ' ] ) :
start , end = t
j = float ( dev [ ' cpuexec ' ] [ t ] ) / 5
if j > 1.0 :
j = 1.0
height = ' %.3f ' % ( rowheight / 3 )
top = ' %.3f ' % ( rowtop + devtl . scaleH + 2 * rowheight / 3 )
left = ' %f ' % ( ( ( start - m0 ) * 100 ) / mTotal )
width = ' %f ' % ( ( end - start ) * 100 / mTotal )
color = ' rgba(255, 0, 0, %f ) ' % j
2017-04-07 11:05:35 -07:00
devtl . html + = \
2016-12-14 10:37:05 -08:00
html_cpuexec . format ( left , top , height , width , color )
2016-07-15 23:34:14 +02:00
if ( ' src ' not in dev ) :
continue
# draw any trace events for this device
for e in dev [ ' src ' ] :
2020-07-20 18:02:49 -07:00
if e . length == 0 :
continue
2016-12-14 10:37:05 -08:00
height = ' %.3f ' % devtl . rowH
2016-07-15 23:34:14 +02:00
top = ' %.3f ' % ( rowtop + devtl . scaleH + ( e . row * devtl . rowH ) )
left = ' %f ' % ( ( ( e . time - m0 ) * 100 ) / mTotal )
width = ' %f ' % ( e . length * 100 / mTotal )
2016-12-14 10:37:06 -08:00
xtrastyle = ' '
if e . color :
xtrastyle = ' background: %s ; ' % e . color
2017-04-07 11:05:35 -07:00
devtl . html + = \
2016-12-14 10:37:05 -08:00
html_traceevent . format ( e . title ( ) , \
2016-12-14 10:37:06 -08:00
left , top , height , width , e . text ( ) , ' ' , xtrastyle )
2016-07-15 23:34:14 +02:00
# draw the time scale, try to make the number of labels readable
2017-04-07 11:05:35 -07:00
devtl . createTimeScale ( m0 , mMax , tTotal , dir )
devtl . html + = ' </div> \n '
2014-08-08 09:11:59 -07:00
# timeline is finished
2017-04-07 11:05:35 -07:00
devtl . html + = ' </div> \n </div> \n '
2014-08-08 09:11:59 -07:00
# draw a legend which describes the phases by color
2016-07-15 23:34:14 +02:00
if sysvals . suspendmode != ' command ' :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
phasedef = testruns [ - 1 ] . phasedef
2017-04-07 11:05:35 -07:00
devtl . html + = ' <div class= " legend " > \n '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
pdelta = 100.0 / len ( phasedef . keys ( ) )
2016-07-15 23:34:14 +02:00
pmargin = pdelta / 4.0
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for phase in sorted ( phasedef , key = lambda k : phasedef [ k ] [ ' order ' ] ) :
id , p = ' ' , phasedef [ phase ]
for word in phase . split ( ' _ ' ) :
id + = word [ 0 ]
order = ' %.2f ' % ( ( p [ ' order ' ] * pdelta ) + pmargin )
2019-05-14 10:53:58 -07:00
name = phase . replace ( ' _ ' , ' ' )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
devtl . html + = devtl . html_legend . format ( order , p [ ' color ' ] , name , id )
2017-04-07 11:05:35 -07:00
devtl . html + = ' </div> \n '
2014-01-16 16:18:22 -08:00
hf = open ( sysvals . htmlfile , ' w ' )
2018-01-30 00:17:20 -08:00
addCSS ( hf , sysvals , len ( testruns ) , kerror )
2014-08-08 09:11:59 -07:00
# write the device timeline
2017-04-07 11:05:35 -07:00
hf . write ( devtl . html )
2014-08-08 09:11:59 -07:00
hf . write ( ' <div id= " devicedetailtitle " ></div> \n ' )
hf . write ( ' <div id= " devicedetail " style= " display:none; " > \n ' )
# draw the colored boxes for the device detail section
for data in testruns :
hf . write ( ' <div id= " devicedetail %d " > \n ' % data . testnumber )
2016-12-14 10:37:05 -08:00
pscolor = ' linear-gradient(to top left, #ccc, #eee) '
2017-04-07 11:05:35 -07:00
hf . write ( devtl . html_phaselet . format ( ' pre_suspend_process ' , \
2016-12-14 10:37:05 -08:00
' 0 ' , ' 0 ' , pscolor ) )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
for b in data . sortedPhases ( ) :
2014-08-08 09:11:59 -07:00
phase = data . dmesg [ b ]
length = phase [ ' end ' ] - phase [ ' start ' ]
left = ' %.3f ' % ( ( ( phase [ ' start ' ] - t0 ) * 100.0 ) / tTotal )
width = ' %.3f ' % ( ( length * 100.0 ) / tTotal )
2017-04-07 11:05:35 -07:00
hf . write ( devtl . html_phaselet . format ( b , left , width , \
2014-08-08 09:11:59 -07:00
data . dmesg [ b ] [ ' color ' ] ) )
2017-04-07 11:05:35 -07:00
hf . write ( devtl . html_phaselet . format ( ' post_resume_process ' , \
2016-12-14 10:37:05 -08:00
' 0 ' , ' 0 ' , pscolor ) )
2016-07-15 23:34:14 +02:00
if sysvals . suspendmode == ' command ' :
2017-04-07 11:05:35 -07:00
hf . write ( devtl . html_phaselet . format ( ' cmdexec ' , ' 0 ' , ' 0 ' , pscolor ) )
2014-08-08 09:11:59 -07:00
hf . write ( ' </div> \n ' )
hf . write ( ' </div> \n ' )
2014-01-16 16:18:22 -08:00
# write the ftrace data (callgraph)
2016-12-14 10:37:07 -08:00
if sysvals . cgtest > = 0 and len ( testruns ) > sysvals . cgtest :
data = testruns [ sysvals . cgtest ]
else :
data = testruns [ - 1 ]
2018-01-30 00:17:20 -08:00
if sysvals . usecallgraph :
2017-04-07 11:05:35 -07:00
addCallgraphs ( sysvals , hf , data )
2016-07-15 23:34:14 +02:00
2016-12-14 10:37:07 -08:00
# add the test log as a hidden div
2017-07-05 14:42:55 -07:00
if sysvals . testlog and sysvals . logmsg :
2016-12-14 10:37:07 -08:00
hf . write ( ' <div id= " testlog " style= " display:none; " > \n ' + sysvals . logmsg + ' </div> \n ' )
2016-07-15 23:34:14 +02:00
# add the dmesg log as a hidden div
2017-07-05 14:42:55 -07:00
if sysvals . dmesglog and sysvals . dmesgfile :
2016-07-15 23:34:14 +02:00
hf . write ( ' <div id= " dmesglog " style= " display:none; " > \n ' )
2018-01-30 00:17:20 -08:00
lf = sysvals . openlog ( sysvals . dmesgfile , ' r ' )
2016-07-15 23:34:14 +02:00
for line in lf :
2016-12-14 10:37:07 -08:00
line = line . replace ( ' < ' , ' < ' ) . replace ( ' > ' , ' > ' )
2016-07-15 23:34:14 +02:00
hf . write ( line )
lf . close ( )
hf . write ( ' </div> \n ' )
# add the ftrace log as a hidden div
2017-07-05 14:42:55 -07:00
if sysvals . ftracelog and sysvals . ftracefile :
2016-07-15 23:34:14 +02:00
hf . write ( ' <div id= " ftracelog " style= " display:none; " > \n ' )
2018-01-30 00:17:20 -08:00
lf = sysvals . openlog ( sysvals . ftracefile , ' r ' )
2016-07-15 23:34:14 +02:00
for line in lf :
hf . write ( line )
lf . close ( )
hf . write ( ' </div> \n ' )
2018-01-30 00:17:20 -08:00
# write the footer and close
addScriptCode ( hf , testruns )
hf . write ( ' </body> \n </html> \n ' )
2014-01-16 16:18:22 -08:00
hf . close ( )
return True
2017-04-07 11:05:35 -07:00
def addCSS ( hf , sv , testcount = 1 , kerror = False , extra = ' ' ) :
kernel = sv . stamp [ ' kernel ' ]
host = sv . hostname [ 0 ] . upper ( ) + sv . hostname [ 1 : ]
mode = sv . suspendmode
if sv . suspendmode in suspendmodename :
mode = suspendmodename [ sv . suspendmode ]
title = host + ' ' + mode + ' ' + kernel
# various format changes by flags
cgchk = ' checked '
cgnchk = ' not(:checked) '
if sv . cgexp :
cgchk = ' not(:checked) '
cgnchk = ' checked '
hoverZ = ' z-index:8; '
if sv . usedevsrc :
hoverZ = ' '
devlistpos = ' absolute '
if testcount > 1 :
devlistpos = ' relative '
scaleTH = 20
if kerror :
scaleTH = 60
# write the html header first (html head, css code, up to body start)
html_header = ' <!DOCTYPE html> \n <html> \n <head> \n \
< meta http - equiv = " content-type " content = " text/html; charset=UTF-8 " > \n \
< title > ' +title+ ' < / title > \n \
< style type = \' text/css \' > \n \
body { overflow - y : scroll ; } \n \
. stamp { width : 100 % ; text - align : center ; background : gray ; line - height : 30 px ; color : white ; font : 25 px Arial ; } \n \
2017-07-05 14:42:55 -07:00
. stamp . sysinfo { font : 10 px Arial ; } \n \
2017-04-07 11:05:35 -07:00
. callgraph { margin - top : 30 px ; box - shadow : 5 px 5 px 20 px black ; } \n \
. callgraph article * { padding - left : 28 px ; } \n \
h1 { color : black ; font : bold 30 px Times ; } \n \
t0 { color : black ; font : bold 30 px Times ; } \n \
t1 { color : black ; font : 30 px Times ; } \n \
t2 { color : black ; font : 25 px Times ; } \n \
t3 { color : black ; font : 20 px Times ; white - space : nowrap ; } \n \
t4 { color : black ; font : bold 30 px Times ; line - height : 60 px ; white - space : nowrap ; } \n \
cS { font : bold 13 px Times ; } \n \
table { width : 100 % ; } \n \
. gray { background : rgba ( 80 , 80 , 80 , 0.1 ) ; } \n \
. green { background : rgba ( 204 , 255 , 204 , 0.4 ) ; } \n \
. purple { background : rgba ( 128 , 0 , 128 , 0.2 ) ; } \n \
. yellow { background : rgba ( 255 , 255 , 204 , 0.4 ) ; } \n \
. blue { background : rgba ( 169 , 208 , 245 , 0.4 ) ; } \n \
. time1 { font : 22 px Arial ; border : 1 px solid ; } \n \
. time2 { font : 15 px Arial ; border - bottom : 1 px solid ; border - left : 1 px solid ; border - right : 1 px solid ; } \n \
2018-05-24 09:36:28 -07:00
. testfail { font : bold 22 px Arial ; color : red ; border : 1 px dashed ; } \n \
2017-04-07 11:05:35 -07:00
td { text - align : center ; } \n \
r { color : #500000;font:15px Tahoma;}\n\
n { color : #505050;font:15px Tahoma;}\n\
. tdhl { color : red ; } \n \
. hide { display : none ; } \n \
. pf { display : none ; } \n \
. pf : ' +cgchk+ ' + label { background : url ( \' data:image/svg+xml;utf,<?xml version= " 1.0 " standalone= " no " ?><svg xmlns= " http://www.w3.org/2000/svg " height= " 18 " width= " 18 " version= " 1.1 " ><circle cx= " 9 " cy= " 9 " r= " 8 " stroke= " black " stroke-width= " 1 " fill= " white " /><rect x= " 4 " y= " 8 " width= " 10 " height= " 2 " style= " fill:black;stroke-width:0 " /><rect x= " 8 " y= " 4 " width= " 2 " height= " 10 " style= " fill:black;stroke-width:0 " /></svg> \' ) no-repeat left center;} \n \
. pf : ' +cgnchk+ ' ~ label { background : url ( \' data:image/svg+xml;utf,<?xml version= " 1.0 " standalone= " no " ?><svg xmlns= " http://www.w3.org/2000/svg " height= " 18 " width= " 18 " version= " 1.1 " ><circle cx= " 9 " cy= " 9 " r= " 8 " stroke= " black " stroke-width= " 1 " fill= " white " /><rect x= " 4 " y= " 8 " width= " 10 " height= " 2 " style= " fill:black;stroke-width:0 " /></svg> \' ) no-repeat left center;} \n \
. pf : ' +cgchk+ ' ~ * : not ( : nth - child ( 2 ) ) { display : none ; } \n \
. zoombox { position : relative ; width : 100 % ; overflow - x : scroll ; - webkit - user - select : none ; - moz - user - select : none ; user - select : none ; } \n \
. timeline { position : relative ; font - size : 14 px ; cursor : pointer ; width : 100 % ; overflow : hidden ; background : linear - gradient ( #cccccc, white);}\n\
. thread { position : absolute ; height : 0 % ; overflow : hidden ; z - index : 7 ; line - height : 30 px ; font - size : 14 px ; border : 1 px solid ; text - align : center ; white - space : nowrap ; } \n \
. thread . ps { border - radius : 3 px ; background : linear - gradient ( to top , #ccc, #eee);}\n\
. thread : hover { background : white ; border : 1 px solid red ; ' +hoverZ+ ' } \n \
. thread . sec , . thread . sec : hover { background : black ; border : 0 ; color : white ; line - height : 15 px ; font - size : 10 px ; } \n \
. hover { background : white ; border : 1 px solid red ; ' +hoverZ+ ' } \n \
. hover . sync { background : white ; } \n \
. hover . bg , . hover . kth , . hover . sync , . hover . ps { background : white ; } \n \
. jiffie { position : absolute ; pointer - events : none ; z - index : 8 ; } \n \
. traceevent { position : absolute ; font - size : 10 px ; z - index : 7 ; overflow : hidden ; color : black ; text - align : center ; white - space : nowrap ; border - radius : 5 px ; border : 1 px solid black ; background : linear - gradient ( to bottom right , #CCC,#969696);}\n\
. traceevent : hover { color : white ; font - weight : bold ; border : 1 px solid white ; } \n \
. phase { position : absolute ; overflow : hidden ; border : 0 px ; text - align : center ; } \n \
. phaselet { float : left ; overflow : hidden ; border : 0 px ; text - align : center ; min - height : 100 px ; font - size : 24 px ; } \n \
. t { position : absolute ; line - height : ' +( ' % d ' %s caleTH)+ ' px ; pointer - events : none ; top : 0 ; height : 100 % ; border - right : 1 px solid black ; z - index : 6 ; } \n \
. err { position : absolute ; top : 0 % ; height : 100 % ; border - right : 3 px solid red ; color : red ; font : bold 14 px Times ; line - height : 18 px ; } \n \
. legend { position : relative ; width : 100 % ; height : 40 px ; text - align : center ; margin - bottom : 20 px } \n \
. legend . square { position : absolute ; cursor : pointer ; top : 10 px ; width : 0 px ; height : 20 px ; border : 1 px solid ; padding - left : 20 px ; } \n \
button { height : 40 px ; width : 200 px ; margin - bottom : 20 px ; margin - top : 20 px ; font - size : 24 px ; } \n \
2017-07-05 14:42:55 -07:00
. btnfmt { position : relative ; float : right ; height : 25 px ; width : auto ; margin - top : 3 px ; margin - bottom : 0 ; font - size : 10 px ; text - align : center ; } \n \
2017-04-07 11:05:35 -07:00
. devlist { position : ' +devlistpos+ ' ; width : 190 px ; } \n \
a : link { color : white ; text - decoration : none ; } \n \
a : visited { color : white ; } \n \
a : hover { color : white ; } \n \
a : active { color : white ; } \n \
. version { position : relative ; float : left ; color : white ; font - size : 10 px ; line - height : 30 px ; margin - left : 10 px ; } \n \
#devicedetail {min-height:100px;box-shadow:5px 5px 20px black;}\n\
. tblock { position : absolute ; height : 100 % ; background : #ddd;}\n\
. tback { position : absolute ; width : 100 % ; background : linear - gradient ( #ccc, #ddd);}\n\
. bg { z - index : 1 ; } \n \
' +extra+ ' \
< / style > \n < / head > \n < body > \n '
hf . write ( html_header )
2014-08-08 09:11:59 -07:00
# Function: addScriptCode
# Description:
# Adds the javascript code to the output html
# Arguments:
# hf: the open html file pointer
# testruns: array of Data objects from parseKernelLog or parseTraceLog
def addScriptCode ( hf , testruns ) :
2016-07-15 23:34:14 +02:00
t0 = testruns [ 0 ] . start * 1000
tMax = testruns [ - 1 ] . end * 1000
2014-01-16 16:18:22 -08:00
# create an array in javascript memory with the device details
2014-08-08 09:11:59 -07:00
detail = ' var devtable = []; \n '
for data in testruns :
topo = data . deviceTopology ( )
detail + = ' devtable[ %d ] = " %s " ; \n ' % ( data . testnumber , topo )
detail + = ' var bounds = [ %f , %f ]; \n ' % ( t0 , tMax )
2014-01-16 16:18:22 -08:00
# add the code which will manipulate the data in the browser
script_code = \
' <script type= " text/javascript " > \n ' + detail + \
2016-07-15 23:34:14 +02:00
' var resolution = -1; \n ' \
2016-12-14 10:37:05 -08:00
' var dragval = [0, 0]; \n ' \
2016-07-15 23:34:14 +02:00
' function redrawTimescale(t0, tMax, tS) { \n ' \
2017-04-07 11:05:35 -07:00
' var rline = \' <div class= " t " style= " left:0;border-left:1px solid black;border-right:0; " > \' ; \n ' \
2016-07-15 23:34:14 +02:00
' var tTotal = tMax - t0; \n ' \
' var list = document.getElementsByClassName( " tblock " ); \n ' \
' for (var i = 0; i < list.length; i++) { \n ' \
' var timescale = list[i].getElementsByClassName( " timescale " )[0]; \n ' \
' var m0 = t0 + (tTotal*parseFloat(list[i].style.left)/100); \n ' \
' var mTotal = tTotal*parseFloat(list[i].style.width)/100; \n ' \
' var mMax = m0 + mTotal; \n ' \
' var html = " " ; \n ' \
' var divTotal = Math.floor(mTotal/tS) + 1; \n ' \
' if(divTotal > 1000) continue; \n ' \
' var divEdge = (mTotal - tS*(divTotal-1))*100/mTotal; \n ' \
' var pos = 0.0, val = 0.0; \n ' \
' for (var j = 0; j < divTotal; j++) { \n ' \
' var htmlline = " " ; \n ' \
2017-04-07 11:05:35 -07:00
' var mode = list[i].id[5]; \n ' \
' if(mode == " s " ) { \n ' \
2016-07-15 23:34:14 +02:00
' pos = 100 - (((j)*tS*100)/mTotal) - divEdge; \n ' \
' val = (j-divTotal+1)*tS; \n ' \
' if(j == divTotal - 1) \n ' \
2016-12-14 10:37:07 -08:00
' htmlline = \' <div class= " t " style= " right: \' +pos+ \' % " ><cS>S→</cS></div> \' ; \n ' \
2016-07-15 23:34:14 +02:00
' else \n ' \
' htmlline = \' <div class= " t " style= " right: \' +pos+ \' % " > \' +val+ \' ms</div> \' ; \n ' \
2017-04-07 11:05:35 -07:00
' } else { \n ' \
' pos = 100 - (((j)*tS*100)/mTotal); \n ' \
' val = (j)*tS; \n ' \
' htmlline = \' <div class= " t " style= " right: \' +pos+ \' % " > \' +val+ \' ms</div> \' ; \n ' \
' if(j == 0) \n ' \
' if(mode == " r " ) \n ' \
' htmlline = rline+ " <cS>←R</cS></div> " ; \n ' \
' else \n ' \
' htmlline = rline+ " <cS>0ms</div> " ; \n ' \
2016-07-15 23:34:14 +02:00
' } \n ' \
' html += htmlline; \n ' \
' } \n ' \
' timescale.innerHTML = html; \n ' \
' } \n ' \
' } \n ' \
2014-01-16 16:18:22 -08:00
' function zoomTimeline() { \n ' \
' var dmesg = document.getElementById( " dmesg " ); \n ' \
' var zoombox = document.getElementById( " dmesgzoombox " ); \n ' \
2017-02-09 13:27:43 -08:00
' var left = zoombox.scrollLeft; \n ' \
2014-01-16 16:18:22 -08:00
' var val = parseFloat(dmesg.style.width); \n ' \
' var newval = 100; \n ' \
' var sh = window.outerWidth / 2; \n ' \
' if(this.id == " zoomin " ) { \n ' \
' newval = val * 1.2; \n ' \
2016-07-15 23:34:14 +02:00
' if(newval > 910034) newval = 910034; \n ' \
2014-01-16 16:18:22 -08:00
' dmesg.style.width = newval+ " % " ; \n ' \
2017-02-09 13:27:43 -08:00
' zoombox.scrollLeft = ((left + sh) * newval / val) - sh; \n ' \
2014-01-16 16:18:22 -08:00
' } else if (this.id == " zoomout " ) { \n ' \
' newval = val / 1.2; \n ' \
' if(newval < 100) newval = 100; \n ' \
' dmesg.style.width = newval+ " % " ; \n ' \
2017-02-09 13:27:43 -08:00
' zoombox.scrollLeft = ((left + sh) * newval / val) - sh; \n ' \
2014-01-16 16:18:22 -08:00
' } else { \n ' \
' zoombox.scrollLeft = 0; \n ' \
' dmesg.style.width = " 100 % " ; \n ' \
' } \n ' \
2016-07-15 23:34:14 +02:00
' var tS = [10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1]; \n ' \
2014-01-16 16:18:22 -08:00
' var t0 = bounds[0]; \n ' \
' var tMax = bounds[1]; \n ' \
' var tTotal = tMax - t0; \n ' \
' var wTotal = tTotal * 100.0 / newval; \n ' \
2016-07-15 23:34:14 +02:00
' var idx = 7*window.innerWidth/1100; \n ' \
' for(var i = 0; (i < tS.length)&&((wTotal / tS[i]) < idx); i++); \n ' \
' if(i >= tS.length) i = tS.length - 1; \n ' \
' if(tS[i] == resolution) return; \n ' \
' resolution = tS[i]; \n ' \
' redrawTimescale(t0, tMax, tS[i]); \n ' \
2014-01-16 16:18:22 -08:00
' } \n ' \
2016-12-14 10:37:05 -08:00
' function deviceName(title) { \n ' \
' var name = title.slice(0, title.indexOf( " ( " )); \n ' \
' return name; \n ' \
' } \n ' \
2014-08-08 09:11:59 -07:00
' function deviceHover() { \n ' \
2016-12-14 10:37:05 -08:00
' var name = deviceName(this.title); \n ' \
2014-08-08 09:11:59 -07:00
' var dmesg = document.getElementById( " dmesg " ); \n ' \
' var dev = dmesg.getElementsByClassName( " thread " ); \n ' \
' var cpu = -1; \n ' \
' if(name.match( " CPU_ON \ [[0-9]* \ ] " )) \n ' \
' cpu = parseInt(name.slice(7)); \n ' \
' else if(name.match( " CPU_OFF \ [[0-9]* \ ] " )) \n ' \
' cpu = parseInt(name.slice(8)); \n ' \
' for (var i = 0; i < dev.length; i++) { \n ' \
2016-12-14 10:37:05 -08:00
' dname = deviceName(dev[i].title); \n ' \
2016-07-15 23:34:14 +02:00
' var cname = dev[i].className.slice(dev[i].className.indexOf( " thread " )); \n ' \
2014-08-08 09:11:59 -07:00
' if((cpu >= 0 && dname.match( " CPU_O[NF]* \\ \ [* " +cpu+ " \\ \ ] " )) || \n ' \
' (name == dname)) \n ' \
' { \n ' \
2016-07-15 23:34:14 +02:00
' dev[i].className = " hover " +cname; \n ' \
2014-08-08 09:11:59 -07:00
' } else { \n ' \
2016-07-15 23:34:14 +02:00
' dev[i].className = cname; \n ' \
2014-08-08 09:11:59 -07:00
' } \n ' \
' } \n ' \
' } \n ' \
' function deviceUnhover() { \n ' \
' var dmesg = document.getElementById( " dmesg " ); \n ' \
' var dev = dmesg.getElementsByClassName( " thread " ); \n ' \
' for (var i = 0; i < dev.length; i++) { \n ' \
2016-07-15 23:34:14 +02:00
' dev[i].className = dev[i].className.slice(dev[i].className.indexOf( " thread " )); \n ' \
2014-08-08 09:11:59 -07:00
' } \n ' \
' } \n ' \
' function deviceTitle(title, total, cpu) { \n ' \
' var prefix = " Total " ; \n ' \
' if(total.length > 3) { \n ' \
' prefix = " Average " ; \n ' \
' total[1] = (total[1]+total[3])/2; \n ' \
' total[2] = (total[2]+total[4])/2; \n ' \
' } \n ' \
' var devtitle = document.getElementById( " devicedetailtitle " ); \n ' \
2016-12-14 10:37:05 -08:00
' var name = deviceName(title); \n ' \
2014-08-08 09:11:59 -07:00
' if(cpu >= 0) name = " CPU " +cpu; \n ' \
' var driver = " " ; \n ' \
' var tS = " <t2>(</t2> " ; \n ' \
' var tR = " <t2>)</t2> " ; \n ' \
' if(total[1] > 0) \n ' \
' tS = " <t2>( " +prefix+ " Suspend:</t2><t0> " +total[1].toFixed(3)+ " ms</t0> " ; \n ' \
' if(total[2] > 0) \n ' \
' tR = " <t2> " +prefix+ " Resume:</t2><t0> " +total[2].toFixed(3)+ " ms<t2>)</t2></t0> " ; \n ' \
' var s = title.indexOf( " { " ); \n ' \
' var e = title.indexOf( " } " ); \n ' \
' if((s >= 0) && (e >= 0)) \n ' \
' driver = title.slice(s+1, e) + " <t1>@</t1> " ; \n ' \
' if(total[1] > 0 && total[2] > 0) \n ' \
' devtitle.innerHTML = " <t0> " +driver+name+ " </t0> " +tS+tR; \n ' \
' else \n ' \
' devtitle.innerHTML = " <t0> " +title+ " </t0> " ; \n ' \
' return name; \n ' \
' } \n ' \
2014-01-16 16:18:22 -08:00
' function deviceDetail() { \n ' \
2014-08-08 09:11:59 -07:00
' var devinfo = document.getElementById( " devicedetail " ); \n ' \
' devinfo.style.display = " block " ; \n ' \
2016-12-14 10:37:05 -08:00
' var name = deviceName(this.title); \n ' \
2014-08-08 09:11:59 -07:00
' var cpu = -1; \n ' \
' if(name.match( " CPU_ON \ [[0-9]* \ ] " )) \n ' \
' cpu = parseInt(name.slice(7)); \n ' \
' else if(name.match( " CPU_OFF \ [[0-9]* \ ] " )) \n ' \
' cpu = parseInt(name.slice(8)); \n ' \
' var dmesg = document.getElementById( " dmesg " ); \n ' \
' var dev = dmesg.getElementsByClassName( " thread " ); \n ' \
' var idlist = []; \n ' \
' var pdata = [[]]; \n ' \
2016-07-15 23:34:14 +02:00
' if(document.getElementById( " devicedetail1 " )) \n ' \
' pdata = [[], []]; \n ' \
2014-08-08 09:11:59 -07:00
' var pd = pdata[0]; \n ' \
' var total = [0.0, 0.0, 0.0]; \n ' \
' for (var i = 0; i < dev.length; i++) { \n ' \
2016-12-14 10:37:05 -08:00
' dname = deviceName(dev[i].title); \n ' \
2014-08-08 09:11:59 -07:00
' if((cpu >= 0 && dname.match( " CPU_O[NF]* \\ \ [* " +cpu+ " \\ \ ] " )) || \n ' \
' (name == dname)) \n ' \
' { \n ' \
' idlist[idlist.length] = dev[i].id; \n ' \
' var tidx = 1; \n ' \
' if(dev[i].id[0] == " a " ) { \n ' \
' pd = pdata[0]; \n ' \
' } else { \n ' \
' if(pdata.length == 1) pdata[1] = []; \n ' \
' if(total.length == 3) total[3]=total[4]=0.0; \n ' \
' pd = pdata[1]; \n ' \
' tidx = 3; \n ' \
' } \n ' \
' var info = dev[i].title.split( " " ); \n ' \
' var pname = info[info.length-1]; \n ' \
' pd[pname] = parseFloat(info[info.length-3].slice(1)); \n ' \
' total[0] += pd[pname]; \n ' \
' if(pname.indexOf( " suspend " ) >= 0) \n ' \
' total[tidx] += pd[pname]; \n ' \
' else \n ' \
' total[tidx+1] += pd[pname]; \n ' \
' } \n ' \
' } \n ' \
' var devname = deviceTitle(this.title, total, cpu); \n ' \
' var left = 0.0; \n ' \
' for (var t = 0; t < pdata.length; t++) { \n ' \
' pd = pdata[t]; \n ' \
' devinfo = document.getElementById( " devicedetail " +t); \n ' \
' var phases = devinfo.getElementsByClassName( " phaselet " ); \n ' \
' for (var i = 0; i < phases.length; i++) { \n ' \
' if(phases[i].id in pd) { \n ' \
' var w = 100.0*pd[phases[i].id]/total[0]; \n ' \
' var fs = 32; \n ' \
' if(w < 8) fs = 4*w | 0; \n ' \
' var fs2 = fs*3/4; \n ' \
' phases[i].style.width = w+ " % " ; \n ' \
' phases[i].style.left = left+ " % " ; \n ' \
' phases[i].title = phases[i].id+ " " +pd[phases[i].id]+ " ms " ; \n ' \
' left += w; \n ' \
' var time = " <t4 style= \\ " font-size: " +fs+ " px \\ " > " +pd[phases[i].id]+ " ms<br></t4> " ; \n ' \
2016-12-14 10:37:05 -08:00
' var pname = " <t3 style= \\ " font-size: " +fs2+ " px \\ " > " +phases[i].id.replace(new RegExp( " _ " , " g " ), " " )+ " </t3> " ; \n ' \
2014-08-08 09:11:59 -07:00
' phases[i].innerHTML = time+pname; \n ' \
' } else { \n ' \
' phases[i].style.width = " 0 % " ; \n ' \
' phases[i].style.left = left+ " % " ; \n ' \
' } \n ' \
' } \n ' \
' } \n ' \
2017-04-07 11:05:35 -07:00
' if(typeof devstats !== \' undefined \' ) \n ' \
' callDetail(this.id, this.title); \n ' \
2014-01-16 16:18:22 -08:00
' var cglist = document.getElementById( " callgraphs " ); \n ' \
' if(!cglist) return; \n ' \
' var cg = cglist.getElementsByClassName( " atop " ); \n ' \
2016-07-15 23:34:14 +02:00
' if(cg.length < 10) return; \n ' \
2014-01-16 16:18:22 -08:00
' for (var i = 0; i < cg.length; i++) { \n ' \
2017-04-07 11:05:35 -07:00
' cgid = cg[i].id.split( " x " )[0] \n ' \
' if(idlist.indexOf(cgid) >= 0) { \n ' \
' cg[i].style.display = " block " ; \n ' \
' } else { \n ' \
' cg[i].style.display = " none " ; \n ' \
' } \n ' \
' } \n ' \
' } \n ' \
' function callDetail(devid, devtitle) { \n ' \
' if(!(devid in devstats) || devstats[devid].length < 1) \n ' \
' return; \n ' \
' var list = devstats[devid]; \n ' \
' var tmp = devtitle.split( " " ); \n ' \
' var name = tmp[0], phase = tmp[tmp.length-1]; \n ' \
' var dd = document.getElementById(phase); \n ' \
' var total = parseFloat(tmp[1].slice(1)); \n ' \
' var mlist = []; \n ' \
' var maxlen = 0; \n ' \
' var info = [] \n ' \
' for(var i in list) { \n ' \
' if(list[i][0] == " @ " ) { \n ' \
' info = list[i].split( " | " ); \n ' \
' continue; \n ' \
' } \n ' \
' var tmp = list[i].split( " | " ); \n ' \
' var t = parseFloat(tmp[0]), f = tmp[1], c = parseInt(tmp[2]); \n ' \
' var p = (t*100.0/total).toFixed(2); \n ' \
' mlist[mlist.length] = [f, c, t.toFixed(2), p+ " % " ]; \n ' \
' if(f.length > maxlen) \n ' \
' maxlen = f.length; \n ' \
' } \n ' \
' var pad = 5; \n ' \
' if(mlist.length == 0) pad = 30; \n ' \
' var html = \' <div style= " padding-top: \' +pad+ \' px " ><t3> <b> \' +name+ \' :</b> \' ; \n ' \
' if(info.length > 2) \n ' \
' html += " start=<b> " +info[1]+ " </b>, end=<b> " +info[2]+ " </b> " ; \n ' \
' if(info.length > 3) \n ' \
' html += " , length<i>(w/o overhead)</i>=<b> " +info[3]+ " ms</b> " ; \n ' \
' if(info.length > 4) \n ' \
' html += " , return=<b> " +info[4]+ " </b> " ; \n ' \
' html += " </t3></div> " ; \n ' \
' if(mlist.length > 0) { \n ' \
' html += \' <table class=fstat style= " padding-top: \' +(maxlen*5)+ \' px; " ><tr><th>Function</th> \' ; \n ' \
' for(var i in mlist) \n ' \
' html += " <td class=vt> " +mlist[i][0]+ " </td> " ; \n ' \
' html += " </tr><tr><th>Calls</th> " ; \n ' \
' for(var i in mlist) \n ' \
' html += " <td> " +mlist[i][1]+ " </td> " ; \n ' \
' html += " </tr><tr><th>Time(ms)</th> " ; \n ' \
' for(var i in mlist) \n ' \
' html += " <td> " +mlist[i][2]+ " </td> " ; \n ' \
' html += " </tr><tr><th>Percent</th> " ; \n ' \
' for(var i in mlist) \n ' \
' html += " <td> " +mlist[i][3]+ " </td> " ; \n ' \
' html += " </tr></table> " ; \n ' \
' } \n ' \
' dd.innerHTML = html; \n ' \
' var height = (maxlen*5)+100; \n ' \
' dd.style.height = height+ " px " ; \n ' \
' document.getElementById( " devicedetail " ).style.height = height+ " px " ; \n ' \
' } \n ' \
' function callSelect() { \n ' \
' var cglist = document.getElementById( " callgraphs " ); \n ' \
' if(!cglist) return; \n ' \
' var cg = cglist.getElementsByClassName( " atop " ); \n ' \
' for (var i = 0; i < cg.length; i++) { \n ' \
' if(this.id == cg[i].id) { \n ' \
2014-01-16 16:18:22 -08:00
' cg[i].style.display = " block " ; \n ' \
' } else { \n ' \
' cg[i].style.display = " none " ; \n ' \
' } \n ' \
' } \n ' \
' } \n ' \
2014-08-08 09:11:59 -07:00
' function devListWindow(e) { \n ' \
2016-12-14 10:37:07 -08:00
' var win = window.open(); \n ' \
2014-08-08 09:11:59 -07:00
' var html = " <title> " +e.target.innerHTML+ " </title> " + \n ' \
' " <style type= \\ " text/css \\ " > " + \n ' \
' " ul { list-style-type:circle;padding-left:10px;margin-left:10px;} " + \n ' \
' " </style> " \n ' \
' var dt = devtable[0]; \n ' \
' if(e.target.id != " devlist1 " ) \n ' \
' dt = devtable[1]; \n ' \
' win.document.write(html+dt); \n ' \
' } \n ' \
2016-12-14 10:37:07 -08:00
' function errWindow() { \n ' \
2018-01-30 00:17:20 -08:00
' var range = this.id.split( " _ " ); \n ' \
' var idx1 = parseInt(range[0]); \n ' \
' var idx2 = parseInt(range[1]); \n ' \
2016-12-14 10:37:07 -08:00
' var win = window.open(); \n ' \
2018-01-30 00:17:20 -08:00
' var log = document.getElementById( " dmesglog " ); \n ' \
' var title = " <title>dmesg log</title> " ; \n ' \
' var text = log.innerHTML.split( " \\ n " ); \n ' \
' var html = " " ; \n ' \
' for(var i = 0; i < text.length; i++) { \n ' \
' if(i == idx1) { \n ' \
' html += " <e id=target> " +text[i]+ " </e> \\ n " ; \n ' \
' } else if(i > idx1 && i <= idx2) { \n ' \
' html += " <e> " +text[i]+ " </e> \\ n " ; \n ' \
' } else { \n ' \
' html += text[i]+ " \\ n " ; \n ' \
' } \n ' \
' } \n ' \
' win.document.write( " <style>e { color:red}</style> " +title+ " <pre> " +html+ " </pre> " ); \n ' \
' win.location.hash = " #target " ; \n ' \
2016-12-14 10:37:07 -08:00
' win.document.close(); \n ' \
' } \n ' \
2016-07-15 23:34:14 +02:00
' function logWindow(e) { \n ' \
' var name = e.target.id.slice(4); \n ' \
' var win = window.open(); \n ' \
' var log = document.getElementById(name+ " log " ); \n ' \
' var title = " <title> " +document.title.split( " " )[0]+ " " +name+ " log</title> " ; \n ' \
' win.document.write(title+ " <pre> " +log.innerHTML+ " </pre> " ); \n ' \
' win.document.close(); \n ' \
' } \n ' \
2016-12-14 10:37:05 -08:00
' function onMouseDown(e) { \n ' \
' dragval[0] = e.clientX; \n ' \
' dragval[1] = document.getElementById( " dmesgzoombox " ).scrollLeft; \n ' \
' document.onmousemove = onMouseMove; \n ' \
' } \n ' \
' function onMouseMove(e) { \n ' \
' var zoombox = document.getElementById( " dmesgzoombox " ); \n ' \
' zoombox.scrollLeft = dragval[1] + dragval[0] - e.clientX; \n ' \
' } \n ' \
' function onMouseUp(e) { \n ' \
' document.onmousemove = null; \n ' \
' } \n ' \
' function onKeyPress(e) { \n ' \
' var c = e.charCode; \n ' \
' if(c != 42 && c != 43 && c != 45) return; \n ' \
' var click = document.createEvent( " Events " ); \n ' \
' click.initEvent( " click " , true, false); \n ' \
' if(c == 43) \n ' \
' document.getElementById( " zoomin " ).dispatchEvent(click); \n ' \
' else if(c == 45) \n ' \
' document.getElementById( " zoomout " ).dispatchEvent(click); \n ' \
' else if(c == 42) \n ' \
' document.getElementById( " zoomdef " ).dispatchEvent(click); \n ' \
' } \n ' \
2016-07-15 23:34:14 +02:00
' window.addEventListener( " resize " , function () { zoomTimeline();}); \n ' \
2014-01-16 16:18:22 -08:00
' window.addEventListener( " load " , function () { \n ' \
' var dmesg = document.getElementById( " dmesg " ); \n ' \
' dmesg.style.width = " 100 % " \n ' \
2017-02-09 13:27:43 -08:00
' dmesg.onmousedown = onMouseDown; \n ' \
2016-12-14 10:37:05 -08:00
' document.onmouseup = onMouseUp; \n ' \
' document.onkeypress = onKeyPress; \n ' \
2014-01-16 16:18:22 -08:00
' document.getElementById( " zoomin " ).onclick = zoomTimeline; \n ' \
' document.getElementById( " zoomout " ).onclick = zoomTimeline; \n ' \
' document.getElementById( " zoomdef " ).onclick = zoomTimeline; \n ' \
2016-12-14 10:37:07 -08:00
' var list = document.getElementsByClassName( " err " ); \n ' \
' for (var i = 0; i < list.length; i++) \n ' \
' list[i].onclick = errWindow; \n ' \
2016-07-15 23:34:14 +02:00
' var list = document.getElementsByClassName( " logbtn " ); \n ' \
' for (var i = 0; i < list.length; i++) \n ' \
' list[i].onclick = logWindow; \n ' \
' list = document.getElementsByClassName( " devlist " ); \n ' \
' for (var i = 0; i < list.length; i++) \n ' \
' list[i].onclick = devListWindow; \n ' \
2014-01-16 16:18:22 -08:00
' var dev = dmesg.getElementsByClassName( " thread " ); \n ' \
' for (var i = 0; i < dev.length; i++) { \n ' \
' dev[i].onclick = deviceDetail; \n ' \
2014-08-08 09:11:59 -07:00
' dev[i].onmouseover = deviceHover; \n ' \
' dev[i].onmouseout = deviceUnhover; \n ' \
2014-01-16 16:18:22 -08:00
' } \n ' \
2017-04-07 11:05:35 -07:00
' var dev = dmesg.getElementsByClassName( " srccall " ); \n ' \
' for (var i = 0; i < dev.length; i++) \n ' \
' dev[i].onclick = callSelect; \n ' \
2014-01-16 16:18:22 -08:00
' zoomTimeline(); \n ' \
' }); \n ' \
' </script> \n '
hf . write ( script_code ) ;
# Function: executeSuspend
# Description:
2014-08-08 09:11:59 -07:00
# Execute system suspend through the sysfs interface, then copy the output
# dmesg and ftrace files to the test output directory.
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
def executeSuspend ( quiet = False ) :
2020-11-10 18:36:17 -08:00
sv , tp , pm = sysvals , sysvals . tpath , ProcessMonitor ( )
if sv . wifi :
wifi = sv . checkWifi ( )
sv . dlog ( ' wifi check, connected device is " %s " ' % wifi )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
testdata = [ ]
2018-01-30 00:17:20 -08:00
# run these commands to prepare the system for suspend
2020-11-10 18:36:17 -08:00
if sv . display :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if not quiet :
2020-11-10 18:36:17 -08:00
pprint ( ' SET DISPLAY TO %s ' % sv . display . upper ( ) )
ret = sv . displayControl ( sv . display )
sv . dlog ( ' xset display %s , ret = %d ' % ( sv . display , ret ) )
2018-01-30 00:17:20 -08:00
time . sleep ( 1 )
2020-11-10 18:36:17 -08:00
if sv . sync :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if not quiet :
pprint ( ' SYNCING FILESYSTEMS ' )
2020-11-10 18:36:17 -08:00
sv . dlog ( ' syncing filesystems ' )
2018-01-30 00:17:20 -08:00
call ( ' sync ' , shell = True )
2020-11-10 18:36:17 -08:00
sv . dlog ( ' read dmesg ' )
sv . initdmesg ( )
2016-07-15 23:34:14 +02:00
# start ftrace
2020-11-10 18:36:17 -08:00
if ( sv . usecallgraph or sv . usetraceevents ) :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if not quiet :
pprint ( ' START TRACING ' )
2020-11-10 18:36:17 -08:00
sv . dlog ( ' start ftrace tracing ' )
sv . fsetVal ( ' 1 ' , ' tracing_on ' )
if sv . useprocmon :
sv . dlog ( ' start the process monitor ' )
2016-12-14 10:37:05 -08:00
pm . start ( )
2020-11-10 18:36:17 -08:00
sv . dlog ( ' run the cmdinfo list before ' )
sv . cmdinfo ( True )
2014-08-08 09:11:59 -07:00
# execute however many s/r runs requested
2020-11-10 18:36:17 -08:00
for count in range ( 1 , sv . execcount + 1 ) :
2016-12-14 10:37:05 -08:00
# x2delay in between test runs
2020-11-10 18:36:17 -08:00
if ( count > 1 and sv . x2delay > 0 ) :
sv . fsetVal ( ' WAIT %d ' % sv . x2delay , ' trace_marker ' )
time . sleep ( sv . x2delay / 1000.0 )
sv . fsetVal ( ' WAIT END ' , ' trace_marker ' )
2016-12-14 10:37:05 -08:00
# start message
2020-11-10 18:36:17 -08:00
if sv . testcommand != ' ' :
2018-10-08 15:56:32 -07:00
pprint ( ' COMMAND START ' )
2014-08-08 09:11:59 -07:00
else :
2020-11-10 18:36:17 -08:00
if ( sv . rtcwake ) :
2018-10-08 15:56:32 -07:00
pprint ( ' SUSPEND START ' )
2016-07-15 23:34:14 +02:00
else :
2018-10-08 15:56:32 -07:00
pprint ( ' SUSPEND START (press a key to resume) ' )
2016-12-14 10:37:05 -08:00
# set rtcwake
2020-11-10 18:36:17 -08:00
if ( sv . rtcwake ) :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if not quiet :
2020-11-10 18:36:17 -08:00
pprint ( ' will issue an rtcwake in %d seconds ' % sv . rtcwaketime )
sv . dlog ( ' enable RTC wake alarm ' )
sv . rtcWakeAlarmOn ( )
2016-12-14 10:37:05 -08:00
# start of suspend trace marker
2020-11-10 18:36:17 -08:00
if ( sv . usecallgraph or sv . usetraceevents ) :
sv . fsetVal ( datetime . now ( ) . strftime ( sv . tmstart ) , ' trace_marker ' )
2016-12-14 10:37:05 -08:00
# predelay delay
2020-11-10 18:36:17 -08:00
if ( count == 1 and sv . predelay > 0 ) :
sv . fsetVal ( ' WAIT %d ' % sv . predelay , ' trace_marker ' )
time . sleep ( sv . predelay / 1000.0 )
sv . fsetVal ( ' WAIT END ' , ' trace_marker ' )
2016-12-14 10:37:05 -08:00
# initiate suspend or command
2020-11-10 18:36:17 -08:00
sv . dlog ( ' system executing a suspend ' )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
tdata = { ' error ' : ' ' }
2020-11-10 18:36:17 -08:00
if sv . testcommand != ' ' :
res = call ( sv . testcommand + ' 2>&1 ' , shell = True ) ;
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if res != 0 :
tdata [ ' error ' ] = ' cmd returned %d ' % res
2016-12-14 10:37:05 -08:00
else :
2020-11-10 18:36:17 -08:00
mode = sv . suspendmode
if sv . memmode and os . path . exists ( sv . mempowerfile ) :
2017-07-05 14:42:55 -07:00
mode = ' mem '
2020-11-10 18:36:17 -08:00
sv . testVal ( sv . mempowerfile , ' radio ' , sv . memmode )
if sv . diskmode and os . path . exists ( sv . diskpowerfile ) :
2018-10-08 15:56:32 -07:00
mode = ' disk '
2020-11-10 18:36:17 -08:00
sv . testVal ( sv . diskpowerfile , ' radio ' , sv . diskmode )
if sv . acpidebug :
sv . testVal ( sv . acpipath , ' acpi ' , ' 0xe ' )
if mode == ' freeze ' and sv . haveTurbostat ( ) :
2019-05-14 10:53:57 -07:00
# execution will pause here
2020-11-10 18:36:17 -08:00
turbo = sv . turbostat ( )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
if turbo :
2019-05-14 10:53:57 -07:00
tdata [ ' turbo ' ] = turbo
else :
2020-11-10 18:36:17 -08:00
pf = open ( sv . powerfile , ' w ' )
2019-05-14 10:53:57 -07:00
pf . write ( mode )
# execution will pause here
try :
pf . close ( )
except Exception as e :
tdata [ ' error ' ] = str ( e )
2020-11-10 18:36:17 -08:00
sv . dlog ( ' system returned from resume ' )
# reset everything
sv . testVal ( ' restoreall ' )
if ( sv . rtcwake ) :
sv . dlog ( ' disable RTC wake alarm ' )
sv . rtcWakeAlarmOff ( )
2016-12-14 10:37:05 -08:00
# postdelay delay
2020-11-10 18:36:17 -08:00
if ( count == sv . execcount and sv . postdelay > 0 ) :
sv . fsetVal ( ' WAIT %d ' % sv . postdelay , ' trace_marker ' )
time . sleep ( sv . postdelay / 1000.0 )
sv . fsetVal ( ' WAIT END ' , ' trace_marker ' )
2014-08-08 09:11:59 -07:00
# return from suspend
2018-10-08 15:56:32 -07:00
pprint ( ' RESUME COMPLETE ' )
2020-11-10 18:36:17 -08:00
if ( sv . usecallgraph or sv . usetraceevents ) :
sv . fsetVal ( datetime . now ( ) . strftime ( sv . tmend ) , ' trace_marker ' )
if sv . wifi and wifi :
tdata [ ' wifi ' ] = sv . pollWifi ( wifi )
sv . dlog ( ' wifi check, %s ' % tdata [ ' wifi ' ] )
if ( sv . suspendmode == ' mem ' or sv . suspendmode == ' command ' ) :
sv . dlog ( ' read the ACPI FPDT ' )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
tdata [ ' fw ' ] = getFPDT ( False )
testdata . append ( tdata )
2020-11-10 18:36:17 -08:00
sv . dlog ( ' run the cmdinfo list after ' )
cmdafter = sv . cmdinfo ( False )
2016-07-15 23:34:14 +02:00
# stop ftrace
2020-11-10 18:36:17 -08:00
if ( sv . usecallgraph or sv . usetraceevents ) :
if sv . useprocmon :
sv . dlog ( ' stop the process monitor ' )
2016-12-14 10:37:05 -08:00
pm . stop ( )
2020-11-10 18:36:17 -08:00
sv . fsetVal ( ' 0 ' , ' tracing_on ' )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
# grab a copy of the dmesg output
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if not quiet :
pprint ( ' CAPTURING DMESG ' )
2020-11-10 18:36:17 -08:00
sysvals . dlog ( ' EXECUTION TRACE END ' )
sv . getdmesg ( testdata )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
# grab a copy of the ftrace output
2020-11-10 18:36:17 -08:00
if ( sv . usecallgraph or sv . usetraceevents ) :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if not quiet :
pprint ( ' CAPTURING TRACE ' )
2020-11-10 18:36:17 -08:00
op = sv . writeDatafileHeader ( sv . ftracefile , testdata )
2018-01-30 00:17:20 -08:00
fp = open ( tp + ' trace ' , ' r ' )
for line in fp :
op . write ( line )
op . close ( )
2020-11-10 18:36:17 -08:00
sv . fsetVal ( ' ' , ' trace ' )
sv . platforminfo ( cmdafter )
2016-07-15 23:34:14 +02:00
2018-01-30 00:17:20 -08:00
def readFile ( file ) :
if os . path . islink ( file ) :
return os . readlink ( file ) . split ( ' / ' ) [ - 1 ]
else :
return sysvals . getVal ( file ) . strip ( )
2014-08-08 09:11:59 -07:00
# Function: ms2nice
# Description:
# Print out a very concise time string in minutes and seconds
# Output:
# The time string, e.g. "1901m16s"
def ms2nice ( val ) :
2018-01-30 00:17:20 -08:00
val = int ( val )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
h = val / / 3600000
m = ( val / / 60000 ) % 60
s = ( val / / 1000 ) % 60
2018-01-30 00:17:20 -08:00
if h > 0 :
return ' %d : %02d : %02d ' % ( h , m , s )
if m > 0 :
return ' %02d : %02d ' % ( m , s )
return ' %d s ' % s
2014-01-16 16:18:22 -08:00
2018-01-30 00:17:20 -08:00
def yesno ( val ) :
list = { ' enabled ' : ' A ' , ' disabled ' : ' S ' , ' auto ' : ' E ' , ' on ' : ' D ' ,
' active ' : ' A ' , ' suspended ' : ' S ' , ' suspending ' : ' S ' }
if val not in list :
return ' '
return list [ val ]
# Function: deviceInfo
2014-01-16 16:18:22 -08:00
# Description:
2014-08-08 09:11:59 -07:00
# Detect all the USB hosts and devices currently connected and add
# a list of USB device names to sysvals for better timeline readability
2018-01-30 00:17:20 -08:00
def deviceInfo ( output = ' ' ) :
if not output :
2018-10-08 15:56:32 -07:00
pprint ( ' LEGEND \n ' \
' --------------------------------------------------------------------------------------------- \n ' \
' A = async/sync PM queue (A/S) C = runtime active children \n ' \
' R = runtime suspend enabled/disabled (E/D) rACTIVE = runtime active (min/sec) \n ' \
' S = runtime status active/suspended (A/S) rSUSPEND = runtime suspend (min/sec) \n ' \
' U = runtime usage count \n ' \
' --------------------------------------------------------------------------------------------- \n ' \
' DEVICE NAME A R S U C rACTIVE rSUSPEND \n ' \
' --------------------------------------------------------------------------------------------- ' )
2018-01-30 00:17:20 -08:00
res = [ ]
tgtval = ' runtime_status '
lines = dict ( )
2014-08-08 09:11:59 -07:00
for dirname , dirnames , filenames in os . walk ( ' /sys/devices ' ) :
2018-01-30 00:17:20 -08:00
if ( not re . match ( ' .*/power ' , dirname ) or
' control ' not in filenames or
tgtval not in filenames ) :
continue
name = ' '
dirname = dirname [ : - 6 ]
device = dirname . split ( ' / ' ) [ - 1 ]
power = dict ( )
power [ tgtval ] = readFile ( ' %s /power/ %s ' % ( dirname , tgtval ) )
# only list devices which support runtime suspend
if power [ tgtval ] not in [ ' active ' , ' suspended ' , ' suspending ' ] :
continue
for i in [ ' product ' , ' driver ' , ' subsystem ' ] :
file = ' %s / %s ' % ( dirname , i )
if os . path . exists ( file ) :
name = readFile ( file )
break
for i in [ ' async ' , ' control ' , ' runtime_status ' , ' runtime_usage ' ,
' runtime_active_kids ' , ' runtime_active_time ' ,
' runtime_suspended_time ' ] :
if i in filenames :
power [ i ] = readFile ( ' %s /power/ %s ' % ( dirname , i ) )
if output :
if power [ ' control ' ] == output :
res . append ( ' %s /power/control ' % dirname )
continue
lines [ dirname ] = ' %-26s %-26s %1s %1s %1s %1s %1s %10s %10s ' % \
( device [ : 26 ] , name [ : 26 ] ,
yesno ( power [ ' async ' ] ) , \
yesno ( power [ ' control ' ] ) , \
yesno ( power [ ' runtime_status ' ] ) , \
power [ ' runtime_usage ' ] , \
power [ ' runtime_active_kids ' ] , \
ms2nice ( power [ ' runtime_active_time ' ] ) , \
ms2nice ( power [ ' runtime_suspended_time ' ] ) )
for i in sorted ( lines ) :
2019-05-14 10:53:58 -07:00
print ( lines [ i ] )
2018-01-30 00:17:20 -08:00
return res
2016-07-15 23:34:14 +02:00
2014-08-08 09:11:59 -07:00
# Function: getModes
# Description:
# Determine the supported power modes on this system
# Output:
# A string list of the available modes
2014-01-16 16:18:22 -08:00
def getModes ( ) :
2017-07-05 14:42:55 -07:00
modes = [ ]
2016-07-15 23:34:14 +02:00
if ( os . path . exists ( sysvals . powerfile ) ) :
fp = open ( sysvals . powerfile , ' r ' )
2019-05-14 10:53:58 -07:00
modes = fp . read ( ) . split ( )
2016-07-15 23:34:14 +02:00
fp . close ( )
2017-07-05 14:42:55 -07:00
if ( os . path . exists ( sysvals . mempowerfile ) ) :
deep = False
fp = open ( sysvals . mempowerfile , ' r ' )
2019-05-14 10:53:58 -07:00
for m in fp . read ( ) . split ( ) :
2017-07-05 14:42:55 -07:00
memmode = m . strip ( ' [] ' )
if memmode == ' deep ' :
deep = True
else :
modes . append ( ' mem- %s ' % memmode )
fp . close ( )
if ' mem ' in modes and not deep :
modes . remove ( ' mem ' )
2018-10-08 15:56:32 -07:00
if ( ' disk ' in modes and os . path . exists ( sysvals . diskpowerfile ) ) :
fp = open ( sysvals . diskpowerfile , ' r ' )
2019-05-14 10:53:58 -07:00
for m in fp . read ( ) . split ( ) :
2018-10-08 15:56:32 -07:00
modes . append ( ' disk- %s ' % m . strip ( ' [] ' ) )
fp . close ( )
2014-01-16 16:18:22 -08:00
return modes
2017-07-05 14:42:55 -07:00
# Function: dmidecode
# Description:
# Read the bios tables and pull out system info
# Arguments:
# mempath: /dev/mem or custom mem path
# fatal: True to exit on error, False to return empty dict
# Output:
# A dict object with all available key/values
def dmidecode ( mempath , fatal = False ) :
out = dict ( )
# the list of values to retrieve, with hardcoded (type, idx)
info = {
' bios-vendor ' : ( 0 , 4 ) ,
' bios-version ' : ( 0 , 5 ) ,
' bios-release-date ' : ( 0 , 8 ) ,
' system-manufacturer ' : ( 1 , 4 ) ,
' system-product-name ' : ( 1 , 5 ) ,
' system-version ' : ( 1 , 6 ) ,
' system-serial-number ' : ( 1 , 7 ) ,
' baseboard-manufacturer ' : ( 2 , 4 ) ,
' baseboard-product-name ' : ( 2 , 5 ) ,
' baseboard-version ' : ( 2 , 6 ) ,
' baseboard-serial-number ' : ( 2 , 7 ) ,
' chassis-manufacturer ' : ( 3 , 4 ) ,
' chassis-type ' : ( 3 , 5 ) ,
' chassis-version ' : ( 3 , 6 ) ,
' chassis-serial-number ' : ( 3 , 7 ) ,
' processor-manufacturer ' : ( 4 , 7 ) ,
' processor-version ' : ( 4 , 16 ) ,
}
if ( not os . path . exists ( mempath ) ) :
if ( fatal ) :
doError ( ' file does not exist: %s ' % mempath )
return out
if ( not os . access ( mempath , os . R_OK ) ) :
if ( fatal ) :
doError ( ' file is not readable: %s ' % mempath )
return out
# by default use legacy scan, but try to use EFI first
memaddr = 0xf0000
memsize = 0x10000
for ep in [ ' /sys/firmware/efi/systab ' , ' /proc/efi/systab ' ] :
if not os . path . exists ( ep ) or not os . access ( ep , os . R_OK ) :
continue
fp = open ( ep , ' r ' )
buf = fp . read ( )
fp . close ( )
i = buf . find ( ' SMBIOS= ' )
if i > = 0 :
try :
memaddr = int ( buf [ i + 7 : ] , 16 )
memsize = 0x20
except :
continue
# read in the memory for scanning
try :
2019-05-14 10:53:58 -07:00
fp = open ( mempath , ' rb ' )
2017-07-05 14:42:55 -07:00
fp . seek ( memaddr )
buf = fp . read ( memsize )
except :
if ( fatal ) :
doError ( ' DMI table is unreachable, sorry ' )
else :
2019-05-14 10:53:58 -07:00
pprint ( ' WARNING: /dev/mem is not readable, ignoring DMI data ' )
2017-07-05 14:42:55 -07:00
return out
fp . close ( )
# search for either an SM table or DMI table
i = base = length = num = 0
while ( i < memsize ) :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
if buf [ i : i + 4 ] == b ' _SM_ ' and i < memsize - 16 :
2017-07-05 14:42:55 -07:00
length = struct . unpack ( ' H ' , buf [ i + 22 : i + 24 ] ) [ 0 ]
base , num = struct . unpack ( ' IH ' , buf [ i + 24 : i + 30 ] )
break
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
elif buf [ i : i + 5 ] == b ' _DMI_ ' :
2017-07-05 14:42:55 -07:00
length = struct . unpack ( ' H ' , buf [ i + 6 : i + 8 ] ) [ 0 ]
base , num = struct . unpack ( ' IH ' , buf [ i + 8 : i + 14 ] )
break
i + = 16
if base == 0 and length == 0 and num == 0 :
if ( fatal ) :
doError ( ' Neither SMBIOS nor DMI were found ' )
else :
return out
# read in the SM or DMI table
try :
2019-05-14 10:53:58 -07:00
fp = open ( mempath , ' rb ' )
2017-07-05 14:42:55 -07:00
fp . seek ( base )
buf = fp . read ( length )
except :
if ( fatal ) :
doError ( ' DMI table is unreachable, sorry ' )
else :
2019-05-14 10:53:58 -07:00
pprint ( ' WARNING: /dev/mem is not readable, ignoring DMI data ' )
2017-07-05 14:42:55 -07:00
return out
fp . close ( )
# scan the table for the values we want
count = i = 0
while ( count < num and i < = len ( buf ) - 4 ) :
type , size , handle = struct . unpack ( ' BBH ' , buf [ i : i + 4 ] )
n = i + size
while n < len ( buf ) - 1 :
if 0 == struct . unpack ( ' H ' , buf [ n : n + 2 ] ) [ 0 ] :
break
n + = 1
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
data = buf [ i + size : n + 2 ] . split ( b ' \0 ' )
2017-07-05 14:42:55 -07:00
for name in info :
itype , idxadr = info [ name ]
if itype == type :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
idx = struct . unpack ( ' B ' , buf [ i + idxadr : i + idxadr + 1 ] ) [ 0 ]
2017-07-05 14:42:55 -07:00
if idx > 0 and idx < len ( data ) - 1 :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
s = data [ idx - 1 ] . decode ( ' utf-8 ' )
if s . strip ( ) and s . strip ( ) . lower ( ) != ' to be filled by o.e.m. ' :
out [ name ] = s
2017-07-05 14:42:55 -07:00
i = n + 2
count + = 1
return out
2014-08-08 09:11:59 -07:00
# Function: getFPDT
# Description:
# Read the acpi bios tables and pull out FPDT, the firmware data
# Arguments:
# output: True to output the info to stdout, False otherwise
def getFPDT ( output ) :
rectype = { }
rectype [ 0 ] = ' Firmware Basic Boot Performance Record '
rectype [ 1 ] = ' S3 Performance Table Record '
prectype = { }
prectype [ 0 ] = ' Basic S3 Resume Performance Record '
prectype [ 1 ] = ' Basic S3 Suspend Performance Record '
2017-07-05 14:42:55 -07:00
sysvals . rootCheck ( True )
2014-08-08 09:11:59 -07:00
if ( not os . path . exists ( sysvals . fpdtpath ) ) :
if ( output ) :
2016-12-14 10:37:07 -08:00
doError ( ' file does not exist: %s ' % sysvals . fpdtpath )
2014-08-08 09:11:59 -07:00
return False
if ( not os . access ( sysvals . fpdtpath , os . R_OK ) ) :
if ( output ) :
2016-12-14 10:37:07 -08:00
doError ( ' file is not readable: %s ' % sysvals . fpdtpath )
2014-08-08 09:11:59 -07:00
return False
if ( not os . path . exists ( sysvals . mempath ) ) :
if ( output ) :
2016-12-14 10:37:07 -08:00
doError ( ' file does not exist: %s ' % sysvals . mempath )
2014-08-08 09:11:59 -07:00
return False
if ( not os . access ( sysvals . mempath , os . R_OK ) ) :
if ( output ) :
2016-12-14 10:37:07 -08:00
doError ( ' file is not readable: %s ' % sysvals . mempath )
2014-08-08 09:11:59 -07:00
return False
fp = open ( sysvals . fpdtpath , ' rb ' )
buf = fp . read ( )
fp . close ( )
if ( len ( buf ) < 36 ) :
if ( output ) :
doError ( ' Invalid FPDT table data, should ' + \
2016-12-14 10:37:07 -08:00
' be at least 36 bytes ' )
2014-08-08 09:11:59 -07:00
return False
table = struct . unpack ( ' 4sIBB6s8sI4sI ' , buf [ 0 : 36 ] )
if ( output ) :
2018-10-08 15:56:32 -07:00
pprint ( ' \n ' \
' Firmware Performance Data Table ( %s ) \n ' \
' Signature : %s \n ' \
' Table Length : %u \n ' \
' Revision : %u \n ' \
' Checksum : 0x %x \n ' \
' OEM ID : %s \n ' \
' OEM Table ID : %s \n ' \
' OEM Revision : %u \n ' \
' Creator ID : %s \n ' \
' Creator Revision : 0x %x \n ' \
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
' ' % ( ascii ( table [ 0 ] ) , ascii ( table [ 0 ] ) , table [ 1 ] , table [ 2 ] ,
table [ 3 ] , ascii ( table [ 4 ] ) , ascii ( table [ 5 ] ) , table [ 6 ] ,
ascii ( table [ 7 ] ) , table [ 8 ] ) )
2014-08-08 09:11:59 -07:00
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
if ( table [ 0 ] != b ' FPDT ' ) :
2014-08-08 09:11:59 -07:00
if ( output ) :
doError ( ' Invalid FPDT table ' )
return False
if ( len ( buf ) < = 36 ) :
return False
i = 0
fwData = [ 0 , 0 ]
records = buf [ 36 : ]
2019-05-14 10:53:58 -07:00
try :
fp = open ( sysvals . mempath , ' rb ' )
except :
pprint ( ' WARNING: /dev/mem is not readable, ignoring the FPDT data ' )
return False
2014-08-08 09:11:59 -07:00
while ( i < len ( records ) ) :
header = struct . unpack ( ' HBB ' , records [ i : i + 4 ] )
if ( header [ 0 ] not in rectype ) :
2016-07-15 23:34:14 +02:00
i + = header [ 1 ]
2014-08-08 09:11:59 -07:00
continue
if ( header [ 1 ] != 16 ) :
2016-07-15 23:34:14 +02:00
i + = header [ 1 ]
2014-08-08 09:11:59 -07:00
continue
addr = struct . unpack ( ' Q ' , records [ i + 8 : i + 16 ] ) [ 0 ]
try :
fp . seek ( addr )
first = fp . read ( 8 )
except :
2016-07-15 23:34:14 +02:00
if ( output ) :
2018-10-08 15:56:32 -07:00
pprint ( ' Bad address 0x %x in %s ' % ( addr , sysvals . mempath ) )
2016-07-15 23:34:14 +02:00
return [ 0 , 0 ]
2014-08-08 09:11:59 -07:00
rechead = struct . unpack ( ' 4sI ' , first )
recdata = fp . read ( rechead [ 1 ] - 8 )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
if ( rechead [ 0 ] == b ' FBPT ' ) :
record = struct . unpack ( ' HBBIQQQQQ ' , recdata [ : 48 ] )
2014-08-08 09:11:59 -07:00
if ( output ) :
2018-10-08 15:56:32 -07:00
pprint ( ' %s ( %s ) \n ' \
' Reset END : %u ns \n ' \
' OS Loader LoadImage Start : %u ns \n ' \
' OS Loader StartImage Start : %u ns \n ' \
' ExitBootServices Entry : %u ns \n ' \
' ExitBootServices Exit : %u ns ' \
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
' ' % ( rectype [ header [ 0 ] ] , ascii ( rechead [ 0 ] ) , record [ 4 ] , record [ 5 ] ,
2018-10-08 15:56:32 -07:00
record [ 6 ] , record [ 7 ] , record [ 8 ] ) )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
elif ( rechead [ 0 ] == b ' S3PT ' ) :
2014-08-08 09:11:59 -07:00
if ( output ) :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
pprint ( ' %s ( %s ) ' % ( rectype [ header [ 0 ] ] , ascii ( rechead [ 0 ] ) ) )
2014-08-08 09:11:59 -07:00
j = 0
while ( j < len ( recdata ) ) :
prechead = struct . unpack ( ' HBB ' , recdata [ j : j + 4 ] )
if ( prechead [ 0 ] not in prectype ) :
continue
if ( prechead [ 0 ] == 0 ) :
record = struct . unpack ( ' IIQQ ' , recdata [ j : j + prechead [ 1 ] ] )
fwData [ 1 ] = record [ 2 ]
if ( output ) :
2018-10-08 15:56:32 -07:00
pprint ( ' %s \n ' \
' Resume Count : %u \n ' \
' FullResume : %u ns \n ' \
' AverageResume : %u ns ' \
' ' % ( prectype [ prechead [ 0 ] ] , record [ 1 ] ,
record [ 2 ] , record [ 3 ] ) )
2014-08-08 09:11:59 -07:00
elif ( prechead [ 0 ] == 1 ) :
record = struct . unpack ( ' QQ ' , recdata [ j + 4 : j + prechead [ 1 ] ] )
fwData [ 0 ] = record [ 1 ] - record [ 0 ]
if ( output ) :
2018-10-08 15:56:32 -07:00
pprint ( ' %s \n ' \
' SuspendStart : %u ns \n ' \
' SuspendEnd : %u ns \n ' \
' SuspendTime : %u ns ' \
' ' % ( prectype [ prechead [ 0 ] ] , record [ 0 ] ,
record [ 1 ] , fwData [ 0 ] ) )
2014-08-08 09:11:59 -07:00
j + = prechead [ 1 ]
if ( output ) :
2018-10-08 15:56:32 -07:00
pprint ( ' ' )
2014-08-08 09:11:59 -07:00
i + = header [ 1 ]
fp . close ( )
return fwData
2014-01-16 16:18:22 -08:00
# Function: statusCheck
# Description:
2014-08-08 09:11:59 -07:00
# Verify that the requested command and options will work, and
# print the results to the terminal
# Output:
# True if the test will work, False if not
2016-07-15 23:34:14 +02:00
def statusCheck ( probecheck = False ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
status = ' '
2014-01-16 16:18:22 -08:00
2018-10-08 15:56:32 -07:00
pprint ( ' Checking this system ( %s )... ' % platform . node ( ) )
2014-01-16 16:18:22 -08:00
# check we have root access
2016-07-15 23:34:14 +02:00
res = sysvals . colorText ( ' NO (No features of this tool will work!) ' )
2017-07-05 14:42:55 -07:00
if ( sysvals . rootCheck ( False ) ) :
2016-07-15 23:34:14 +02:00
res = ' YES '
2018-10-08 15:56:32 -07:00
pprint ( ' have root access: %s ' % res )
2014-08-08 09:11:59 -07:00
if ( res != ' YES ' ) :
2018-10-08 15:56:32 -07:00
pprint ( ' Try running this script with sudo ' )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
return ' missing root access '
2014-01-16 16:18:22 -08:00
# check sysfs is mounted
2016-07-15 23:34:14 +02:00
res = sysvals . colorText ( ' NO (No features of this tool will work!) ' )
if ( os . path . exists ( sysvals . powerfile ) ) :
res = ' YES '
2018-10-08 15:56:32 -07:00
pprint ( ' is sysfs mounted: %s ' % res )
2014-08-08 09:11:59 -07:00
if ( res != ' YES ' ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
return ' sysfs is missing '
2014-01-16 16:18:22 -08:00
# check target mode is a valid mode
2016-07-15 23:34:14 +02:00
if sysvals . suspendmode != ' command ' :
res = sysvals . colorText ( ' NO ' )
modes = getModes ( )
if ( sysvals . suspendmode in modes ) :
res = ' YES '
else :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
status = ' %s mode is not supported ' % sysvals . suspendmode
2018-10-08 15:56:32 -07:00
pprint ( ' is " %s " a valid power mode: %s ' % ( sysvals . suspendmode , res ) )
2016-07-15 23:34:14 +02:00
if ( res == ' NO ' ) :
2018-10-08 15:56:32 -07:00
pprint ( ' valid power modes are: %s ' % modes )
pprint ( ' please choose one with -m ' )
2014-01-16 16:18:22 -08:00
# check if ftrace is available
2016-07-15 23:34:14 +02:00
res = sysvals . colorText ( ' NO ' )
ftgood = sysvals . verifyFtrace ( )
2014-08-08 09:11:59 -07:00
if ( ftgood ) :
res = ' YES '
elif ( sysvals . usecallgraph ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
status = ' ftrace is not properly supported '
2018-10-08 15:56:32 -07:00
pprint ( ' is ftrace supported: %s ' % res )
2014-08-08 09:11:59 -07:00
2016-07-15 23:34:14 +02:00
# check if kprobes are available
2019-05-14 10:53:58 -07:00
if sysvals . usekprobes :
res = sysvals . colorText ( ' NO ' )
sysvals . usekprobes = sysvals . verifyKprobes ( )
if ( sysvals . usekprobes ) :
res = ' YES '
else :
sysvals . usedevsrc = False
pprint ( ' are kprobes supported: %s ' % res )
2016-07-15 23:34:14 +02:00
2014-08-08 09:11:59 -07:00
# what data source are we using
res = ' DMESG '
if ( ftgood ) :
2018-01-30 00:17:20 -08:00
sysvals . usetraceevents = True
2014-08-08 09:11:59 -07:00
for e in sysvals . traceevents :
2018-01-30 00:17:20 -08:00
if not os . path . exists ( sysvals . epath + e ) :
sysvals . usetraceevents = False
if ( sysvals . usetraceevents ) :
2014-08-08 09:11:59 -07:00
res = ' FTRACE (all trace events found) '
2018-10-08 15:56:32 -07:00
pprint ( ' timeline data source: %s ' % res )
2014-01-16 16:18:22 -08:00
# check if rtcwake
2016-07-15 23:34:14 +02:00
res = sysvals . colorText ( ' NO ' )
2014-08-08 09:11:59 -07:00
if ( sysvals . rtcpath != ' ' ) :
res = ' YES '
elif ( sysvals . rtcwake ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
status = ' rtcwake is not properly supported '
2018-10-08 15:56:32 -07:00
pprint ( ' is rtcwake supported: %s ' % res )
2014-01-16 16:18:22 -08:00
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
# check info commands
pprint ( ' optional commands this tool may use for info: ' )
no = sysvals . colorText ( ' MISSING ' )
yes = sysvals . colorText ( ' FOUND ' , 32 )
for c in [ ' turbostat ' , ' mcelog ' , ' lspci ' , ' lsusb ' ] :
if c == ' turbostat ' :
res = yes if sysvals . haveTurbostat ( ) else no
else :
res = yes if sysvals . getExec ( c ) else no
pprint ( ' %s : %s ' % ( c , res ) )
2016-07-15 23:34:14 +02:00
if not probecheck :
return status
2016-12-14 10:37:06 -08:00
# verify kprobes
2016-12-14 10:37:07 -08:00
if sysvals . usekprobes :
for name in sysvals . tracefuncs :
sysvals . defaultKprobe ( name , sysvals . tracefuncs [ name ] )
if sysvals . usedevsrc :
for name in sysvals . dev_tracefuncs :
sysvals . defaultKprobe ( name , sysvals . dev_tracefuncs [ name ] )
sysvals . addKprobes ( True )
2016-07-15 23:34:14 +02:00
2014-08-08 09:11:59 -07:00
return status
2014-01-16 16:18:22 -08:00
2014-08-08 09:11:59 -07:00
# Function: doError
# Description:
# generic error function for catastrphic failures
# Arguments:
# msg: the error message to print
# help: True if printHelp should be called after, False otherwise
2016-12-14 10:37:07 -08:00
def doError ( msg , help = False ) :
2014-01-16 16:18:22 -08:00
if ( help == True ) :
printHelp ( )
2018-10-08 15:56:32 -07:00
pprint ( ' ERROR: %s \n ' % msg )
2018-01-30 00:17:20 -08:00
sysvals . outputResult ( { ' error ' : msg } )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sys . exit ( 1 )
2014-01-16 16:18:22 -08:00
2014-08-08 09:11:59 -07:00
# Function: getArgInt
# Description:
# pull out an integer argument from the command line with checks
2016-07-15 23:34:14 +02:00
def getArgInt ( name , args , min , max , main = True ) :
if main :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
arg = next ( args )
2016-07-15 23:34:14 +02:00
except :
doError ( name + ' : no argument supplied ' , True )
else :
arg = args
2014-08-08 09:11:59 -07:00
try :
val = int ( arg )
except :
doError ( name + ' : non-integer value given ' , True )
if ( val < min or val > max ) :
doError ( name + ' : value should be between %d and %d ' % ( min , max ) , True )
return val
2016-07-15 23:34:14 +02:00
# Function: getArgFloat
# Description:
# pull out a float argument from the command line with checks
def getArgFloat ( name , args , min , max , main = True ) :
if main :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
arg = next ( args )
2016-07-15 23:34:14 +02:00
except :
doError ( name + ' : no argument supplied ' , True )
else :
arg = args
try :
val = float ( arg )
except :
doError ( name + ' : non-numerical value given ' , True )
if ( val < min or val > max ) :
doError ( name + ' : value should be between %f and %f ' % ( min , max ) , True )
return val
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
def processData ( live = False , quiet = False ) :
if not quiet :
2020-07-20 18:02:49 -07:00
pprint ( ' PROCESSING: %s ' % sysvals . htmlfile )
2019-05-14 10:53:58 -07:00
sysvals . vprint ( ' usetraceevents= %s , usetracemarkers= %s , usekprobes= %s ' % \
( sysvals . usetraceevents , sysvals . usetracemarkers , sysvals . usekprobes ) )
2018-05-24 09:36:28 -07:00
error = ' '
2018-01-30 00:17:20 -08:00
if ( sysvals . usetraceevents ) :
2018-05-24 09:36:28 -07:00
testruns , error = parseTraceLog ( live )
2016-12-14 10:37:07 -08:00
if sysvals . dmesgfile :
for data in testruns :
2018-01-30 00:17:20 -08:00
data . extractErrorInfo ( )
2014-08-08 09:11:59 -07:00
else :
testruns = loadKernelLog ( )
for data in testruns :
parseKernelLog ( data )
2016-12-14 10:37:07 -08:00
if ( sysvals . ftracefile and ( sysvals . usecallgraph or sysvals . usetraceevents ) ) :
2014-08-08 09:11:59 -07:00
appendIncompleteTraceLog ( testruns )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if not sysvals . stamp :
pprint ( ' ERROR: data does not include the expected stamp ' )
return ( testruns , { ' error ' : ' timeline generation failed ' } )
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
shown = [ ' bios ' , ' biosdate ' , ' cpu ' , ' host ' , ' kernel ' , ' man ' , ' memfr ' ,
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
' memsz ' , ' mode ' , ' numcpu ' , ' plat ' , ' time ' , ' wifi ' ]
2019-05-14 10:53:58 -07:00
sysvals . vprint ( ' System Info: ' )
for key in sorted ( sysvals . stamp ) :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
if key in shown :
sysvals . vprint ( ' %-8s : %s ' % ( key . upper ( ) , sysvals . stamp [ key ] ) )
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' Command: \n %s ' % sysvals . cmdline )
for data in testruns :
2019-05-14 10:53:57 -07:00
if data . turbostat :
2019-05-14 10:53:58 -07:00
idx , s = 0 , ' Turbostat: \n '
for val in data . turbostat . split ( ' | ' ) :
idx + = len ( val ) + 1
if idx > = 80 :
idx = 0
s + = ' \n '
s + = val + ' '
sysvals . vprint ( s )
2018-01-30 00:17:20 -08:00
data . printDetails ( )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if len ( sysvals . platinfo ) > 0 :
sysvals . vprint ( ' \n Platform Info: ' )
for info in sysvals . platinfo :
sysvals . vprint ( ' [ %s - %s ] ' % ( info [ 0 ] , info [ 1 ] ) )
sysvals . vprint ( info [ 2 ] )
sysvals . vprint ( ' ' )
2018-01-30 00:17:20 -08:00
if sysvals . cgdump :
for data in testruns :
data . debugPrint ( )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sys . exit ( 0 )
2018-05-24 09:36:28 -07:00
if len ( testruns ) < 1 :
2018-10-08 15:56:32 -07:00
pprint ( ' ERROR: Not enough test data to build a timeline ' )
2018-05-24 09:36:28 -07:00
return ( testruns , { ' error ' : ' timeline generation failed ' } )
2018-01-30 00:17:20 -08:00
sysvals . vprint ( ' Creating the html timeline ( %s )... ' % sysvals . htmlfile )
2018-05-24 09:36:28 -07:00
createHTML ( testruns , error )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if not quiet :
2020-07-20 18:02:49 -07:00
pprint ( ' DONE: %s ' % sysvals . htmlfile )
2018-01-30 00:17:20 -08:00
data = testruns [ 0 ]
stamp = data . stamp
stamp [ ' suspend ' ] , stamp [ ' resume ' ] = data . getTimeValues ( )
if data . fwValid :
stamp [ ' fwsuspend ' ] , stamp [ ' fwresume ' ] = data . fwSuspend , data . fwResume
2018-05-24 09:36:28 -07:00
if error :
stamp [ ' error ' ] = error
2018-01-30 00:17:20 -08:00
return ( testruns , stamp )
2014-08-08 09:11:59 -07:00
2016-12-14 10:37:07 -08:00
# Function: rerunTest
# Description:
# generate an output from an existing set of ftrace/dmesg logs
2019-05-14 10:53:58 -07:00
def rerunTest ( htmlfile = ' ' ) :
2016-12-14 10:37:07 -08:00
if sysvals . ftracefile :
doesTraceLogHaveTraceEvents ( )
2018-01-30 00:17:20 -08:00
if not sysvals . dmesgfile and not sysvals . usetraceevents :
2016-12-14 10:37:07 -08:00
doError ( ' recreating this html output requires a dmesg file ' )
2019-05-14 10:53:58 -07:00
if htmlfile :
sysvals . htmlfile = htmlfile
2019-05-14 10:53:57 -07:00
else :
sysvals . setOutputFile ( )
2017-07-05 14:42:55 -07:00
if os . path . exists ( sysvals . htmlfile ) :
if not os . path . isfile ( sysvals . htmlfile ) :
doError ( ' a directory already exists with this name: %s ' % sysvals . htmlfile )
elif not os . access ( sysvals . htmlfile , os . W_OK ) :
doError ( ' missing permission to write to %s ' % sysvals . htmlfile )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
testruns , stamp = processData ( )
sysvals . resetlog ( )
2018-01-30 00:17:20 -08:00
return stamp
2016-12-14 10:37:07 -08:00
2014-08-08 09:11:59 -07:00
# Function: runTest
# Description:
# execute a suspend/resume, gather the logs, and generate the output
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
def runTest ( n = 0 , quiet = False ) :
2014-08-08 09:11:59 -07:00
# prepare for the test
2017-07-05 14:42:55 -07:00
sysvals . initTestOutput ( ' suspend ' )
2020-11-10 18:36:17 -08:00
op = sysvals . writeDatafileHeader ( sysvals . dmesgfile , [ ] )
op . write ( ' # EXECUTION TRACE START \n ' )
op . close ( )
if n < = 1 :
if sysvals . rs != 0 :
sysvals . dlog ( ' %s abling runtime suspend ' % ( ' en ' if sysvals . rs > 0 else ' dis ' ) )
sysvals . setRuntimeSuspend ( True )
if sysvals . display :
ret = sysvals . displayControl ( ' init ' )
sysvals . dlog ( ' xset display init, ret = %d ' % ret )
sysvals . dlog ( ' initialize ftrace ' )
sysvals . initFtrace ( quiet )
2014-08-08 09:11:59 -07:00
# execute the test
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
executeSuspend ( quiet )
2016-07-15 23:34:14 +02:00
sysvals . cleanupFtrace ( )
2018-01-30 00:17:20 -08:00
if sysvals . skiphtml :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
sysvals . outputResult ( { } , n )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sysvals . sudoUserchown ( sysvals . testdir )
2018-01-30 00:17:20 -08:00
return
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
testruns , stamp = processData ( True , quiet )
for data in testruns :
del data
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sysvals . sudoUserchown ( sysvals . testdir )
2018-01-30 00:17:20 -08:00
sysvals . outputResult ( stamp , n )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if ' error ' in stamp :
return 2
return 0
2014-08-08 09:11:59 -07:00
2018-05-24 09:36:28 -07:00
def find_in_html ( html , start , end , firstonly = True ) :
2020-07-20 18:02:49 -07:00
cnt , out , list = len ( html ) , [ ] , [ ]
if firstonly :
m = re . search ( start , html )
if m :
list . append ( m )
else :
list = re . finditer ( start , html )
for match in list :
s = match . end ( )
e = cnt if ( len ( out ) < 1 or s + 10000 > cnt ) else s + 10000
m = re . search ( end , html [ s : e ] )
2018-05-24 09:36:28 -07:00
if not m :
break
2020-07-20 18:02:49 -07:00
e = s + m . start ( )
str = html [ s : e ]
2018-05-24 09:36:28 -07:00
if end == ' ms ' :
num = re . search ( r ' [-+]? \ d* \ . \ d+| \ d+ ' , str )
str = num . group ( ) if num else ' NaN '
if firstonly :
return str
out . append ( str )
if firstonly :
2017-04-07 11:05:35 -07:00
return ' '
2018-05-24 09:36:28 -07:00
return out
2017-04-07 11:05:35 -07:00
2019-05-14 10:53:58 -07:00
def data_from_html ( file , outpath , issues , fulldetail = False ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
html = open ( file , ' r ' ) . read ( )
2019-05-14 10:53:58 -07:00
sysvals . htmlfile = os . path . relpath ( file , outpath )
2019-05-14 10:53:57 -07:00
# extract general info
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
suspend = find_in_html ( html , ' Kernel Suspend ' , ' ms ' )
resume = find_in_html ( html , ' Kernel Resume ' , ' ms ' )
2019-05-14 10:53:58 -07:00
sysinfo = find_in_html ( html , ' <div class= " stamp sysinfo " > ' , ' </div> ' )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
line = find_in_html ( html , ' <div class= " stamp " > ' , ' </div> ' )
stmp = line . split ( )
if not suspend or not resume or len ( stmp ) != 8 :
return False
try :
dt = datetime . strptime ( ' ' . join ( stmp [ 3 : ] ) , ' % B %d % Y, % I: % M: % S % p ' )
except :
return False
2019-05-14 10:53:57 -07:00
sysvals . hostname = stmp [ 0 ]
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
tstr = dt . strftime ( ' % Y/ % m/ %d % H: % M: % S ' )
error = find_in_html ( html , ' <table class= " testfail " ><tr><td> ' , ' </td> ' )
if error :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
m = re . match ( ' [a-z0-9]* failed in (?P<p> \ S*).* ' , error )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if m :
result = ' fail in %s ' % m . group ( ' p ' )
else :
result = ' fail '
else :
result = ' pass '
2019-05-14 10:53:57 -07:00
# extract error info
2020-07-20 18:02:49 -07:00
tp , ilist = False , [ ]
2019-05-14 10:53:58 -07:00
extra = dict ( )
2019-05-14 10:53:57 -07:00
log = find_in_html ( html , ' <div id= " dmesglog " style= " display:none; " > ' ,
' </div> ' ) . strip ( )
if log :
d = Data ( 0 )
d . end = 999999999
d . dmesgtext = log . split ( ' \n ' )
2020-07-20 18:02:49 -07:00
tp = d . extractErrorInfo ( )
for msg in tp . msglist :
2019-05-14 10:53:58 -07:00
sysvals . errorSummary ( issues , msg )
if stmp [ 2 ] == ' freeze ' :
extra = d . turbostatInfo ( )
2019-05-14 10:53:57 -07:00
elist = dict ( )
for dir in d . errorinfo :
for err in d . errorinfo [ dir ] :
if err [ 0 ] not in elist :
elist [ err [ 0 ] ] = 0
elist [ err [ 0 ] ] + = 1
for i in elist :
ilist . append ( ' %s x %d ' % ( i , elist [ i ] ) if elist [ i ] > 1 else i )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
wifi = find_in_html ( html , ' Wifi Resume: ' , ' </td> ' )
if wifi :
extra [ ' wifi ' ] = wifi
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
low = find_in_html ( html , ' freeze time: <b> ' , ' ms</b> ' )
2020-11-10 18:36:17 -08:00
for lowstr in [ ' waking ' , ' + ' ] :
if not low :
break
if lowstr not in low :
continue
if lowstr == ' + ' :
issue = ' S2LOOPx %d ' % len ( low . split ( ' + ' ) )
else :
m = re . match ( ' .*waking *(?P<n>[0-9]*) *times.* ' , low )
issue = ' S2WAKEx %s ' % m . group ( ' n ' ) if m else ' S2WAKExNaN '
2019-05-14 10:53:57 -07:00
match = [ i for i in issues if i [ ' match ' ] == issue ]
if len ( match ) > 0 :
match [ 0 ] [ ' count ' ] + = 1
if sysvals . hostname not in match [ 0 ] [ ' urls ' ] :
2019-05-14 10:53:58 -07:00
match [ 0 ] [ ' urls ' ] [ sysvals . hostname ] = [ sysvals . htmlfile ]
elif sysvals . htmlfile not in match [ 0 ] [ ' urls ' ] [ sysvals . hostname ] :
match [ 0 ] [ ' urls ' ] [ sysvals . hostname ] . append ( sysvals . htmlfile )
2019-05-14 10:53:57 -07:00
else :
issues . append ( {
' match ' : issue , ' count ' : 1 , ' line ' : issue ,
2019-05-14 10:53:58 -07:00
' urls ' : { sysvals . hostname : [ sysvals . htmlfile ] } ,
2019-05-14 10:53:57 -07:00
} )
ilist . append ( issue )
# extract device info
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
devices = dict ( )
for line in html . split ( ' \n ' ) :
m = re . match ( ' *<div id= \" [a,0-9]* \" *title= \" (?P<title>.*) \" class= \" thread.* ' , line )
if not m or ' thread kth ' in line or ' thread sec ' in line :
continue
m = re . match ( ' (?P<n>.*) \ ((?P<t>[0-9, \ .]*) ms \ ) (?P<p>.*) ' , m . group ( ' title ' ) )
if not m :
continue
name , time , phase = m . group ( ' n ' ) , m . group ( ' t ' ) , m . group ( ' p ' )
if ' async ' in name or ' sync ' in name :
name = ' ' . join ( name . split ( ' ' ) [ : - 1 ] )
2019-05-14 10:53:57 -07:00
if phase . startswith ( ' suspend ' ) :
d = ' suspend '
elif phase . startswith ( ' resume ' ) :
d = ' resume '
else :
continue
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if d not in devices :
devices [ d ] = dict ( )
if name not in devices [ d ] :
devices [ d ] [ name ] = 0.0
devices [ d ] [ name ] + = float ( time )
2019-05-14 10:53:57 -07:00
# create worst device info
worst = dict ( )
for d in [ ' suspend ' , ' resume ' ] :
worst [ d ] = { ' name ' : ' ' , ' time ' : 0.0 }
dev = devices [ d ] if d in devices else 0
if dev and len ( dev . keys ( ) ) > 0 :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
n = sorted ( dev , key = lambda k : ( dev [ k ] , k ) , reverse = True ) [ 0 ]
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
worst [ d ] [ ' name ' ] , worst [ d ] [ ' time ' ] = n , dev [ n ]
data = {
' mode ' : stmp [ 2 ] ,
' host ' : stmp [ 0 ] ,
' kernel ' : stmp [ 1 ] ,
2019-05-14 10:53:58 -07:00
' sysinfo ' : sysinfo ,
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
' time ' : tstr ,
' result ' : result ,
' issues ' : ' ' . join ( ilist ) ,
' suspend ' : suspend ,
' resume ' : resume ,
2019-05-14 10:53:57 -07:00
' devlist ' : devices ,
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
' sus_worst ' : worst [ ' suspend ' ] [ ' name ' ] ,
' sus_worsttime ' : worst [ ' suspend ' ] [ ' time ' ] ,
' res_worst ' : worst [ ' resume ' ] [ ' name ' ] ,
' res_worsttime ' : worst [ ' resume ' ] [ ' time ' ] ,
2019-05-14 10:53:57 -07:00
' url ' : sysvals . htmlfile ,
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
}
2019-05-14 10:53:58 -07:00
for key in extra :
data [ key ] = extra [ key ]
if fulldetail :
data [ ' funclist ' ] = find_in_html ( html , ' <div title= " ' , ' " class= " traceevent " ' , False )
2020-07-20 18:02:49 -07:00
if tp :
for arg in [ ' -multi ' , ' -info ' ] :
if arg in tp . cmdline :
data [ ' target ' ] = tp . cmdline [ tp . cmdline . find ( arg ) : ] . split ( ) [ 1 ]
break
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
return data
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
def genHtml ( subdir , force = False ) :
2019-05-14 10:53:58 -07:00
for dirname , dirnames , filenames in os . walk ( subdir ) :
sysvals . dmesgfile = sysvals . ftracefile = sysvals . htmlfile = ' '
for filename in filenames :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
file = os . path . join ( dirname , filename )
if sysvals . usable ( file ) :
if ( re . match ( ' .*_dmesg.txt ' , filename ) ) :
sysvals . dmesgfile = file
elif ( re . match ( ' .*_ftrace.txt ' , filename ) ) :
sysvals . ftracefile = file
2019-05-14 10:53:58 -07:00
sysvals . setOutputFile ( )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if ( sysvals . dmesgfile or sysvals . ftracefile ) and sysvals . htmlfile and \
( force or not sysvals . usable ( sysvals . htmlfile ) ) :
2019-05-14 10:53:58 -07:00
pprint ( ' FTRACE: %s ' % sysvals . ftracefile )
if sysvals . dmesgfile :
pprint ( ' DMESG : %s ' % sysvals . dmesgfile )
rerunTest ( )
2014-08-08 09:11:59 -07:00
# Function: runSummary
# Description:
# create a summary of tests in a sub-directory
2018-05-24 09:36:28 -07:00
def runSummary ( subdir , local = True , genhtml = False ) :
2017-04-07 11:05:35 -07:00
inpath = os . path . abspath ( subdir )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
outpath = os . path . abspath ( ' . ' ) if local else inpath
2019-05-14 10:53:57 -07:00
pprint ( ' Generating a summary of folder: \n %s ' % inpath )
2018-05-24 09:36:28 -07:00
if genhtml :
2019-05-14 10:53:58 -07:00
genHtml ( subdir )
2020-07-20 18:02:49 -07:00
target , issues , testruns = ' ' , [ ] , [ ]
2018-10-08 15:56:32 -07:00
desc = { ' host ' : [ ] , ' mode ' : [ ] , ' kernel ' : [ ] }
2014-08-08 09:11:59 -07:00
for dirname , dirnames , filenames in os . walk ( subdir ) :
for filename in filenames :
2017-04-07 11:05:35 -07:00
if ( not re . match ( ' .*.html ' , filename ) ) :
2014-08-08 09:11:59 -07:00
continue
2019-05-14 10:53:57 -07:00
data = data_from_html ( os . path . join ( dirname , filename ) , outpath , issues )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if ( not data ) :
2017-04-07 11:05:35 -07:00
continue
2020-07-20 18:02:49 -07:00
if ' target ' in data :
target = data [ ' target ' ]
2017-04-07 11:05:35 -07:00
testruns . append ( data )
2018-10-08 15:56:32 -07:00
for key in desc :
if data [ key ] not in desc [ key ] :
desc [ key ] . append ( data [ key ] )
2019-05-14 10:53:57 -07:00
pprint ( ' Summary files: ' )
2018-10-08 15:56:32 -07:00
if len ( desc [ ' host ' ] ) == len ( desc [ ' mode ' ] ) == len ( desc [ ' kernel ' ] ) == 1 :
title = ' %s %s %s ' % ( desc [ ' host ' ] [ 0 ] , desc [ ' kernel ' ] [ 0 ] , desc [ ' mode ' ] [ 0 ] )
2020-07-20 18:02:49 -07:00
if target :
title + = ' %s ' % target
2018-10-08 15:56:32 -07:00
else :
title = inpath
2019-05-14 10:53:57 -07:00
createHTMLSummarySimple ( testruns , os . path . join ( outpath , ' summary.html ' ) , title )
pprint ( ' summary.html - tabular list of test data found ' )
createHTMLDeviceSummary ( testruns , os . path . join ( outpath , ' summary-devices.html ' ) , title )
pprint ( ' summary-devices.html - kernel device list sorted by total execution time ' )
2019-05-14 10:53:58 -07:00
createHTMLIssuesSummary ( testruns , issues , os . path . join ( outpath , ' summary-issues.html ' ) , title )
2019-05-14 10:53:57 -07:00
pprint ( ' summary-issues.html - kernel issues found sorted by frequency ' )
2014-08-08 09:11:59 -07:00
2016-07-15 23:34:14 +02:00
# Function: checkArgBool
# Description:
# check if a boolean string value is true or false
2018-01-30 00:17:20 -08:00
def checkArgBool ( name , value ) :
if value in switchvalues :
if value in switchoff :
return False
2016-07-15 23:34:14 +02:00
return True
2018-01-30 00:17:20 -08:00
doError ( ' invalid boolean --> ( %s : %s ), use " true/false " or " 1/0 " ' % ( name , value ) , True )
2016-07-15 23:34:14 +02:00
return False
# Function: configFromFile
# Description:
# Configure the script via the info in a config file
def configFromFile ( file ) :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
Config = configparser . ConfigParser ( )
2016-07-15 23:34:14 +02:00
Config . read ( file )
sections = Config . sections ( )
2016-12-14 10:37:06 -08:00
overridekprobes = False
overridedevkprobes = False
2016-07-15 23:34:14 +02:00
if ' Settings ' in sections :
for opt in Config . options ( ' Settings ' ) :
value = Config . get ( ' Settings ' , opt ) . lower ( )
2018-01-30 00:17:20 -08:00
option = opt . lower ( )
if ( option == ' verbose ' ) :
sysvals . verbose = checkArgBool ( option , value )
elif ( option == ' addlogs ' ) :
sysvals . dmesglog = sysvals . ftracelog = checkArgBool ( option , value )
elif ( option == ' dev ' ) :
sysvals . usedevsrc = checkArgBool ( option , value )
elif ( option == ' proc ' ) :
sysvals . useprocmon = checkArgBool ( option , value )
elif ( option == ' x2 ' ) :
if checkArgBool ( option , value ) :
2016-07-15 23:34:14 +02:00
sysvals . execcount = 2
2018-01-30 00:17:20 -08:00
elif ( option == ' callgraph ' ) :
sysvals . usecallgraph = checkArgBool ( option , value )
elif ( option == ' override-timeline-functions ' ) :
overridekprobes = checkArgBool ( option , value )
elif ( option == ' override-dev-timeline-functions ' ) :
overridedevkprobes = checkArgBool ( option , value )
elif ( option == ' skiphtml ' ) :
sysvals . skiphtml = checkArgBool ( option , value )
elif ( option == ' sync ' ) :
sysvals . sync = checkArgBool ( option , value )
elif ( option == ' rs ' or option == ' runtimesuspend ' ) :
if value in switchvalues :
if value in switchoff :
sysvals . rs = - 1
else :
sysvals . rs = 1
else :
doError ( ' invalid value --> ( %s : %s ), use " enable/disable " ' % ( option , value ) , True )
elif ( option == ' display ' ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
disopt = [ ' on ' , ' off ' , ' standby ' , ' suspend ' ]
if value not in disopt :
doError ( ' invalid value --> ( %s : %s ), use %s ' % ( option , value , disopt ) , True )
sysvals . display = value
2018-01-30 00:17:20 -08:00
elif ( option == ' gzip ' ) :
sysvals . gzip = checkArgBool ( option , value )
elif ( option == ' cgfilter ' ) :
sysvals . setCallgraphFilter ( value )
elif ( option == ' cgskip ' ) :
if value in switchoff :
sysvals . cgskip = ' '
else :
sysvals . cgskip = sysvals . configFile ( val )
if ( not sysvals . cgskip ) :
doError ( ' %s does not exist ' % sysvals . cgskip )
elif ( option == ' cgtest ' ) :
sysvals . cgtest = getArgInt ( ' cgtest ' , value , 0 , 1 , False )
elif ( option == ' cgphase ' ) :
d = Data ( 0 )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if value not in d . phasedef :
2018-01-30 00:17:20 -08:00
doError ( ' invalid phase --> ( %s : %s ), valid phases are %s ' \
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
% ( option , value , d . phasedef . keys ( ) ) , True )
2018-01-30 00:17:20 -08:00
sysvals . cgphase = value
elif ( option == ' fadd ' ) :
file = sysvals . configFile ( value )
if ( not file ) :
doError ( ' %s does not exist ' % value )
sysvals . addFtraceFilterFunctions ( file )
elif ( option == ' result ' ) :
sysvals . result = value
elif ( option == ' multi ' ) :
nums = value . split ( )
if len ( nums ) != 2 :
doError ( ' multi requires 2 integers (exec_count and delay) ' , True )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
sysvals . multiinit ( nums [ 0 ] , nums [ 1 ] )
2018-01-30 00:17:20 -08:00
elif ( option == ' devicefilter ' ) :
2016-12-14 10:37:05 -08:00
sysvals . setDeviceFilter ( value )
2018-01-30 00:17:20 -08:00
elif ( option == ' expandcg ' ) :
sysvals . cgexp = checkArgBool ( option , value )
elif ( option == ' srgap ' ) :
if checkArgBool ( option , value ) :
2016-07-15 23:34:14 +02:00
sysvals . srgap = 5
2018-01-30 00:17:20 -08:00
elif ( option == ' mode ' ) :
2016-07-15 23:34:14 +02:00
sysvals . suspendmode = value
2018-01-30 00:17:20 -08:00
elif ( option == ' command ' or option == ' cmd ' ) :
2016-07-15 23:34:14 +02:00
sysvals . testcommand = value
2018-01-30 00:17:20 -08:00
elif ( option == ' x2delay ' ) :
sysvals . x2delay = getArgInt ( ' x2delay ' , value , 0 , 60000 , False )
elif ( option == ' predelay ' ) :
sysvals . predelay = getArgInt ( ' predelay ' , value , 0 , 60000 , False )
elif ( option == ' postdelay ' ) :
sysvals . postdelay = getArgInt ( ' postdelay ' , value , 0 , 60000 , False )
elif ( option == ' maxdepth ' ) :
sysvals . max_graph_depth = getArgInt ( ' maxdepth ' , value , 0 , 1000 , False )
elif ( option == ' rtcwake ' ) :
if value in switchoff :
2017-04-07 11:05:35 -07:00
sysvals . rtcwake = False
else :
sysvals . rtcwake = True
2018-01-30 00:17:20 -08:00
sysvals . rtcwaketime = getArgInt ( ' rtcwake ' , value , 0 , 3600 , False )
elif ( option == ' timeprec ' ) :
sysvals . setPrecision ( getArgInt ( ' timeprec ' , value , 0 , 6 , False ) )
elif ( option == ' mindev ' ) :
sysvals . mindevlen = getArgFloat ( ' mindev ' , value , 0.0 , 10000.0 , False )
elif ( option == ' callloop-maxgap ' ) :
sysvals . callloopmaxgap = getArgFloat ( ' callloop-maxgap ' , value , 0.0 , 1.0 , False )
elif ( option == ' callloop-maxlen ' ) :
sysvals . callloopmaxgap = getArgFloat ( ' callloop-maxlen ' , value , 0.0 , 1.0 , False )
elif ( option == ' mincg ' ) :
sysvals . mincglen = getArgFloat ( ' mincg ' , value , 0.0 , 10000.0 , False )
elif ( option == ' bufsize ' ) :
sysvals . bufsize = getArgInt ( ' bufsize ' , value , 1 , 1024 * 1024 * 8 , False )
elif ( option == ' output-dir ' ) :
sysvals . outdir = sysvals . setOutputFolder ( value )
2016-07-15 23:34:14 +02:00
if sysvals . suspendmode == ' command ' and not sysvals . testcommand :
2016-12-14 10:37:07 -08:00
doError ( ' No command supplied for mode " command " ' )
2016-12-14 10:37:05 -08:00
# compatibility errors
2016-07-15 23:34:14 +02:00
if sysvals . usedevsrc and sysvals . usecallgraph :
2016-12-14 10:37:07 -08:00
doError ( ' -dev is not compatible with -f ' )
2016-12-14 10:37:05 -08:00
if sysvals . usecallgraph and sysvals . useprocmon :
2016-12-14 10:37:07 -08:00
doError ( ' -proc is not compatible with -f ' )
2016-07-15 23:34:14 +02:00
2016-12-14 10:37:06 -08:00
if overridekprobes :
sysvals . tracefuncs = dict ( )
if overridedevkprobes :
sysvals . dev_tracefuncs = dict ( )
2016-07-15 23:34:14 +02:00
kprobes = dict ( )
2016-12-14 10:37:06 -08:00
kprobesec = ' dev_timeline_functions_ ' + platform . machine ( )
if kprobesec in sections :
for name in Config . options ( kprobesec ) :
text = Config . get ( kprobesec , name )
kprobes [ name ] = ( text , True )
kprobesec = ' timeline_functions_ ' + platform . machine ( )
if kprobesec in sections :
for name in Config . options ( kprobesec ) :
if name in kprobes :
2016-12-14 10:37:07 -08:00
doError ( ' Duplicate timeline function found " %s " ' % ( name ) )
2016-12-14 10:37:06 -08:00
text = Config . get ( kprobesec , name )
kprobes [ name ] = ( text , False )
2016-07-15 23:34:14 +02:00
for name in kprobes :
function = name
format = name
color = ' '
args = dict ( )
2016-12-14 10:37:06 -08:00
text , dev = kprobes [ name ]
data = text . split ( )
2016-07-15 23:34:14 +02:00
i = 0
for val in data :
# bracketted strings are special formatting, read them separately
if val [ 0 ] == ' [ ' and val [ - 1 ] == ' ] ' :
for prop in val [ 1 : - 1 ] . split ( ' , ' ) :
p = prop . split ( ' = ' )
if p [ 0 ] == ' color ' :
try :
color = int ( p [ 1 ] , 16 )
color = ' # ' + p [ 1 ]
except :
color = p [ 1 ]
continue
# first real arg should be the format string
if i == 0 :
format = val
# all other args are actual function args
else :
d = val . split ( ' = ' )
args [ d [ 0 ] ] = d [ 1 ]
i + = 1
if not function or not format :
2016-12-14 10:37:07 -08:00
doError ( ' Invalid kprobe: %s ' % name )
2016-07-15 23:34:14 +02:00
for arg in re . findall ( ' { (?P<n>[a-z,A-Z,0-9]*)} ' , format ) :
if arg not in args :
2016-12-14 10:37:07 -08:00
doError ( ' Kprobe " %s " is missing argument " %s " ' % ( name , arg ) )
2016-12-14 10:37:06 -08:00
if ( dev and name in sysvals . dev_tracefuncs ) or ( not dev and name in sysvals . tracefuncs ) :
2016-12-14 10:37:07 -08:00
doError ( ' Duplicate timeline function found " %s " ' % ( name ) )
2016-12-14 10:37:06 -08:00
kp = {
2016-07-15 23:34:14 +02:00
' name ' : name ,
' func ' : function ,
' format ' : format ,
2016-12-14 10:37:06 -08:00
sysvals . archargs : args
2016-07-15 23:34:14 +02:00
}
if color :
2016-12-14 10:37:06 -08:00
kp [ ' color ' ] = color
if dev :
sysvals . dev_tracefuncs [ name ] = kp
else :
sysvals . tracefuncs [ name ] = kp
2016-07-15 23:34:14 +02:00
2014-08-08 09:11:59 -07:00
# Function: printHelp
# Description:
# print out the help text
def printHelp ( ) :
2018-10-08 15:56:32 -07:00
pprint ( ' \n %s v %s \n ' \
' Usage: sudo sleepgraph <options> <commands> \n ' \
' \n ' \
' Description: \n ' \
' This tool is designed to assist kernel and OS developers in optimizing \n ' \
' their linux stack \' s suspend/resume time. Using a kernel image built \n ' \
' with a few extra options enabled, the tool will execute a suspend and \n ' \
' capture dmesg and ftrace data until resume is complete. This data is \n ' \
' transformed into a device timeline and an optional callgraph to give \n ' \
' a detailed view of which devices/subsystems are taking the most \n ' \
' time in suspend/resume. \n ' \
' \n ' \
' If no specific command is given, the default behavior is to initiate \n ' \
' a suspend/resume and capture the dmesg/ftrace output as an html timeline. \n ' \
' \n ' \
' Generates output files in subdirectory: suspend-yymmdd-HHMMSS \n ' \
' HTML output: <hostname>_<mode>.html \n ' \
' raw dmesg output: <hostname>_<mode>_dmesg.txt \n ' \
' raw ftrace output: <hostname>_<mode>_ftrace.txt \n ' \
' \n ' \
' Options: \n ' \
' -h Print this help text \n ' \
' -v Print the current tool version \n ' \
' -config fn Pull arguments and config options from file fn \n ' \
' -verbose Print extra information during execution and analysis \n ' \
' -m mode Mode to initiate for suspend (default: %s ) \n ' \
' -o name Overrides the output subdirectory name when running a new test \n ' \
' default: suspend- {date} - {time} \n ' \
' -rtcwake t Wakeup t seconds after suspend, set t to " off " to disable (default: 15) \n ' \
' -addlogs Add the dmesg and ftrace logs to the html output \n ' \
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
' -noturbostat Dont use turbostat in freeze mode (default: disabled) \n ' \
2018-10-08 15:56:32 -07:00
' -srgap Add a visible gap in the timeline between sus/res (default: disabled) \n ' \
' -skiphtml Run the test and capture the trace logs, but skip the timeline (default: disabled) \n ' \
' -result fn Export a results table to a text file for parsing. \n ' \
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
' -wifi If a wifi connection is available, check that it reconnects after resume. \n ' \
2018-10-08 15:56:32 -07:00
' [testprep] \n ' \
' -sync Sync the filesystems before starting the test \n ' \
' -rs on/off Enable/disable runtime suspend for all devices, restore all after test \n ' \
' -display m Change the display mode to m for the test (on/off/standby/suspend) \n ' \
' [advanced] \n ' \
' -gzip Gzip the trace and dmesg logs to save space \n ' \
' -cmd {s} Run the timeline over a custom command, e.g. " sync -d " \n ' \
' -proc Add usermode process info into the timeline (default: disabled) \n ' \
' -dev Add kernel function calls and threads to the timeline (default: disabled) \n ' \
' -x2 Run two suspend/resumes back to back (default: disabled) \n ' \
' -x2delay t Include t ms delay between multiple test runs (default: 0 ms) \n ' \
' -predelay t Include t ms delay before 1st suspend (default: 0 ms) \n ' \
' -postdelay t Include t ms delay after last resume (default: 0 ms) \n ' \
' -mindev ms Discard all device blocks shorter than ms milliseconds (e.g. 0.001 for us) \n ' \
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
' -multi n d Execute <n> consecutive tests at <d> seconds intervals. If <n> is followed \n ' \
' by a " d " , " h " , or " m " execute for <n> days, hours, or mins instead. \n ' \
' The outputs will be created in a new subdirectory with a summary page. \n ' \
' -maxfail n Abort a -multi run after n consecutive fails (default is 0 = never abort) \n ' \
2018-10-08 15:56:32 -07:00
' [debug] \n ' \
' -f Use ftrace to create device callgraphs (default: disabled) \n ' \
2019-05-14 10:53:58 -07:00
' -ftop Use ftrace on the top level call: " %s " (default: disabled) \n ' \
2018-10-08 15:56:32 -07:00
' -maxdepth N limit the callgraph data to N call levels (default: 0=all) \n ' \
' -expandcg pre-expand the callgraph data in the html output (default: disabled) \n ' \
' -fadd file Add functions to be graphed in the timeline from a list in a text file \n ' \
' -filter " d1,d2,... " Filter out all but this comma-delimited list of device names \n ' \
' -mincg ms Discard all callgraphs shorter than ms milliseconds (e.g. 0.001 for us) \n ' \
' -cgphase P Only show callgraph data for phase P (e.g. suspend_late) \n ' \
' -cgtest N Only show callgraph data for test N (e.g. 0 or 1 in an x2 run) \n ' \
' -timeprec N Number of significant digits in timestamps (0:S, [3:ms], 6:us) \n ' \
' -cgfilter S Filter the callgraph output in the timeline \n ' \
' -cgskip file Callgraph functions to skip, off to disable (default: cgskip.txt) \n ' \
' -bufsize N Set trace buffer size to N kilo-bytes (default: all of free memory) \n ' \
' -devdump Print out all the raw device data for each phase \n ' \
' -cgdump Print out all the raw callgraph data \n ' \
' \n ' \
' Other commands: \n ' \
' -modes List available suspend modes \n ' \
' -status Test to see if the system is enabled to run this tool \n ' \
' -fpdt Print out the contents of the ACPI Firmware Performance Data Table \n ' \
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
' -wificheck Print out wifi connection info \n ' \
2018-10-08 15:56:32 -07:00
' -x<mode> Test xset by toggling the given mode (on/off/standby/suspend) \n ' \
' -sysinfo Print out system info extracted from BIOS \n ' \
' -devinfo Print out the pm settings of all devices which support runtime suspend \n ' \
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
' -cmdinfo Print out all the platform info collected before and after suspend/resume \n ' \
2018-10-08 15:56:32 -07:00
' -flist Print the list of functions currently being captured in ftrace \n ' \
' -flistall Print all functions capable of being captured in ftrace \n ' \
' -summary dir Create a summary of tests in this dir [-genhtml builds missing html] \n ' \
' [redo] \n ' \
' -ftrace ftracefile Create HTML output using ftrace input (used with -dmesg) \n ' \
' -dmesg dmesgfile Create HTML output using dmesg (used with -ftrace) \n ' \
2019-05-14 10:53:58 -07:00
' ' % ( sysvals . title , sysvals . version , sysvals . suspendmode , sysvals . ftopfunc ) )
2014-08-08 09:11:59 -07:00
return True
2014-01-16 16:18:22 -08:00
2014-08-08 09:11:59 -07:00
# ----------------- MAIN --------------------
# exec start (skipped if script is loaded as library)
if __name__ == ' __main__ ' :
2018-05-24 09:36:28 -07:00
genhtml = False
2014-08-08 09:11:59 -07:00
cmd = ' '
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
simplecmds = [ ' -sysinfo ' , ' -modes ' , ' -fpdt ' , ' -flist ' , ' -flistall ' ,
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
' -devinfo ' , ' -status ' , ' -xon ' , ' -xoff ' , ' -xstandby ' , ' -xsuspend ' ,
' -xinit ' , ' -xreset ' , ' -xstat ' , ' -wificheck ' , ' -cmdinfo ' ]
2018-01-30 00:17:20 -08:00
if ' -f ' in sys . argv :
sysvals . cgskip = sysvals . configFile ( ' cgskip.txt ' )
2014-08-08 09:11:59 -07:00
# loop through the command line arguments
args = iter ( sys . argv [ 1 : ] )
for arg in args :
if ( arg == ' -m ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2014-08-08 09:11:59 -07:00
except :
doError ( ' No mode supplied ' , True )
2016-07-15 23:34:14 +02:00
if val == ' command ' and not sysvals . testcommand :
doError ( ' No command supplied for mode " command " ' , True )
2014-08-08 09:11:59 -07:00
sysvals . suspendmode = val
2016-07-15 23:34:14 +02:00
elif ( arg in simplecmds ) :
cmd = arg [ 1 : ]
elif ( arg == ' -h ' ) :
printHelp ( )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sys . exit ( 0 )
2016-07-15 23:34:14 +02:00
elif ( arg == ' -v ' ) :
2018-10-08 15:56:32 -07:00
pprint ( " Version %s " % sysvals . version )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sys . exit ( 0 )
2014-08-08 09:11:59 -07:00
elif ( arg == ' -x2 ' ) :
sysvals . execcount = 2
elif ( arg == ' -x2delay ' ) :
sysvals . x2delay = getArgInt ( ' -x2delay ' , args , 0 , 60000 )
2016-12-14 10:37:05 -08:00
elif ( arg == ' -predelay ' ) :
sysvals . predelay = getArgInt ( ' -predelay ' , args , 0 , 60000 )
elif ( arg == ' -postdelay ' ) :
sysvals . postdelay = getArgInt ( ' -postdelay ' , args , 0 , 60000 )
2014-08-08 09:11:59 -07:00
elif ( arg == ' -f ' ) :
sysvals . usecallgraph = True
2019-05-14 10:53:58 -07:00
elif ( arg == ' -ftop ' ) :
sysvals . usecallgraph = True
sysvals . ftop = True
sysvals . usekprobes = False
2018-01-30 00:17:20 -08:00
elif ( arg == ' -skiphtml ' ) :
sysvals . skiphtml = True
elif ( arg == ' -cgdump ' ) :
sysvals . cgdump = True
2018-10-08 15:56:32 -07:00
elif ( arg == ' -devdump ' ) :
sysvals . devdump = True
2018-05-24 09:36:28 -07:00
elif ( arg == ' -genhtml ' ) :
genhtml = True
2016-07-15 23:34:14 +02:00
elif ( arg == ' -addlogs ' ) :
2017-07-05 14:42:55 -07:00
sysvals . dmesglog = sysvals . ftracelog = True
2019-05-14 10:53:58 -07:00
elif ( arg == ' -nologs ' ) :
sysvals . dmesglog = sysvals . ftracelog = False
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
elif ( arg == ' -addlogdmesg ' ) :
sysvals . dmesglog = True
elif ( arg == ' -addlogftrace ' ) :
sysvals . ftracelog = True
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
elif ( arg == ' -noturbostat ' ) :
sysvals . tstat = False
2014-08-08 09:11:59 -07:00
elif ( arg == ' -verbose ' ) :
sysvals . verbose = True
2016-12-14 10:37:05 -08:00
elif ( arg == ' -proc ' ) :
sysvals . useprocmon = True
2016-07-15 23:34:14 +02:00
elif ( arg == ' -dev ' ) :
sysvals . usedevsrc = True
2018-01-30 00:17:20 -08:00
elif ( arg == ' -sync ' ) :
sysvals . sync = True
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
elif ( arg == ' -wifi ' ) :
sysvals . wifi = True
2018-01-30 00:17:20 -08:00
elif ( arg == ' -gzip ' ) :
sysvals . gzip = True
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
elif ( arg == ' -info ' ) :
try :
val = next ( args )
except :
doError ( ' -info requires one string argument ' , True )
2020-11-10 18:36:17 -08:00
elif ( arg == ' -desc ' ) :
try :
val = next ( args )
except :
doError ( ' -desc requires one string argument ' , True )
2018-01-30 00:17:20 -08:00
elif ( arg == ' -rs ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2018-01-30 00:17:20 -08:00
except :
doError ( ' -rs requires " enable " or " disable " ' , True )
if val . lower ( ) in switchvalues :
if val . lower ( ) in switchoff :
sysvals . rs = - 1
else :
sysvals . rs = 1
else :
doError ( ' invalid option: %s , use " enable/disable " or " on/off " ' % val , True )
elif ( arg == ' -display ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2018-01-30 00:17:20 -08:00
except :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
doError ( ' -display requires an mode value ' , True )
disopt = [ ' on ' , ' off ' , ' standby ' , ' suspend ' ]
if val . lower ( ) not in disopt :
doError ( ' valid display mode values are %s ' % disopt , True )
sysvals . display = val . lower ( )
2017-04-07 11:05:35 -07:00
elif ( arg == ' -maxdepth ' ) :
sysvals . max_graph_depth = getArgInt ( ' -maxdepth ' , args , 0 , 1000 )
2014-08-08 09:11:59 -07:00
elif ( arg == ' -rtcwake ' ) :
2017-04-07 11:05:35 -07:00
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2017-04-07 11:05:35 -07:00
except :
doError ( ' No rtcwake time supplied ' , True )
2018-01-30 00:17:20 -08:00
if val . lower ( ) in switchoff :
2017-04-07 11:05:35 -07:00
sysvals . rtcwake = False
else :
sysvals . rtcwake = True
sysvals . rtcwaketime = getArgInt ( ' -rtcwake ' , val , 0 , 3600 , False )
2016-07-15 23:34:14 +02:00
elif ( arg == ' -timeprec ' ) :
sysvals . setPrecision ( getArgInt ( ' -timeprec ' , args , 0 , 6 ) )
elif ( arg == ' -mindev ' ) :
sysvals . mindevlen = getArgFloat ( ' -mindev ' , args , 0.0 , 10000.0 )
elif ( arg == ' -mincg ' ) :
sysvals . mincglen = getArgFloat ( ' -mincg ' , args , 0.0 , 10000.0 )
2018-01-30 00:17:20 -08:00
elif ( arg == ' -bufsize ' ) :
sysvals . bufsize = getArgInt ( ' -bufsize ' , args , 1 , 1024 * 1024 * 8 )
2016-12-14 10:37:07 -08:00
elif ( arg == ' -cgtest ' ) :
sysvals . cgtest = getArgInt ( ' -cgtest ' , args , 0 , 1 )
elif ( arg == ' -cgphase ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2016-12-14 10:37:07 -08:00
except :
doError ( ' No phase name supplied ' , True )
d = Data ( 0 )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if val not in d . phasedef :
2018-01-30 00:17:20 -08:00
doError ( ' invalid phase --> ( %s : %s ), valid phases are %s ' \
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
% ( arg , val , d . phasedef . keys ( ) ) , True )
2016-12-14 10:37:07 -08:00
sysvals . cgphase = val
2018-01-30 00:17:20 -08:00
elif ( arg == ' -cgfilter ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2018-01-30 00:17:20 -08:00
except :
doError ( ' No callgraph functions supplied ' , True )
sysvals . setCallgraphFilter ( val )
2019-05-14 10:53:58 -07:00
elif ( arg == ' -skipkprobe ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2019-05-14 10:53:58 -07:00
except :
doError ( ' No kprobe functions supplied ' , True )
sysvals . skipKprobes ( val )
2018-01-30 00:17:20 -08:00
elif ( arg == ' -cgskip ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2018-01-30 00:17:20 -08:00
except :
doError ( ' No file supplied ' , True )
if val . lower ( ) in switchoff :
sysvals . cgskip = ' '
else :
sysvals . cgskip = sysvals . configFile ( val )
if ( not sysvals . cgskip ) :
doError ( ' %s does not exist ' % sysvals . cgskip )
2016-12-14 10:37:06 -08:00
elif ( arg == ' -callloop-maxgap ' ) :
sysvals . callloopmaxgap = getArgFloat ( ' -callloop-maxgap ' , args , 0.0 , 1.0 )
elif ( arg == ' -callloop-maxlen ' ) :
sysvals . callloopmaxlen = getArgFloat ( ' -callloop-maxlen ' , args , 0.0 , 1.0 )
2016-07-15 23:34:14 +02:00
elif ( arg == ' -cmd ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2016-07-15 23:34:14 +02:00
except :
doError ( ' No command string supplied ' , True )
sysvals . testcommand = val
sysvals . suspendmode = ' command '
elif ( arg == ' -expandcg ' ) :
sysvals . cgexp = True
elif ( arg == ' -srgap ' ) :
sysvals . srgap = 5
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
elif ( arg == ' -maxfail ' ) :
sysvals . maxfail = getArgInt ( ' -maxfail ' , args , 0 , 1000000 )
2014-08-08 09:11:59 -07:00
elif ( arg == ' -multi ' ) :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
try :
c , d = next ( args ) , next ( args )
except :
doError ( ' -multi requires two values ' , True )
sysvals . multiinit ( c , d )
2016-07-15 23:34:14 +02:00
elif ( arg == ' -o ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2016-07-15 23:34:14 +02:00
except :
doError ( ' No subdirectory name supplied ' , True )
2018-01-30 00:17:20 -08:00
sysvals . outdir = sysvals . setOutputFolder ( val )
2016-07-15 23:34:14 +02:00
elif ( arg == ' -config ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2016-07-15 23:34:14 +02:00
except :
doError ( ' No text file supplied ' , True )
2018-01-30 00:17:20 -08:00
file = sysvals . configFile ( val )
if ( not file ) :
2016-12-14 10:37:07 -08:00
doError ( ' %s does not exist ' % val )
2018-01-30 00:17:20 -08:00
configFromFile ( file )
2016-07-15 23:34:14 +02:00
elif ( arg == ' -fadd ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2016-07-15 23:34:14 +02:00
except :
doError ( ' No text file supplied ' , True )
2018-01-30 00:17:20 -08:00
file = sysvals . configFile ( val )
if ( not file ) :
2016-12-14 10:37:07 -08:00
doError ( ' %s does not exist ' % val )
2018-01-30 00:17:20 -08:00
sysvals . addFtraceFilterFunctions ( file )
2014-08-08 09:11:59 -07:00
elif ( arg == ' -dmesg ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2014-08-08 09:11:59 -07:00
except :
doError ( ' No dmesg file supplied ' , True )
sysvals . notestrun = True
sysvals . dmesgfile = val
if ( os . path . exists ( sysvals . dmesgfile ) == False ) :
2016-12-14 10:37:07 -08:00
doError ( ' %s does not exist ' % sysvals . dmesgfile )
2014-08-08 09:11:59 -07:00
elif ( arg == ' -ftrace ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2014-08-08 09:11:59 -07:00
except :
doError ( ' No ftrace file supplied ' , True )
sysvals . notestrun = True
sysvals . ftracefile = val
if ( os . path . exists ( sysvals . ftracefile ) == False ) :
2016-12-14 10:37:07 -08:00
doError ( ' %s does not exist ' % sysvals . ftracefile )
2014-08-08 09:11:59 -07:00
elif ( arg == ' -summary ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2014-08-08 09:11:59 -07:00
except :
doError ( ' No directory supplied ' , True )
cmd = ' summary '
2018-01-30 00:17:20 -08:00
sysvals . outdir = val
2014-08-08 09:11:59 -07:00
sysvals . notestrun = True
if ( os . path . isdir ( val ) == False ) :
2021-03-18 21:22:23 +01:00
doError ( ' %s is not accessible ' % val )
2014-08-08 09:11:59 -07:00
elif ( arg == ' -filter ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2014-08-08 09:11:59 -07:00
except :
doError ( ' No devnames supplied ' , True )
sysvals . setDeviceFilter ( val )
2018-01-30 00:17:20 -08:00
elif ( arg == ' -result ' ) :
try :
pm-graph v5.5
Upgrade bootgraph/sleepgraph to be able to run on python2 and python3.
Both now simply require python, the system can choose which to use.
bootgraph python3 update:
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- open dmesg log and popen in binary, use decode(ascii, ignore)
- sort all html data to allow diff between python versions
- change exception handler to use python3 as instead of comma
sleepgraph python3 update:
- import configparser not ConfigParser (p2 needs python-configparser)
- add floor function to handle integer arithmetic
- change argument loop to use next() instead of args.next()
- handle popen output in binary, use decode(ascii, ignore)
- sort all html/output data to allow diff between python versions
- force gzip open to use text mode, same for file open
- ensure no binary data is written to logs (ascii convert devprops info)
- use codecs library to handle zlib encoding for mcelog data
- remove all uses of python3.7 keyword "async" as members or vars
- assume all FPDT and DMI data is in binary string form
sleepgraph:
- turbostat will be used by default if it's found & the mode is freeze
- a new option "-noturbostat" will disable its use
- fix bug where two callgraphs with the same start time overwrite.
- fix s2idle processing where two suspend/resume_machines occur back2back
- update getexec function to use which first (assuming PATH exists)
- new platforminfo data in log with: lspci, gpe counts, /proc/interrupts
- new data is zipped, b64 encoded, and tacked on the end of ftrace
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-12 14:08:44 -07:00
val = next ( args )
2018-01-30 00:17:20 -08:00
except :
doError ( ' No result file supplied ' , True )
sysvals . result = val
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sysvals . signalHandlerInit ( )
2014-08-08 09:11:59 -07:00
else :
doError ( ' Invalid argument: ' + arg , True )
2016-12-14 10:37:05 -08:00
# compatibility errors
if ( sysvals . usecallgraph and sysvals . usedevsrc ) :
2016-12-14 10:37:07 -08:00
doError ( ' -dev is not compatible with -f ' )
2016-12-14 10:37:05 -08:00
if ( sysvals . usecallgraph and sysvals . useprocmon ) :
2016-12-14 10:37:07 -08:00
doError ( ' -proc is not compatible with -f ' )
2016-12-14 10:37:05 -08:00
2018-01-30 00:17:20 -08:00
if sysvals . usecallgraph and sysvals . cgskip :
sysvals . vprint ( ' Using cgskip file: %s ' % sysvals . cgskip )
sysvals . setCallgraphBlacklist ( sysvals . cgskip )
2016-07-15 23:34:14 +02:00
# callgraph size cannot exceed device size
if sysvals . mincglen < sysvals . mindevlen :
sysvals . mincglen = sysvals . mindevlen
2018-01-30 00:17:20 -08:00
# remove existing buffers before calculating memory
if ( sysvals . usecallgraph or sysvals . usedevsrc ) :
sysvals . fsetVal ( ' 16 ' , ' buffer_size_kb ' )
2017-07-05 14:42:55 -07:00
sysvals . cpuInfo ( )
2018-01-30 00:17:20 -08:00
# just run a utility command and exit
2014-08-08 09:11:59 -07:00
if ( cmd != ' ' ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
ret = 0
2014-08-08 09:11:59 -07:00
if ( cmd == ' status ' ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if not statusCheck ( True ) :
ret = 1
2014-08-08 09:11:59 -07:00
elif ( cmd == ' fpdt ' ) :
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
if not getFPDT ( True ) :
ret = 1
2017-07-05 14:42:55 -07:00
elif ( cmd == ' sysinfo ' ) :
2018-01-30 00:17:20 -08:00
sysvals . printSystemInfo ( True )
elif ( cmd == ' devinfo ' ) :
deviceInfo ( )
2014-08-08 09:11:59 -07:00
elif ( cmd == ' modes ' ) :
2019-05-14 10:53:58 -07:00
pprint ( getModes ( ) )
2016-07-15 23:34:14 +02:00
elif ( cmd == ' flist ' ) :
sysvals . getFtraceFilterFunctions ( True )
elif ( cmd == ' flistall ' ) :
sysvals . getFtraceFilterFunctions ( False )
2014-08-08 09:11:59 -07:00
elif ( cmd == ' summary ' ) :
2018-05-24 09:36:28 -07:00
runSummary ( sysvals . outdir , True , genhtml )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
elif ( cmd in [ ' xon ' , ' xoff ' , ' xstandby ' , ' xsuspend ' , ' xinit ' , ' xreset ' ] ) :
sysvals . verbose = True
2020-11-10 18:36:17 -08:00
ret = sysvals . displayControl ( cmd [ 1 : ] )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
elif ( cmd == ' xstat ' ) :
2020-11-10 18:36:17 -08:00
pprint ( ' Display Status: %s ' % sysvals . displayControl ( ' stat ' ) . upper ( ) )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
elif ( cmd == ' wificheck ' ) :
dev = sysvals . checkWifi ( )
if dev :
print ( ' %s is connected ' % sysvals . wifiDetails ( dev ) )
2019-05-14 10:53:58 -07:00
else :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
print ( ' No wifi connection found ' )
elif ( cmd == ' cmdinfo ' ) :
for out in sysvals . cmdinfo ( False , True ) :
print ( ' [ %s - %s ] \n %s \n ' % out )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sys . exit ( ret )
2014-08-08 09:11:59 -07:00
# if instructed, re-analyze existing data files
if ( sysvals . notestrun ) :
2019-05-14 10:53:58 -07:00
stamp = rerunTest ( sysvals . outdir )
2018-01-30 00:17:20 -08:00
sysvals . outputResult ( stamp )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sys . exit ( 0 )
2014-08-08 09:11:59 -07:00
# verify that we can run a test
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
error = statusCheck ( )
if ( error ) :
doError ( error )
2014-08-08 09:11:59 -07:00
2018-10-08 15:56:32 -07:00
# extract mem/disk extra modes and convert
2017-07-05 14:42:55 -07:00
mode = sysvals . suspendmode
2018-10-08 15:56:32 -07:00
if mode . startswith ( ' mem ' ) :
memmode = mode . split ( ' - ' , 1 ) [ - 1 ] if ' - ' in mode else ' deep '
2017-07-05 14:42:55 -07:00
if memmode == ' shallow ' :
mode = ' standby '
elif memmode == ' s2idle ' :
mode = ' freeze '
else :
mode = ' mem '
sysvals . memmode = memmode
sysvals . suspendmode = mode
2018-10-08 15:56:32 -07:00
if mode . startswith ( ' disk- ' ) :
sysvals . diskmode = mode . split ( ' - ' , 1 ) [ - 1 ]
sysvals . suspendmode = ' disk '
2017-07-05 14:42:55 -07:00
sysvals . systemInfo ( dmidecode ( sysvals . mempath ) )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
failcnt , ret = 0 , 0
2018-01-30 00:17:20 -08:00
if sysvals . multitest [ ' run ' ] :
2016-07-15 23:34:14 +02:00
# run multiple tests in a separate subdirectory
2018-01-30 00:17:20 -08:00
if not sysvals . outdir :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
if ' time ' in sysvals . multitest :
s = ' - %d m ' % sysvals . multitest [ ' time ' ]
else :
s = ' -x %d ' % sysvals . multitest [ ' count ' ]
sysvals . outdir = datetime . now ( ) . strftime ( ' suspend- % y % m %d - % H % M % S ' + s )
2018-01-30 00:17:20 -08:00
if not os . path . isdir ( sysvals . outdir ) :
2019-05-14 10:53:58 -07:00
os . makedirs ( sysvals . outdir )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
sysvals . sudoUserchown ( sysvals . outdir )
finish = datetime . now ( )
if ' time ' in sysvals . multitest :
finish + = timedelta ( minutes = sysvals . multitest [ ' time ' ] )
2018-01-30 00:17:20 -08:00
for i in range ( sysvals . multitest [ ' count ' ] ) :
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
sysvals . multistat ( True , i , finish )
if i != 0 and sysvals . multitest [ ' delay ' ] > 0 :
2018-10-08 15:56:32 -07:00
pprint ( ' Waiting %d seconds... ' % ( sysvals . multitest [ ' delay ' ] ) )
2018-01-30 00:17:20 -08:00
time . sleep ( sysvals . multitest [ ' delay ' ] )
2017-07-05 14:42:55 -07:00
fmt = ' suspend- % y % m %d - % H % M % S '
2018-01-30 00:17:20 -08:00
sysvals . testdir = os . path . join ( sysvals . outdir , datetime . now ( ) . strftime ( fmt ) )
pm-graph v5.6
sleepgraph:
- force usage of python3 instead of using system default
- fix bugzilla 204773 (https://bugzilla.kernel.org/show_bug.cgi?id=204773)
- fix issue of platform info not being reset in -multi (logs fill up)
- change -ftop call to "pm_suspend", this is one level below state_store
- add -wificheck command to read out the current wifi device details
- change -wifi behavior to poll /proc/net/wireless for wifi connect
- add wifi reconnect time to timeline, include time in summary column
- add "fail on wifi_resume" to timeline and summary when wifi fails
- add a set of commands to collect data before/after suspend in the log
- add "-cmdinfo" command which prints out all the data collected
- check for cmd info tools at start, print found/missing in green/red
- fix kernel suspend time calculation: tool used to look for start of
pm_suspend_console, but the order has changed. latest kernel starts
with ksys_sync, use this instead
- include time spent in mem/disk in the header (same as freeze/standby)
- ignore turbostat 32-bit capability warnings
- print to result.txt when -skiphtml is used, just say result: pass
- don't exit on SIGTSTP, it's a ctrl-Z and the tool may come back
- -multi argument supports duration as well as count: hours, minutes, seconds
- update the -multi status output to be more informative
- -maxfail sets maximum consecutive fails before a -multi run is aborted
- in -summary, ignore dmesg/ftrace/html files that are 0 size
bootgraph:
- force usage of python3 instead of using system default
README:
- add endurance testing instructions
Makefile:
- remove pycache on uninstall
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2020-04-08 10:58:19 -07:00
ret = runTest ( i + 1 , True )
failcnt = 0 if not ret else failcnt + 1
if sysvals . maxfail > 0 and failcnt > = sysvals . maxfail :
pprint ( ' Maximum fail count of %d reached, aborting multitest ' % ( sysvals . maxfail ) )
break
time . sleep ( 5 )
sysvals . resetlog ( )
sysvals . multistat ( False , i , finish )
if ' time ' in sysvals . multitest and datetime . now ( ) > = finish :
break
2018-01-30 00:17:20 -08:00
if not sysvals . skiphtml :
2018-05-24 09:36:28 -07:00
runSummary ( sysvals . outdir , False , False )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sysvals . sudoUserchown ( sysvals . outdir )
2014-08-08 09:11:59 -07:00
else :
2018-01-30 00:17:20 -08:00
if sysvals . outdir :
sysvals . testdir = sysvals . outdir
2014-08-08 09:11:59 -07:00
# run the test in the current directory
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
ret = runTest ( )
2020-11-10 18:36:17 -08:00
# reset to default values after testing
2018-01-30 00:17:20 -08:00
if sysvals . display :
2020-11-10 18:36:17 -08:00
sysvals . displayControl ( ' reset ' )
if sysvals . rs != 0 :
sysvals . setRuntimeSuspend ( False )
PM / tools: sleepgraph: first batch of v5.2 changes
general:
- add battery charge data before and after test
- remove special s0i3 handling
- remove melding of dmesg & ftrace data in old kernels, use one only
- updates to various kprobes in trace (ksys_sync, etc)
- enable pm_debug_messages during the test
- instrument more subsystems with dev functions (phy0)
error handling:
- return codes for tool show the status of the test run
- 0: success, 1: general error (no timeline), 2: fail (suspend aborted)
- monitor output of /sys/power/state, mark as failure if exception occurs
- add signal handler when using -result to catch tool exceptions
display control
- add -x commands for testing xset with mode settings and status
- allow display setting to on, off, suspend, standby
- add display mode change info to the log, along with a warning on fail
s2idle (freeze)
- remove fixed 10-phase dependency, allow any phase order & any count
- multiple phase occurences show as phase_nameN e.g. suspend_noirq3
- if multiple freezes occur, print multiple time values in header
summary:
- add new columns to summary output: issues, worst suspend/resume devices
- worst device: includes summation of all phases of suspend or resume
- issues: includes WARNING/ERROR/BUG from dmesg log, and other issues
- s2idle: multiple freezes show as FREEZExN in the issues column
Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2018-10-08 15:56:31 -07:00
sys . exit ( ret )