Merge branch 'bpoirier-guest/linux-buster' into buster
tools/perf: Add python3 support to scripts See merge request kernel-team/linux!184
This commit is contained in:
commit
fc769a9bb3
|
@ -20,6 +20,9 @@ linux (4.19.67-3) UNRELEASED; urgency=medium
|
|||
[ Aurelien Jarno ]
|
||||
* [mips*] tlbex: Fix build_restore_pagemask KScratch restore.
|
||||
|
||||
[ Benjamin Poirier ]
|
||||
* tools/perf: Add python3 support to scripts (Closes: #944641)
|
||||
|
||||
-- Romain Perier <romain.perier@gmail.com> Wed, 28 Aug 2019 13:28:09 +0200
|
||||
|
||||
linux (4.19.67-2+deb10u2) buster-security; urgency=high
|
||||
|
|
153
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-event_anal.patch
vendored
Normal file
153
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-event_anal.patch
vendored
Normal file
|
@ -0,0 +1,153 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 1 Mar 2019 17:19:00 -0800
|
||||
Subject: perf script python: Add Python3 support to event_analyzing_sample.py
|
||||
Origin: https://git.kernel.org/linus/c253c72e9d6723c8b078beb362f050059ef5de39
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the event_analyzing_sample.py script
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Cc: Feng Tang <feng.tang@intel.com>
|
||||
Link: http://lkml.kernel.org/r/20190302011903.2416-5-tonyj@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/event_analyzing_sample.py | 48 ++++++++++----------
|
||||
1 file changed, 25 insertions(+), 23 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/event_analyzing_sample.py
|
||||
+++ b/tools/perf/scripts/python/event_analyzing_sample.py
|
||||
@@ -15,6 +15,8 @@
|
||||
# for a x86 HW PMU event: PEBS with load latency data.
|
||||
#
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os
|
||||
import sys
|
||||
import math
|
||||
@@ -37,7 +39,7 @@ con = sqlite3.connect("/dev/shm/perf.db"
|
||||
con.isolation_level = None
|
||||
|
||||
def trace_begin():
|
||||
- print "In trace_begin:\n"
|
||||
+ print("In trace_begin:\n")
|
||||
|
||||
#
|
||||
# Will create several tables at the start, pebs_ll is for PEBS data with
|
||||
@@ -76,12 +78,12 @@ def process_event(param_dict):
|
||||
name = param_dict["ev_name"]
|
||||
|
||||
# Symbol and dso info are not always resolved
|
||||
- if (param_dict.has_key("dso")):
|
||||
+ if ("dso" in param_dict):
|
||||
dso = param_dict["dso"]
|
||||
else:
|
||||
dso = "Unknown_dso"
|
||||
|
||||
- if (param_dict.has_key("symbol")):
|
||||
+ if ("symbol" in param_dict):
|
||||
symbol = param_dict["symbol"]
|
||||
else:
|
||||
symbol = "Unknown_symbol"
|
||||
@@ -102,7 +104,7 @@ def insert_db(event):
|
||||
event.ip, event.status, event.dse, event.dla, event.lat))
|
||||
|
||||
def trace_end():
|
||||
- print "In trace_end:\n"
|
||||
+ print("In trace_end:\n")
|
||||
# We show the basic info for the 2 type of event classes
|
||||
show_general_events()
|
||||
show_pebs_ll()
|
||||
@@ -123,29 +125,29 @@ def show_general_events():
|
||||
# Check the total record number in the table
|
||||
count = con.execute("select count(*) from gen_events")
|
||||
for t in count:
|
||||
- print "There is %d records in gen_events table" % t[0]
|
||||
+ print("There is %d records in gen_events table" % t[0])
|
||||
if t[0] == 0:
|
||||
return
|
||||
|
||||
- print "Statistics about the general events grouped by thread/symbol/dso: \n"
|
||||
+ print("Statistics about the general events grouped by thread/symbol/dso: \n")
|
||||
|
||||
# Group by thread
|
||||
commq = con.execute("select comm, count(comm) from gen_events group by comm order by -count(comm)")
|
||||
- print "\n%16s %8s %16s\n%s" % ("comm", "number", "histogram", "="*42)
|
||||
+ print("\n%16s %8s %16s\n%s" % ("comm", "number", "histogram", "="*42))
|
||||
for row in commq:
|
||||
- print "%16s %8d %s" % (row[0], row[1], num2sym(row[1]))
|
||||
+ print("%16s %8d %s" % (row[0], row[1], num2sym(row[1])))
|
||||
|
||||
# Group by symbol
|
||||
- print "\n%32s %8s %16s\n%s" % ("symbol", "number", "histogram", "="*58)
|
||||
+ print("\n%32s %8s %16s\n%s" % ("symbol", "number", "histogram", "="*58))
|
||||
symbolq = con.execute("select symbol, count(symbol) from gen_events group by symbol order by -count(symbol)")
|
||||
for row in symbolq:
|
||||
- print "%32s %8d %s" % (row[0], row[1], num2sym(row[1]))
|
||||
+ print("%32s %8d %s" % (row[0], row[1], num2sym(row[1])))
|
||||
|
||||
# Group by dso
|
||||
- print "\n%40s %8s %16s\n%s" % ("dso", "number", "histogram", "="*74)
|
||||
+ print("\n%40s %8s %16s\n%s" % ("dso", "number", "histogram", "="*74))
|
||||
dsoq = con.execute("select dso, count(dso) from gen_events group by dso order by -count(dso)")
|
||||
for row in dsoq:
|
||||
- print "%40s %8d %s" % (row[0], row[1], num2sym(row[1]))
|
||||
+ print("%40s %8d %s" % (row[0], row[1], num2sym(row[1])))
|
||||
|
||||
#
|
||||
# This function just shows the basic info, and we could do more with the
|
||||
@@ -156,35 +158,35 @@ def show_pebs_ll():
|
||||
|
||||
count = con.execute("select count(*) from pebs_ll")
|
||||
for t in count:
|
||||
- print "There is %d records in pebs_ll table" % t[0]
|
||||
+ print("There is %d records in pebs_ll table" % t[0])
|
||||
if t[0] == 0:
|
||||
return
|
||||
|
||||
- print "Statistics about the PEBS Load Latency events grouped by thread/symbol/dse/latency: \n"
|
||||
+ print("Statistics about the PEBS Load Latency events grouped by thread/symbol/dse/latency: \n")
|
||||
|
||||
# Group by thread
|
||||
commq = con.execute("select comm, count(comm) from pebs_ll group by comm order by -count(comm)")
|
||||
- print "\n%16s %8s %16s\n%s" % ("comm", "number", "histogram", "="*42)
|
||||
+ print("\n%16s %8s %16s\n%s" % ("comm", "number", "histogram", "="*42))
|
||||
for row in commq:
|
||||
- print "%16s %8d %s" % (row[0], row[1], num2sym(row[1]))
|
||||
+ print("%16s %8d %s" % (row[0], row[1], num2sym(row[1])))
|
||||
|
||||
# Group by symbol
|
||||
- print "\n%32s %8s %16s\n%s" % ("symbol", "number", "histogram", "="*58)
|
||||
+ print("\n%32s %8s %16s\n%s" % ("symbol", "number", "histogram", "="*58))
|
||||
symbolq = con.execute("select symbol, count(symbol) from pebs_ll group by symbol order by -count(symbol)")
|
||||
for row in symbolq:
|
||||
- print "%32s %8d %s" % (row[0], row[1], num2sym(row[1]))
|
||||
+ print("%32s %8d %s" % (row[0], row[1], num2sym(row[1])))
|
||||
|
||||
# Group by dse
|
||||
dseq = con.execute("select dse, count(dse) from pebs_ll group by dse order by -count(dse)")
|
||||
- print "\n%32s %8s %16s\n%s" % ("dse", "number", "histogram", "="*58)
|
||||
+ print("\n%32s %8s %16s\n%s" % ("dse", "number", "histogram", "="*58))
|
||||
for row in dseq:
|
||||
- print "%32s %8d %s" % (row[0], row[1], num2sym(row[1]))
|
||||
+ print("%32s %8d %s" % (row[0], row[1], num2sym(row[1])))
|
||||
|
||||
# Group by latency
|
||||
latq = con.execute("select lat, count(lat) from pebs_ll group by lat order by lat")
|
||||
- print "\n%32s %8s %16s\n%s" % ("latency", "number", "histogram", "="*58)
|
||||
+ print("\n%32s %8s %16s\n%s" % ("latency", "number", "histogram", "="*58))
|
||||
for row in latq:
|
||||
- print "%32s %8d %s" % (row[0], row[1], num2sym(row[1]))
|
||||
+ print("%32s %8d %s" % (row[0], row[1], num2sym(row[1])))
|
||||
|
||||
def trace_unhandled(event_name, context, event_fields_dict):
|
||||
- print ' '.join(['%s=%s'%(k,str(v))for k,v in sorted(event_fields_dict.items())])
|
||||
+ print (' '.join(['%s=%s'%(k,str(v))for k,v in sorted(event_fields_dict.items())]))
|
214
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-export-to-.patch
vendored
Normal file
214
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-export-to-.patch
vendored
Normal file
|
@ -0,0 +1,214 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 8 Mar 2019 16:05:16 -0800
|
||||
Subject: perf script python: Add Python3 support to export-to-postgresql.py
|
||||
Origin: https://git.kernel.org/linus/1937b0560c3ea43b1b0f7d3617949ca50de8f8c0
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the export-to-postgresql.py script.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Link: http://lkml.kernel.org/r/20190309000518.2438-3-tonyj@suse.de
|
||||
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/export-to-postgresql.py | 58 +++++++++++++++-------
|
||||
1 file changed, 41 insertions(+), 17 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/export-to-postgresql.py
|
||||
+++ b/tools/perf/scripts/python/export-to-postgresql.py
|
||||
@@ -10,6 +10,8 @@
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
# more details.
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os
|
||||
import sys
|
||||
import struct
|
||||
@@ -199,6 +201,18 @@ import datetime
|
||||
|
||||
from PySide.QtSql import *
|
||||
|
||||
+if sys.version_info < (3, 0):
|
||||
+ def toserverstr(str):
|
||||
+ return str
|
||||
+ def toclientstr(str):
|
||||
+ return str
|
||||
+else:
|
||||
+ # Assume UTF-8 server_encoding and client_encoding
|
||||
+ def toserverstr(str):
|
||||
+ return bytes(str, "UTF_8")
|
||||
+ def toclientstr(str):
|
||||
+ return bytes(str, "UTF_8")
|
||||
+
|
||||
# Need to access PostgreSQL C library directly to use COPY FROM STDIN
|
||||
from ctypes import *
|
||||
libpq = CDLL("libpq.so.5")
|
||||
@@ -234,12 +248,14 @@ perf_db_export_mode = True
|
||||
perf_db_export_calls = False
|
||||
perf_db_export_callchains = False
|
||||
|
||||
+def printerr(*args, **kw_args):
|
||||
+ print(*args, file=sys.stderr, **kw_args)
|
||||
|
||||
def usage():
|
||||
- print >> sys.stderr, "Usage is: export-to-postgresql.py <database name> [<columns>] [<calls>] [<callchains>]"
|
||||
- print >> sys.stderr, "where: columns 'all' or 'branches'"
|
||||
- print >> sys.stderr, " calls 'calls' => create calls and call_paths table"
|
||||
- print >> sys.stderr, " callchains 'callchains' => create call_paths table"
|
||||
+ printerr("Usage is: export-to-postgresql.py <database name> [<columns>] [<calls>] [<callchains>]")
|
||||
+ printerr("where: columns 'all' or 'branches'")
|
||||
+ printerr(" calls 'calls' => create calls and call_paths table")
|
||||
+ printerr(" callchains 'callchains' => create call_paths table")
|
||||
raise Exception("Too few arguments")
|
||||
|
||||
if (len(sys.argv) < 2):
|
||||
@@ -273,7 +289,7 @@ def do_query(q, s):
|
||||
return
|
||||
raise Exception("Query failed: " + q.lastError().text())
|
||||
|
||||
-print datetime.datetime.today(), "Creating database..."
|
||||
+print(datetime.datetime.today(), "Creating database...")
|
||||
|
||||
db = QSqlDatabase.addDatabase('QPSQL')
|
||||
query = QSqlQuery(db)
|
||||
@@ -504,12 +520,12 @@ do_query(query, 'CREATE VIEW samples_vie
|
||||
' FROM samples')
|
||||
|
||||
|
||||
-file_header = struct.pack("!11sii", "PGCOPY\n\377\r\n\0", 0, 0)
|
||||
-file_trailer = "\377\377"
|
||||
+file_header = struct.pack("!11sii", b"PGCOPY\n\377\r\n\0", 0, 0)
|
||||
+file_trailer = b"\377\377"
|
||||
|
||||
def open_output_file(file_name):
|
||||
path_name = output_dir_name + "/" + file_name
|
||||
- file = open(path_name, "w+")
|
||||
+ file = open(path_name, "wb+")
|
||||
file.write(file_header)
|
||||
return file
|
||||
|
||||
@@ -524,13 +540,13 @@ def copy_output_file_direct(file, table_
|
||||
|
||||
# Use COPY FROM STDIN because security may prevent postgres from accessing the files directly
|
||||
def copy_output_file(file, table_name):
|
||||
- conn = PQconnectdb("dbname = " + dbname)
|
||||
+ conn = PQconnectdb(toclientstr("dbname = " + dbname))
|
||||
if (PQstatus(conn)):
|
||||
raise Exception("COPY FROM STDIN PQconnectdb failed")
|
||||
file.write(file_trailer)
|
||||
file.seek(0)
|
||||
sql = "COPY " + table_name + " FROM STDIN (FORMAT 'binary')"
|
||||
- res = PQexec(conn, sql)
|
||||
+ res = PQexec(conn, toclientstr(sql))
|
||||
if (PQresultStatus(res) != 4):
|
||||
raise Exception("COPY FROM STDIN PQexec failed")
|
||||
data = file.read(65536)
|
||||
@@ -564,7 +580,7 @@ if perf_db_export_calls:
|
||||
call_file = open_output_file("call_table.bin")
|
||||
|
||||
def trace_begin():
|
||||
- print datetime.datetime.today(), "Writing to intermediate files..."
|
||||
+ print(datetime.datetime.today(), "Writing to intermediate files...")
|
||||
# id == 0 means unknown. It is easier to create records for them than replace the zeroes with NULLs
|
||||
evsel_table(0, "unknown")
|
||||
machine_table(0, 0, "unknown")
|
||||
@@ -579,7 +595,7 @@ def trace_begin():
|
||||
unhandled_count = 0
|
||||
|
||||
def trace_end():
|
||||
- print datetime.datetime.today(), "Copying to database..."
|
||||
+ print(datetime.datetime.today(), "Copying to database...")
|
||||
copy_output_file(evsel_file, "selected_events")
|
||||
copy_output_file(machine_file, "machines")
|
||||
copy_output_file(thread_file, "threads")
|
||||
@@ -594,7 +610,7 @@ def trace_end():
|
||||
if perf_db_export_calls:
|
||||
copy_output_file(call_file, "calls")
|
||||
|
||||
- print datetime.datetime.today(), "Removing intermediate files..."
|
||||
+ print(datetime.datetime.today(), "Removing intermediate files...")
|
||||
remove_output_file(evsel_file)
|
||||
remove_output_file(machine_file)
|
||||
remove_output_file(thread_file)
|
||||
@@ -609,7 +625,7 @@ def trace_end():
|
||||
if perf_db_export_calls:
|
||||
remove_output_file(call_file)
|
||||
os.rmdir(output_dir_name)
|
||||
- print datetime.datetime.today(), "Adding primary keys"
|
||||
+ print(datetime.datetime.today(), "Adding primary keys")
|
||||
do_query(query, 'ALTER TABLE selected_events ADD PRIMARY KEY (id)')
|
||||
do_query(query, 'ALTER TABLE machines ADD PRIMARY KEY (id)')
|
||||
do_query(query, 'ALTER TABLE threads ADD PRIMARY KEY (id)')
|
||||
@@ -624,7 +640,7 @@ def trace_end():
|
||||
if perf_db_export_calls:
|
||||
do_query(query, 'ALTER TABLE calls ADD PRIMARY KEY (id)')
|
||||
|
||||
- print datetime.datetime.today(), "Adding foreign keys"
|
||||
+ print(datetime.datetime.today(), "Adding foreign keys")
|
||||
do_query(query, 'ALTER TABLE threads '
|
||||
'ADD CONSTRAINT machinefk FOREIGN KEY (machine_id) REFERENCES machines (id),'
|
||||
'ADD CONSTRAINT processfk FOREIGN KEY (process_id) REFERENCES threads (id)')
|
||||
@@ -659,8 +675,8 @@ def trace_end():
|
||||
do_query(query, 'CREATE INDEX pcpid_idx ON calls (parent_call_path_id)')
|
||||
|
||||
if (unhandled_count):
|
||||
- print datetime.datetime.today(), "Warning: ", unhandled_count, " unhandled events"
|
||||
- print datetime.datetime.today(), "Done"
|
||||
+ print(datetime.datetime.today(), "Warning: ", unhandled_count, " unhandled events")
|
||||
+ print(datetime.datetime.today(), "Done")
|
||||
|
||||
def trace_unhandled(event_name, context, event_fields_dict):
|
||||
global unhandled_count
|
||||
@@ -670,12 +686,14 @@ def sched__sched_switch(*x):
|
||||
pass
|
||||
|
||||
def evsel_table(evsel_id, evsel_name, *x):
|
||||
+ evsel_name = toserverstr(evsel_name)
|
||||
n = len(evsel_name)
|
||||
fmt = "!hiqi" + str(n) + "s"
|
||||
value = struct.pack(fmt, 2, 8, evsel_id, n, evsel_name)
|
||||
evsel_file.write(value)
|
||||
|
||||
def machine_table(machine_id, pid, root_dir, *x):
|
||||
+ root_dir = toserverstr(root_dir)
|
||||
n = len(root_dir)
|
||||
fmt = "!hiqiii" + str(n) + "s"
|
||||
value = struct.pack(fmt, 3, 8, machine_id, 4, pid, n, root_dir)
|
||||
@@ -686,6 +704,7 @@ def thread_table(thread_id, machine_id,
|
||||
thread_file.write(value)
|
||||
|
||||
def comm_table(comm_id, comm_str, *x):
|
||||
+ comm_str = toserverstr(comm_str)
|
||||
n = len(comm_str)
|
||||
fmt = "!hiqi" + str(n) + "s"
|
||||
value = struct.pack(fmt, 2, 8, comm_id, n, comm_str)
|
||||
@@ -697,6 +716,9 @@ def comm_thread_table(comm_thread_id, co
|
||||
comm_thread_file.write(value)
|
||||
|
||||
def dso_table(dso_id, machine_id, short_name, long_name, build_id, *x):
|
||||
+ short_name = toserverstr(short_name)
|
||||
+ long_name = toserverstr(long_name)
|
||||
+ build_id = toserverstr(build_id)
|
||||
n1 = len(short_name)
|
||||
n2 = len(long_name)
|
||||
n3 = len(build_id)
|
||||
@@ -705,12 +727,14 @@ def dso_table(dso_id, machine_id, short_
|
||||
dso_file.write(value)
|
||||
|
||||
def symbol_table(symbol_id, dso_id, sym_start, sym_end, binding, symbol_name, *x):
|
||||
+ symbol_name = toserverstr(symbol_name)
|
||||
n = len(symbol_name)
|
||||
fmt = "!hiqiqiqiqiii" + str(n) + "s"
|
||||
value = struct.pack(fmt, 6, 8, symbol_id, 8, dso_id, 8, sym_start, 8, sym_end, 4, binding, n, symbol_name)
|
||||
symbol_file.write(value)
|
||||
|
||||
def branch_type_table(branch_type, name, *x):
|
||||
+ name = toserverstr(name)
|
||||
n = len(name)
|
||||
fmt = "!hiii" + str(n) + "s"
|
||||
value = struct.pack(fmt, 2, 4, branch_type, n, name)
|
85
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-export-to-ebf6c5c181ab.patch
vendored
Normal file
85
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-export-to-ebf6c5c181ab.patch
vendored
Normal file
|
@ -0,0 +1,85 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 8 Mar 2019 16:05:17 -0800
|
||||
Subject: perf script python: Add Python3 support to export-to-sqlite.py
|
||||
Origin: https://git.kernel.org/linus/ebf6c5c181abe9309788c6241d39602a1ce18723
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the export-to-sqlite.py script
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
|
||||
Link: http://lkml.kernel.org/r/20190309000518.2438-4-tonyj@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/export-to-sqlite.py | 23 ++++++++++++++---------
|
||||
1 file changed, 14 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/export-to-sqlite.py
|
||||
+++ b/tools/perf/scripts/python/export-to-sqlite.py
|
||||
@@ -10,6 +10,8 @@
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
# more details.
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os
|
||||
import sys
|
||||
import struct
|
||||
@@ -60,11 +62,14 @@ perf_db_export_mode = True
|
||||
perf_db_export_calls = False
|
||||
perf_db_export_callchains = False
|
||||
|
||||
+def printerr(*args, **keyword_args):
|
||||
+ print(*args, file=sys.stderr, **keyword_args)
|
||||
+
|
||||
def usage():
|
||||
- print >> sys.stderr, "Usage is: export-to-sqlite.py <database name> [<columns>] [<calls>] [<callchains>]"
|
||||
- print >> sys.stderr, "where: columns 'all' or 'branches'"
|
||||
- print >> sys.stderr, " calls 'calls' => create calls and call_paths table"
|
||||
- print >> sys.stderr, " callchains 'callchains' => create call_paths table"
|
||||
+ printerr("Usage is: export-to-sqlite.py <database name> [<columns>] [<calls>] [<callchains>]");
|
||||
+ printerr("where: columns 'all' or 'branches'");
|
||||
+ printerr(" calls 'calls' => create calls and call_paths table");
|
||||
+ printerr(" callchains 'callchains' => create call_paths table");
|
||||
raise Exception("Too few arguments")
|
||||
|
||||
if (len(sys.argv) < 2):
|
||||
@@ -100,7 +105,7 @@ def do_query_(q):
|
||||
return
|
||||
raise Exception("Query failed: " + q.lastError().text())
|
||||
|
||||
-print datetime.datetime.today(), "Creating database..."
|
||||
+print(datetime.datetime.today(), "Creating database ...")
|
||||
|
||||
db_exists = False
|
||||
try:
|
||||
@@ -376,7 +381,7 @@ if perf_db_export_calls:
|
||||
call_query.prepare("INSERT INTO calls VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")
|
||||
|
||||
def trace_begin():
|
||||
- print datetime.datetime.today(), "Writing records..."
|
||||
+ print(datetime.datetime.today(), "Writing records...")
|
||||
do_query(query, 'BEGIN TRANSACTION')
|
||||
# id == 0 means unknown. It is easier to create records for them than replace the zeroes with NULLs
|
||||
evsel_table(0, "unknown")
|
||||
@@ -394,13 +399,13 @@ unhandled_count = 0
|
||||
def trace_end():
|
||||
do_query(query, 'END TRANSACTION')
|
||||
|
||||
- print datetime.datetime.today(), "Adding indexes"
|
||||
+ print(datetime.datetime.today(), "Adding indexes")
|
||||
if perf_db_export_calls:
|
||||
do_query(query, 'CREATE INDEX pcpid_idx ON calls (parent_call_path_id)')
|
||||
|
||||
if (unhandled_count):
|
||||
- print datetime.datetime.today(), "Warning: ", unhandled_count, " unhandled events"
|
||||
- print datetime.datetime.today(), "Done"
|
||||
+ print(datetime.datetime.today(), "Warning: ", unhandled_count, " unhandled events")
|
||||
+ print(datetime.datetime.today(), "Done")
|
||||
|
||||
def trace_unhandled(event_name, context, event_fields_dict):
|
||||
global unhandled_count
|
76
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-failed-sys.patch
vendored
Normal file
76
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-failed-sys.patch
vendored
Normal file
|
@ -0,0 +1,76 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 22 Feb 2019 15:06:08 -0800
|
||||
Subject: perf script python: Add Python3 support to
|
||||
failed-syscalls-by-pid.py
|
||||
Origin: https://git.kernel.org/linus/9b2700efc57f46fe63beee5f64fcfe2746936b4e
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the failed-syscalls-by-pid.py script
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Cc: Tom Zanussi <tzanussi@gmail.com>
|
||||
Link: http://lkml.kernel.org/r/20190222230619.17887-5-tonyj@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/failed-syscalls-by-pid.py | 21 ++++++++++----------
|
||||
1 file changed, 11 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/failed-syscalls-by-pid.py
|
||||
+++ b/tools/perf/scripts/python/failed-syscalls-by-pid.py
|
||||
@@ -5,6 +5,8 @@
|
||||
# Displays system-wide failed system call totals, broken down by pid.
|
||||
# If a [comm] arg is specified, only syscalls called by [comm] are displayed.
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -32,7 +34,7 @@ if len(sys.argv) > 1:
|
||||
syscalls = autodict()
|
||||
|
||||
def trace_begin():
|
||||
- print "Press control+C to stop and show the summary"
|
||||
+ print("Press control+C to stop and show the summary")
|
||||
|
||||
def trace_end():
|
||||
print_error_totals()
|
||||
@@ -57,22 +59,21 @@ def syscalls__sys_exit(event_name, conte
|
||||
|
||||
def print_error_totals():
|
||||
if for_comm is not None:
|
||||
- print "\nsyscall errors for %s:\n\n" % (for_comm),
|
||||
+ print("\nsyscall errors for %s:\n" % (for_comm))
|
||||
else:
|
||||
- print "\nsyscall errors:\n\n",
|
||||
+ print("\nsyscall errors:\n")
|
||||
|
||||
- print "%-30s %10s\n" % ("comm [pid]", "count"),
|
||||
- print "%-30s %10s\n" % ("------------------------------", \
|
||||
- "----------"),
|
||||
+ print("%-30s %10s" % ("comm [pid]", "count"))
|
||||
+ print("%-30s %10s" % ("------------------------------", "----------"))
|
||||
|
||||
comm_keys = syscalls.keys()
|
||||
for comm in comm_keys:
|
||||
pid_keys = syscalls[comm].keys()
|
||||
for pid in pid_keys:
|
||||
- print "\n%s [%d]\n" % (comm, pid),
|
||||
+ print("\n%s [%d]" % (comm, pid))
|
||||
id_keys = syscalls[comm][pid].keys()
|
||||
for id in id_keys:
|
||||
- print " syscall: %-16s\n" % syscall_name(id),
|
||||
+ print(" syscall: %-16s" % syscall_name(id))
|
||||
ret_keys = syscalls[comm][pid][id].keys()
|
||||
- for ret, val in sorted(syscalls[comm][pid][id].iteritems(), key = lambda(k, v): (v, k), reverse = True):
|
||||
- print " err = %-20s %10d\n" % (strerror(ret), val),
|
||||
+ for ret, val in sorted(syscalls[comm][pid][id].items(), key = lambda kv: (kv[1], kv[0]), reverse = True):
|
||||
+ print(" err = %-20s %10d" % (strerror(ret), val))
|
57
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-futex-cont.patch
vendored
Normal file
57
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-futex-cont.patch
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 1 Mar 2019 17:18:58 -0800
|
||||
Subject: perf script python: Add Python3 support to futex-contention.py
|
||||
Origin: https://git.kernel.org/linus/de2ec16bd438945813198d4de2339a396904c206
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the futex-contention.py script
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Link: http://lkml.kernel.org/r/20190302011903.2416-3-tonyj@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/futex-contention.py | 10 ++++++----
|
||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/futex-contention.py
|
||||
+++ b/tools/perf/scripts/python/futex-contention.py
|
||||
@@ -10,6 +10,8 @@
|
||||
#
|
||||
# Measures futex contention
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os, sys
|
||||
sys.path.append(os.environ['PERF_EXEC_PATH'] + '/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
|
||||
from Util import *
|
||||
@@ -33,18 +35,18 @@ def syscalls__sys_enter_futex(event, ctx
|
||||
|
||||
def syscalls__sys_exit_futex(event, ctxt, cpu, s, ns, tid, comm, callchain,
|
||||
nr, ret):
|
||||
- if thread_blocktime.has_key(tid):
|
||||
+ if tid in thread_blocktime:
|
||||
elapsed = nsecs(s, ns) - thread_blocktime[tid]
|
||||
add_stats(lock_waits, (tid, thread_thislock[tid]), elapsed)
|
||||
del thread_blocktime[tid]
|
||||
del thread_thislock[tid]
|
||||
|
||||
def trace_begin():
|
||||
- print "Press control+C to stop and show the summary"
|
||||
+ print("Press control+C to stop and show the summary")
|
||||
|
||||
def trace_end():
|
||||
for (tid, lock) in lock_waits:
|
||||
min, max, avg, count = lock_waits[tid, lock]
|
||||
- print "%s[%d] lock %x contended %d times, %d avg ns" % \
|
||||
- (process_names[tid], tid, lock, count, avg)
|
||||
+ print("%s[%d] lock %x contended %d times, %d avg ns" %
|
||||
+ (process_names[tid], tid, lock, count, avg))
|
||||
|
133
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-intel-pt-e.patch
vendored
Normal file
133
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-intel-pt-e.patch
vendored
Normal file
|
@ -0,0 +1,133 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Tue, 5 Mar 2019 08:19:02 -0800
|
||||
Subject: perf script python: Add Python3 support to intel-pt-events.py
|
||||
Origin: https://git.kernel.org/linus/fdf2460c297f1bb2f3bd20b3b52903b267af9050
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the intel-pt-events.py script
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
|
||||
Link: http://lkml.kernel.org/r/fd26acf9-0c0f-717f-9664-a3c33043ce19@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/intel-pt-events.py | 32 ++++++++++++++++-----------
|
||||
1 file changed, 19 insertions(+), 13 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/intel-pt-events.py
|
||||
+++ b/tools/perf/scripts/python/intel-pt-events.py
|
||||
@@ -10,6 +10,8 @@
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
# more details.
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os
|
||||
import sys
|
||||
import struct
|
||||
@@ -22,34 +24,34 @@ sys.path.append(os.environ['PERF_EXEC_PA
|
||||
#from Core import *
|
||||
|
||||
def trace_begin():
|
||||
- print "Intel PT Power Events and PTWRITE"
|
||||
+ print("Intel PT Power Events and PTWRITE")
|
||||
|
||||
def trace_end():
|
||||
- print "End"
|
||||
+ print("End")
|
||||
|
||||
def trace_unhandled(event_name, context, event_fields_dict):
|
||||
- print ' '.join(['%s=%s'%(k,str(v))for k,v in sorted(event_fields_dict.items())])
|
||||
+ print(' '.join(['%s=%s'%(k,str(v))for k,v in sorted(event_fields_dict.items())]))
|
||||
|
||||
def print_ptwrite(raw_buf):
|
||||
data = struct.unpack_from("<IQ", raw_buf)
|
||||
flags = data[0]
|
||||
payload = data[1]
|
||||
exact_ip = flags & 1
|
||||
- print "IP: %u payload: %#x" % (exact_ip, payload),
|
||||
+ print("IP: %u payload: %#x" % (exact_ip, payload), end=' ')
|
||||
|
||||
def print_cbr(raw_buf):
|
||||
data = struct.unpack_from("<BBBBII", raw_buf)
|
||||
cbr = data[0]
|
||||
f = (data[4] + 500) / 1000
|
||||
p = ((cbr * 1000 / data[2]) + 5) / 10
|
||||
- print "%3u freq: %4u MHz (%3u%%)" % (cbr, f, p),
|
||||
+ print("%3u freq: %4u MHz (%3u%%)" % (cbr, f, p), end=' ')
|
||||
|
||||
def print_mwait(raw_buf):
|
||||
data = struct.unpack_from("<IQ", raw_buf)
|
||||
payload = data[1]
|
||||
hints = payload & 0xff
|
||||
extensions = (payload >> 32) & 0x3
|
||||
- print "hints: %#x extensions: %#x" % (hints, extensions),
|
||||
+ print("hints: %#x extensions: %#x" % (hints, extensions), end=' ')
|
||||
|
||||
def print_pwre(raw_buf):
|
||||
data = struct.unpack_from("<IQ", raw_buf)
|
||||
@@ -57,13 +59,14 @@ def print_pwre(raw_buf):
|
||||
hw = (payload >> 7) & 1
|
||||
cstate = (payload >> 12) & 0xf
|
||||
subcstate = (payload >> 8) & 0xf
|
||||
- print "hw: %u cstate: %u sub-cstate: %u" % (hw, cstate, subcstate),
|
||||
+ print("hw: %u cstate: %u sub-cstate: %u" % (hw, cstate, subcstate),
|
||||
+ end=' ')
|
||||
|
||||
def print_exstop(raw_buf):
|
||||
data = struct.unpack_from("<I", raw_buf)
|
||||
flags = data[0]
|
||||
exact_ip = flags & 1
|
||||
- print "IP: %u" % (exact_ip),
|
||||
+ print("IP: %u" % (exact_ip), end=' ')
|
||||
|
||||
def print_pwrx(raw_buf):
|
||||
data = struct.unpack_from("<IQ", raw_buf)
|
||||
@@ -71,18 +74,21 @@ def print_pwrx(raw_buf):
|
||||
deepest_cstate = payload & 0xf
|
||||
last_cstate = (payload >> 4) & 0xf
|
||||
wake_reason = (payload >> 8) & 0xf
|
||||
- print "deepest cstate: %u last cstate: %u wake reason: %#x" % (deepest_cstate, last_cstate, wake_reason),
|
||||
+ print("deepest cstate: %u last cstate: %u wake reason: %#x" %
|
||||
+ (deepest_cstate, last_cstate, wake_reason), end=' ')
|
||||
|
||||
def print_common_start(comm, sample, name):
|
||||
ts = sample["time"]
|
||||
cpu = sample["cpu"]
|
||||
pid = sample["pid"]
|
||||
tid = sample["tid"]
|
||||
- print "%16s %5u/%-5u [%03u] %9u.%09u %7s:" % (comm, pid, tid, cpu, ts / 1000000000, ts %1000000000, name),
|
||||
+ print("%16s %5u/%-5u [%03u] %9u.%09u %7s:" %
|
||||
+ (comm, pid, tid, cpu, ts / 1000000000, ts %1000000000, name),
|
||||
+ end=' ')
|
||||
|
||||
def print_common_ip(sample, symbol, dso):
|
||||
ip = sample["ip"]
|
||||
- print "%16x %s (%s)" % (ip, symbol, dso)
|
||||
+ print("%16x %s (%s)" % (ip, symbol, dso))
|
||||
|
||||
def process_event(param_dict):
|
||||
event_attr = param_dict["attr"]
|
||||
@@ -92,12 +98,12 @@ def process_event(param_dict):
|
||||
name = param_dict["ev_name"]
|
||||
|
||||
# Symbol and dso info are not always resolved
|
||||
- if (param_dict.has_key("dso")):
|
||||
+ if "dso" in param_dict:
|
||||
dso = param_dict["dso"]
|
||||
else:
|
||||
dso = "[unknown]"
|
||||
|
||||
- if (param_dict.has_key("symbol")):
|
||||
+ if "symbol" in param_dict:
|
||||
symbol = param_dict["symbol"]
|
||||
else:
|
||||
symbol = "[unknown]"
|
76
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-mem-phys-a.patch
vendored
Normal file
76
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-mem-phys-a.patch
vendored
Normal file
|
@ -0,0 +1,76 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 22 Feb 2019 15:06:11 -0800
|
||||
Subject: perf script python: Add Python3 support to mem-phys-addr.py
|
||||
Origin: https://git.kernel.org/linus/e4d053ddb4c48cbde27b4c5edd3cc8f957684e4f
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the mem-phys-addr.py script
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Link: http://lkml.kernel.org/r/20190222230619.17887-8-tonyj@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/mem-phys-addr.py | 24 ++++++++++++++----------
|
||||
1 file changed, 14 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/mem-phys-addr.py
|
||||
+++ b/tools/perf/scripts/python/mem-phys-addr.py
|
||||
@@ -4,6 +4,8 @@
|
||||
# Copyright (c) 2018, Intel Corporation.
|
||||
|
||||
from __future__ import division
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os
|
||||
import sys
|
||||
import struct
|
||||
@@ -31,21 +33,23 @@ def parse_iomem():
|
||||
for i, j in enumerate(f):
|
||||
m = re.split('-|:',j,2)
|
||||
if m[2].strip() == 'System RAM':
|
||||
- system_ram.append(long(m[0], 16))
|
||||
- system_ram.append(long(m[1], 16))
|
||||
+ system_ram.append(int(m[0], 16))
|
||||
+ system_ram.append(int(m[1], 16))
|
||||
if m[2].strip() == 'Persistent Memory':
|
||||
- pmem.append(long(m[0], 16))
|
||||
- pmem.append(long(m[1], 16))
|
||||
+ pmem.append(int(m[0], 16))
|
||||
+ pmem.append(int(m[1], 16))
|
||||
|
||||
def print_memory_type():
|
||||
- print "Event: %s" % (event_name)
|
||||
- print "%-40s %10s %10s\n" % ("Memory type", "count", "percentage"),
|
||||
- print "%-40s %10s %10s\n" % ("----------------------------------------", \
|
||||
+ print("Event: %s" % (event_name))
|
||||
+ print("%-40s %10s %10s\n" % ("Memory type", "count", "percentage"), end='')
|
||||
+ print("%-40s %10s %10s\n" % ("----------------------------------------",
|
||||
"-----------", "-----------"),
|
||||
+ end='');
|
||||
total = sum(load_mem_type_cnt.values())
|
||||
for mem_type, count in sorted(load_mem_type_cnt.most_common(), \
|
||||
- key = lambda(k, v): (v, k), reverse = True):
|
||||
- print "%-40s %10d %10.1f%%\n" % (mem_type, count, 100 * count / total),
|
||||
+ key = lambda kv: (kv[1], kv[0]), reverse = True):
|
||||
+ print("%-40s %10d %10.1f%%\n" % (mem_type, count, 100 * count / total),
|
||||
+ end='')
|
||||
|
||||
def trace_begin():
|
||||
parse_iomem()
|
||||
@@ -80,7 +84,7 @@ def find_memory_type(phys_addr):
|
||||
f.seek(0, 0)
|
||||
for j in f:
|
||||
m = re.split('-|:',j,2)
|
||||
- if long(m[0], 16) <= phys_addr <= long(m[1], 16):
|
||||
+ if int(m[0], 16) <= phys_addr <= int(m[1], 16):
|
||||
return m[2]
|
||||
return "N/A"
|
||||
|
59
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-net_dropmo.patch
vendored
Normal file
59
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-net_dropmo.patch
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 22 Feb 2019 15:06:12 -0800
|
||||
Subject: perf script python: Add Python3 support to net_dropmonitor.py
|
||||
Origin: https://git.kernel.org/linus/8c42b9600e561666233b9c557a5209d0dc853ba1
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the net_dropmonitor.py script
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Acked-by: Neil Horman <nhorman@tuxdriver.com>
|
||||
Link: http://lkml.kernel.org/r/20190222230619.17887-9-tonyj@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/net_dropmonitor.py | 10 ++++++----
|
||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/net_dropmonitor.py
|
||||
+++ b/tools/perf/scripts/python/net_dropmonitor.py
|
||||
@@ -1,6 +1,8 @@
|
||||
# Monitor the system for dropped packets and proudce a report of drop locations and counts
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -50,19 +52,19 @@ def get_sym(sloc):
|
||||
return (None, 0)
|
||||
|
||||
def print_drop_table():
|
||||
- print "%25s %25s %25s" % ("LOCATION", "OFFSET", "COUNT")
|
||||
+ print("%25s %25s %25s" % ("LOCATION", "OFFSET", "COUNT"))
|
||||
for i in drop_log.keys():
|
||||
(sym, off) = get_sym(i)
|
||||
if sym == None:
|
||||
sym = i
|
||||
- print "%25s %25s %25s" % (sym, off, drop_log[i])
|
||||
+ print("%25s %25s %25s" % (sym, off, drop_log[i]))
|
||||
|
||||
|
||||
def trace_begin():
|
||||
- print "Starting trace (Ctrl-C to dump results)"
|
||||
+ print("Starting trace (Ctrl-C to dump results)")
|
||||
|
||||
def trace_end():
|
||||
- print "Gathering kallsyms data"
|
||||
+ print("Gathering kallsyms data")
|
||||
get_kallsyms_table()
|
||||
print_drop_table()
|
||||
|
180
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-netdev-tim.patch
vendored
Normal file
180
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-netdev-tim.patch
vendored
Normal file
|
@ -0,0 +1,180 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 22 Feb 2019 15:06:05 -0800
|
||||
Subject: perf script python: Add Python3 support to netdev-times.py
|
||||
Origin: https://git.kernel.org/linus/02b03ec383e0c79d73aa4b402b3427a8b490ef9f
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the netdev-times.py script
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2
|
||||
version is now v2.6.
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Cc: Sanagi Koki <sanagi.koki@jp.fujitsu.com>
|
||||
Link: http://lkml.kernel.org/r/20190222230619.17887-2-tonyj@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/netdev-times.py | 82 +++++++++++++++---------------
|
||||
1 file changed, 42 insertions(+), 40 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/netdev-times.py
|
||||
+++ b/tools/perf/scripts/python/netdev-times.py
|
||||
@@ -8,6 +8,8 @@
|
||||
# dev=: show only thing related to specified device
|
||||
# debug: work with debug mode. It shows buffer status.
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -17,6 +19,7 @@ sys.path.append(os.environ['PERF_EXEC_PA
|
||||
from perf_trace_context import *
|
||||
from Core import *
|
||||
from Util import *
|
||||
+from functools import cmp_to_key
|
||||
|
||||
all_event_list = []; # insert all tracepoint event related with this script
|
||||
irq_dic = {}; # key is cpu and value is a list which stacks irqs
|
||||
@@ -61,12 +64,12 @@ def diff_msec(src, dst):
|
||||
def print_transmit(hunk):
|
||||
if dev != 0 and hunk['dev'].find(dev) < 0:
|
||||
return
|
||||
- print "%7s %5d %6d.%06dsec %12.3fmsec %12.3fmsec" % \
|
||||
+ print("%7s %5d %6d.%06dsec %12.3fmsec %12.3fmsec" %
|
||||
(hunk['dev'], hunk['len'],
|
||||
nsecs_secs(hunk['queue_t']),
|
||||
nsecs_nsecs(hunk['queue_t'])/1000,
|
||||
diff_msec(hunk['queue_t'], hunk['xmit_t']),
|
||||
- diff_msec(hunk['xmit_t'], hunk['free_t']))
|
||||
+ diff_msec(hunk['xmit_t'], hunk['free_t'])))
|
||||
|
||||
# Format for displaying rx packet processing
|
||||
PF_IRQ_ENTRY= " irq_entry(+%.3fmsec irq=%d:%s)"
|
||||
@@ -98,55 +101,55 @@ def print_receive(hunk):
|
||||
if show_hunk == 0:
|
||||
return
|
||||
|
||||
- print "%d.%06dsec cpu=%d" % \
|
||||
- (nsecs_secs(base_t), nsecs_nsecs(base_t)/1000, cpu)
|
||||
+ print("%d.%06dsec cpu=%d" %
|
||||
+ (nsecs_secs(base_t), nsecs_nsecs(base_t)/1000, cpu))
|
||||
for i in range(len(irq_list)):
|
||||
- print PF_IRQ_ENTRY % \
|
||||
+ print(PF_IRQ_ENTRY %
|
||||
(diff_msec(base_t, irq_list[i]['irq_ent_t']),
|
||||
- irq_list[i]['irq'], irq_list[i]['name'])
|
||||
- print PF_JOINT
|
||||
+ irq_list[i]['irq'], irq_list[i]['name']))
|
||||
+ print(PF_JOINT)
|
||||
irq_event_list = irq_list[i]['event_list']
|
||||
for j in range(len(irq_event_list)):
|
||||
irq_event = irq_event_list[j]
|
||||
if irq_event['event'] == 'netif_rx':
|
||||
- print PF_NET_RX % \
|
||||
+ print(PF_NET_RX %
|
||||
(diff_msec(base_t, irq_event['time']),
|
||||
- irq_event['skbaddr'])
|
||||
- print PF_JOINT
|
||||
- print PF_SOFT_ENTRY % \
|
||||
- diff_msec(base_t, hunk['sirq_ent_t'])
|
||||
- print PF_JOINT
|
||||
+ irq_event['skbaddr']))
|
||||
+ print(PF_JOINT)
|
||||
+ print(PF_SOFT_ENTRY %
|
||||
+ diff_msec(base_t, hunk['sirq_ent_t']))
|
||||
+ print(PF_JOINT)
|
||||
event_list = hunk['event_list']
|
||||
for i in range(len(event_list)):
|
||||
event = event_list[i]
|
||||
if event['event_name'] == 'napi_poll':
|
||||
- print PF_NAPI_POLL % \
|
||||
- (diff_msec(base_t, event['event_t']), event['dev'])
|
||||
+ print(PF_NAPI_POLL %
|
||||
+ (diff_msec(base_t, event['event_t']), event['dev']))
|
||||
if i == len(event_list) - 1:
|
||||
- print ""
|
||||
+ print("")
|
||||
else:
|
||||
- print PF_JOINT
|
||||
+ print(PF_JOINT)
|
||||
else:
|
||||
- print PF_NET_RECV % \
|
||||
+ print(PF_NET_RECV %
|
||||
(diff_msec(base_t, event['event_t']), event['skbaddr'],
|
||||
- event['len'])
|
||||
+ event['len']))
|
||||
if 'comm' in event.keys():
|
||||
- print PF_WJOINT
|
||||
- print PF_CPY_DGRAM % \
|
||||
+ print(PF_WJOINT)
|
||||
+ print(PF_CPY_DGRAM %
|
||||
(diff_msec(base_t, event['comm_t']),
|
||||
- event['pid'], event['comm'])
|
||||
+ event['pid'], event['comm']))
|
||||
elif 'handle' in event.keys():
|
||||
- print PF_WJOINT
|
||||
+ print(PF_WJOINT)
|
||||
if event['handle'] == "kfree_skb":
|
||||
- print PF_KFREE_SKB % \
|
||||
+ print(PF_KFREE_SKB %
|
||||
(diff_msec(base_t,
|
||||
event['comm_t']),
|
||||
- event['location'])
|
||||
+ event['location']))
|
||||
elif event['handle'] == "consume_skb":
|
||||
- print PF_CONS_SKB % \
|
||||
+ print(PF_CONS_SKB %
|
||||
diff_msec(base_t,
|
||||
- event['comm_t'])
|
||||
- print PF_JOINT
|
||||
+ event['comm_t']))
|
||||
+ print(PF_JOINT)
|
||||
|
||||
def trace_begin():
|
||||
global show_tx
|
||||
@@ -172,8 +175,7 @@ def trace_begin():
|
||||
|
||||
def trace_end():
|
||||
# order all events in time
|
||||
- all_event_list.sort(lambda a,b :cmp(a[EINFO_IDX_TIME],
|
||||
- b[EINFO_IDX_TIME]))
|
||||
+ all_event_list.sort(key=cmp_to_key(lambda a,b :a[EINFO_IDX_TIME] < b[EINFO_IDX_TIME]))
|
||||
# process all events
|
||||
for i in range(len(all_event_list)):
|
||||
event_info = all_event_list[i]
|
||||
@@ -210,19 +212,19 @@ def trace_end():
|
||||
print_receive(receive_hunk_list[i])
|
||||
# display transmit hunks
|
||||
if show_tx:
|
||||
- print " dev len Qdisc " \
|
||||
- " netdevice free"
|
||||
+ print(" dev len Qdisc "
|
||||
+ " netdevice free")
|
||||
for i in range(len(tx_free_list)):
|
||||
print_transmit(tx_free_list[i])
|
||||
if debug:
|
||||
- print "debug buffer status"
|
||||
- print "----------------------------"
|
||||
- print "xmit Qdisc:remain:%d overflow:%d" % \
|
||||
- (len(tx_queue_list), of_count_tx_queue_list)
|
||||
- print "xmit netdevice:remain:%d overflow:%d" % \
|
||||
- (len(tx_xmit_list), of_count_tx_xmit_list)
|
||||
- print "receive:remain:%d overflow:%d" % \
|
||||
- (len(rx_skb_list), of_count_rx_skb_list)
|
||||
+ print("debug buffer status")
|
||||
+ print("----------------------------")
|
||||
+ print("xmit Qdisc:remain:%d overflow:%d" %
|
||||
+ (len(tx_queue_list), of_count_tx_queue_list))
|
||||
+ print("xmit netdevice:remain:%d overflow:%d" %
|
||||
+ (len(tx_xmit_list), of_count_tx_xmit_list))
|
||||
+ print("receive:remain:%d overflow:%d" %
|
||||
+ (len(rx_skb_list), of_count_rx_skb_list))
|
||||
|
||||
# called from perf, when it finds a correspoinding event
|
||||
def irq__softirq_entry(name, context, cpu, sec, nsec, pid, comm, callchain, vec):
|
87
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-powerpc-hc.patch
vendored
Normal file
87
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-powerpc-hc.patch
vendored
Normal file
|
@ -0,0 +1,87 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 22 Feb 2019 15:06:13 -0800
|
||||
Subject: perf script python: Add Python3 support to powerpc-hcalls.py
|
||||
Origin: https://git.kernel.org/linus/118af5bf799bd1876c3999766d1d2f845d45f019
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the powerpc-hcalls.py script
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
|
||||
Link: http://lkml.kernel.org/r/20190222230619.17887-10-tonyj@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/powerpc-hcalls.py | 18 ++++++++++--------
|
||||
1 file changed, 10 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/powerpc-hcalls.py
|
||||
+++ b/tools/perf/scripts/python/powerpc-hcalls.py
|
||||
@@ -4,6 +4,8 @@
|
||||
#
|
||||
# Hypervisor call statisics
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -149,7 +151,7 @@ hcall_table = {
|
||||
}
|
||||
|
||||
def hcall_table_lookup(opcode):
|
||||
- if (hcall_table.has_key(opcode)):
|
||||
+ if (opcode in hcall_table):
|
||||
return hcall_table[opcode]
|
||||
else:
|
||||
return opcode
|
||||
@@ -157,8 +159,8 @@ def hcall_table_lookup(opcode):
|
||||
print_ptrn = '%-28s%10s%10s%10s%10s'
|
||||
|
||||
def trace_end():
|
||||
- print print_ptrn % ('hcall', 'count', 'min(ns)', 'max(ns)', 'avg(ns)')
|
||||
- print '-' * 68
|
||||
+ print(print_ptrn % ('hcall', 'count', 'min(ns)', 'max(ns)', 'avg(ns)'))
|
||||
+ print('-' * 68)
|
||||
for opcode in output:
|
||||
h_name = hcall_table_lookup(opcode)
|
||||
time = output[opcode]['time']
|
||||
@@ -166,14 +168,14 @@ def trace_end():
|
||||
min_t = output[opcode]['min']
|
||||
max_t = output[opcode]['max']
|
||||
|
||||
- print print_ptrn % (h_name, cnt, min_t, max_t, time/cnt)
|
||||
+ print(print_ptrn % (h_name, cnt, min_t, max_t, time//cnt))
|
||||
|
||||
def powerpc__hcall_exit(name, context, cpu, sec, nsec, pid, comm, callchain,
|
||||
opcode, retval):
|
||||
- if (d_enter.has_key(cpu) and d_enter[cpu].has_key(opcode)):
|
||||
+ if (cpu in d_enter and opcode in d_enter[cpu]):
|
||||
diff = nsecs(sec, nsec) - d_enter[cpu][opcode]
|
||||
|
||||
- if (output.has_key(opcode)):
|
||||
+ if (opcode in output):
|
||||
output[opcode]['time'] += diff
|
||||
output[opcode]['cnt'] += 1
|
||||
if (output[opcode]['min'] > diff):
|
||||
@@ -190,11 +192,11 @@ def powerpc__hcall_exit(name, context, c
|
||||
|
||||
del d_enter[cpu][opcode]
|
||||
# else:
|
||||
-# print "Can't find matching hcall_enter event. Ignoring sample"
|
||||
+# print("Can't find matching hcall_enter event. Ignoring sample")
|
||||
|
||||
def powerpc__hcall_entry(event_name, context, cpu, sec, nsec, pid, comm,
|
||||
callchain, opcode):
|
||||
- if (d_enter.has_key(cpu)):
|
||||
+ if (cpu in d_enter):
|
||||
d_enter[cpu][opcode] = nsecs(sec, nsec)
|
||||
else:
|
||||
d_enter[cpu] = {opcode: nsecs(sec, nsec)}
|
69
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-sctop.py.patch
vendored
Normal file
69
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-sctop.py.patch
vendored
Normal file
|
@ -0,0 +1,69 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 22 Feb 2019 15:06:14 -0800
|
||||
Subject: perf script python: Add Python3 support to sctop.py
|
||||
Origin: https://git.kernel.org/linus/ee75a896ae535d4219a82cc361be96394536f3ba
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the sctop.py script
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Cc: Tom Zanussi <tzanussi@gmail.com>
|
||||
Link: http://lkml.kernel.org/r/20190222230619.17887-11-tonyj@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/sctop.py | 24 ++++++++++++++++--------
|
||||
1 file changed, 16 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/sctop.py
|
||||
+++ b/tools/perf/scripts/python/sctop.py
|
||||
@@ -8,7 +8,14 @@
|
||||
# will be refreshed every [interval] seconds. The default interval is
|
||||
# 3 seconds.
|
||||
|
||||
-import os, sys, thread, time
|
||||
+from __future__ import print_function
|
||||
+
|
||||
+import os, sys, time
|
||||
+
|
||||
+try:
|
||||
+ import thread
|
||||
+except ImportError:
|
||||
+ import _thread as thread
|
||||
|
||||
sys.path.append(os.environ['PERF_EXEC_PATH'] + \
|
||||
'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
|
||||
@@ -62,18 +69,19 @@ def print_syscall_totals(interval):
|
||||
while 1:
|
||||
clear_term()
|
||||
if for_comm is not None:
|
||||
- print "\nsyscall events for %s:\n\n" % (for_comm),
|
||||
+ print("\nsyscall events for %s:\n" % (for_comm))
|
||||
else:
|
||||
- print "\nsyscall events:\n\n",
|
||||
+ print("\nsyscall events:\n")
|
||||
|
||||
- print "%-40s %10s\n" % ("event", "count"),
|
||||
- print "%-40s %10s\n" % ("----------------------------------------", \
|
||||
- "----------"),
|
||||
+ print("%-40s %10s" % ("event", "count"))
|
||||
+ print("%-40s %10s" %
|
||||
+ ("----------------------------------------",
|
||||
+ "----------"))
|
||||
|
||||
- for id, val in sorted(syscalls.iteritems(), key = lambda(k, v): (v, k), \
|
||||
+ for id, val in sorted(syscalls.items(), key = lambda kv: (kv[1], kv[0]), \
|
||||
reverse = True):
|
||||
try:
|
||||
- print "%-40s %10d\n" % (syscall_name(id), val),
|
||||
+ print("%-40s %10d" % (syscall_name(id), val))
|
||||
except TypeError:
|
||||
pass
|
||||
syscalls.clear()
|
45
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-stackcolla.patch
vendored
Normal file
45
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-stackcolla.patch
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 22 Feb 2019 15:06:15 -0800
|
||||
Subject: perf script python: Add Python3 support to stackcollapse.py
|
||||
Origin: https://git.kernel.org/linus/6d22d9991cf37edfe861569e2433342ad56206a7
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the stackcollapse.py script
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Cc: Paolo Bonzini <pbonzini@redhat.com> <pbonzini@redhat.com>
|
||||
Link: http://lkml.kernel.org/r/20190222230619.17887-12-tonyj@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/stackcollapse.py | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/stackcollapse.py
|
||||
+++ b/tools/perf/scripts/python/stackcollapse.py
|
||||
@@ -19,6 +19,8 @@
|
||||
# Written by Paolo Bonzini <pbonzini@redhat.com>
|
||||
# Based on Brendan Gregg's stackcollapse-perf.pl script.
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os
|
||||
import sys
|
||||
from collections import defaultdict
|
||||
@@ -120,7 +122,6 @@ def process_event(param_dict):
|
||||
lines[stack_string] = lines[stack_string] + 1
|
||||
|
||||
def trace_end():
|
||||
- list = lines.keys()
|
||||
- list.sort()
|
||||
+ list = sorted(lines)
|
||||
for stack in list:
|
||||
- print "%s %d" % (stack, lines[stack])
|
||||
+ print("%s %d" % (stack, lines[stack]))
|
61
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-stat-cpi.p.patch
vendored
Normal file
61
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-stat-cpi.p.patch
vendored
Normal file
|
@ -0,0 +1,61 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 22 Feb 2019 15:06:16 -0800
|
||||
Subject: perf script python: Add Python3 support to stat-cpi.py
|
||||
Origin: https://git.kernel.org/linus/e985bf761db7646cebcd236249da08bd264069de
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the stat-cpi.py script
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Cc: Jiri Olsa <jolsa@kernel.org>
|
||||
Link: http://lkml.kernel.org/r/20190222230619.17887-13-tonyj@suse.de
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/stat-cpi.py | 10 ++++++----
|
||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/stat-cpi.py
|
||||
+++ b/tools/perf/scripts/python/stat-cpi.py
|
||||
@@ -1,6 +1,8 @@
|
||||
#!/usr/bin/env python
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
data = {}
|
||||
times = []
|
||||
threads = []
|
||||
@@ -20,8 +22,8 @@ def store_key(time, cpu, thread):
|
||||
threads.append(thread)
|
||||
|
||||
def store(time, event, cpu, thread, val, ena, run):
|
||||
- #print "event %s cpu %d, thread %d, time %d, val %d, ena %d, run %d" % \
|
||||
- # (event, cpu, thread, time, val, ena, run)
|
||||
+ #print("event %s cpu %d, thread %d, time %d, val %d, ena %d, run %d" %
|
||||
+ # (event, cpu, thread, time, val, ena, run))
|
||||
|
||||
store_key(time, cpu, thread)
|
||||
key = get_key(time, event, cpu, thread)
|
||||
@@ -59,7 +61,7 @@ def stat__interval(time):
|
||||
if ins != 0:
|
||||
cpi = cyc/float(ins)
|
||||
|
||||
- print "%15f: cpu %d, thread %d -> cpi %f (%d/%d)" % (time/(float(1000000000)), cpu, thread, cpi, cyc, ins)
|
||||
+ print("%15f: cpu %d, thread %d -> cpi %f (%d/%d)" % (time/(float(1000000000)), cpu, thread, cpi, cyc, ins))
|
||||
|
||||
def trace_end():
|
||||
pass
|
||||
@@ -75,4 +77,4 @@ def trace_end():
|
||||
# if ins != 0:
|
||||
# cpi = cyc/float(ins)
|
||||
#
|
||||
-# print "time %.9f, cpu %d, thread %d -> cpi %f" % (time/(float(1000000000)), cpu, thread, cpi)
|
||||
+# print("time %.9f, cpu %d, thread %d -> cpi %f" % (time/(float(1000000000)), cpu, thread, cpi))
|
|
@ -0,0 +1,74 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 22 Feb 2019 15:06:18 -0800
|
||||
Subject: perf script python: Add Python3 support to
|
||||
syscall-counts-by-pid.py
|
||||
Origin: https://git.kernel.org/linus/de667cce7f4f96b6e22da8fd9c065b961f355080
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the syscall-counts-by-pid.py script
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Link: http://lkml.kernel.org/r/20190222230619.17887-15-tonyj@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/syscall-counts-by-pid.py | 22 +++++++++++----------
|
||||
1 file changed, 12 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/syscall-counts-by-pid.py
|
||||
+++ b/tools/perf/scripts/python/syscall-counts-by-pid.py
|
||||
@@ -5,6 +5,8 @@
|
||||
# Displays system-wide system call totals, broken down by syscall.
|
||||
# If a [comm] arg is specified, only syscalls called by [comm] are displayed.
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os, sys
|
||||
|
||||
sys.path.append(os.environ['PERF_EXEC_PATH'] + \
|
||||
@@ -31,7 +33,7 @@ if len(sys.argv) > 1:
|
||||
syscalls = autodict()
|
||||
|
||||
def trace_begin():
|
||||
- print "Press control+C to stop and show the summary"
|
||||
+ print("Press control+C to stop and show the summary")
|
||||
|
||||
def trace_end():
|
||||
print_syscall_totals()
|
||||
@@ -55,20 +57,20 @@ def syscalls__sys_enter(event_name, cont
|
||||
|
||||
def print_syscall_totals():
|
||||
if for_comm is not None:
|
||||
- print "\nsyscall events for %s:\n\n" % (for_comm),
|
||||
+ print("\nsyscall events for %s:\n" % (for_comm))
|
||||
else:
|
||||
- print "\nsyscall events by comm/pid:\n\n",
|
||||
+ print("\nsyscall events by comm/pid:\n")
|
||||
|
||||
- print "%-40s %10s\n" % ("comm [pid]/syscalls", "count"),
|
||||
- print "%-40s %10s\n" % ("----------------------------------------", \
|
||||
- "----------"),
|
||||
+ print("%-40s %10s" % ("comm [pid]/syscalls", "count"))
|
||||
+ print("%-40s %10s" % ("----------------------------------------",
|
||||
+ "----------"))
|
||||
|
||||
comm_keys = syscalls.keys()
|
||||
for comm in comm_keys:
|
||||
pid_keys = syscalls[comm].keys()
|
||||
for pid in pid_keys:
|
||||
- print "\n%s [%d]\n" % (comm, pid),
|
||||
+ print("\n%s [%d]" % (comm, pid))
|
||||
id_keys = syscalls[comm][pid].keys()
|
||||
- for id, val in sorted(syscalls[comm][pid].iteritems(), \
|
||||
- key = lambda(k, v): (v, k), reverse = True):
|
||||
- print " %-38s %10d\n" % (syscall_name(id), val),
|
||||
+ for id, val in sorted(syscalls[comm][pid].items(), \
|
||||
+ key = lambda kv: (kv[1], kv[0]), reverse = True):
|
||||
+ print(" %-38s %10d" % (syscall_name(id), val))
|
65
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-syscall-co.patch
vendored
Normal file
65
debian/patches/bugfix/all/perf-script-python-Add-Python3-support-to-syscall-co.patch
vendored
Normal file
|
@ -0,0 +1,65 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 22 Feb 2019 15:06:17 -0800
|
||||
Subject: perf script python: Add Python3 support to syscall-counts.py
|
||||
Origin: https://git.kernel.org/linus/1d1b0dbb859d175eb512a9f0e1ca7e44bd0192cd
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python2 and Python3 in the syscall-counts.py script
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of 'from __future__' implies the minimum supported Python2 version
|
||||
is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Link: http://lkml.kernel.org/r/20190222230619.17887-14-tonyj@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/syscall-counts.py | 18 ++++++++++--------
|
||||
1 file changed, 10 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/syscall-counts.py
|
||||
+++ b/tools/perf/scripts/python/syscall-counts.py
|
||||
@@ -5,6 +5,8 @@
|
||||
# Displays system-wide system call totals, broken down by syscall.
|
||||
# If a [comm] arg is specified, only syscalls called by [comm] are displayed.
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -28,7 +30,7 @@ if len(sys.argv) > 1:
|
||||
syscalls = autodict()
|
||||
|
||||
def trace_begin():
|
||||
- print "Press control+C to stop and show the summary"
|
||||
+ print("Press control+C to stop and show the summary")
|
||||
|
||||
def trace_end():
|
||||
print_syscall_totals()
|
||||
@@ -51,14 +53,14 @@ def syscalls__sys_enter(event_name, cont
|
||||
|
||||
def print_syscall_totals():
|
||||
if for_comm is not None:
|
||||
- print "\nsyscall events for %s:\n\n" % (for_comm),
|
||||
+ print("\nsyscall events for %s:\n" % (for_comm))
|
||||
else:
|
||||
- print "\nsyscall events:\n\n",
|
||||
+ print("\nsyscall events:\n")
|
||||
|
||||
- print "%-40s %10s\n" % ("event", "count"),
|
||||
- print "%-40s %10s\n" % ("----------------------------------------", \
|
||||
- "-----------"),
|
||||
+ print("%-40s %10s" % ("event", "count"))
|
||||
+ print("%-40s %10s" % ("----------------------------------------",
|
||||
+ "-----------"))
|
||||
|
||||
- for id, val in sorted(syscalls.iteritems(), key = lambda(k, v): (v, k), \
|
||||
+ for id, val in sorted(syscalls.items(), key = lambda kv: (kv[1], kv[0]), \
|
||||
reverse = True):
|
||||
- print "%-40s %10d\n" % (syscall_name(id), val),
|
||||
+ print("%-40s %10d" % (syscall_name(id), val))
|
511
debian/patches/bugfix/all/perf-script-python-Remove-mixed-indentation.patch
vendored
Normal file
511
debian/patches/bugfix/all/perf-script-python-Remove-mixed-indentation.patch
vendored
Normal file
|
@ -0,0 +1,511 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 1 Mar 2019 17:18:57 -0800
|
||||
Subject: perf script python: Remove mixed indentation
|
||||
Origin: https://git.kernel.org/linus/b504d7f6876515b74c8e27a44ccdb22372616d97
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Remove mixed indentation in Python scripts. Revert to either all tabs
|
||||
(most common form) or all spaces (4 or 8) depending on what was the
|
||||
intent of the original commit. This is necessary to complete Python3
|
||||
support as it will flag an error if it encounters mixed indentation.
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Link: http://lkml.kernel.org/r/20190302011903.2416-2-tonyj@suse.de
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/check-perf-trace.py | 69 +++++++++-----------
|
||||
tools/perf/scripts/python/compaction-times.py | 8 +-
|
||||
tools/perf/scripts/python/event_analyzing_sample.py | 6 -
|
||||
tools/perf/scripts/python/failed-syscalls-by-pid.py | 34 ++++-----
|
||||
tools/perf/scripts/python/futex-contention.py | 2
|
||||
tools/perf/scripts/python/intel-pt-events.py | 28 ++++----
|
||||
tools/perf/scripts/python/mem-phys-addr.py | 7 +-
|
||||
tools/perf/scripts/python/net_dropmonitor.py | 2
|
||||
tools/perf/scripts/python/netdev-times.py | 12 ++-
|
||||
tools/perf/scripts/python/sched-migration.py | 6 -
|
||||
tools/perf/scripts/python/sctop.py | 13 ++-
|
||||
tools/perf/scripts/python/stackcollapse.py | 2
|
||||
tools/perf/scripts/python/syscall-counts-by-pid.py | 47 ++++++-------
|
||||
tools/perf/scripts/python/syscall-counts.py | 27 +++----
|
||||
14 files changed, 132 insertions(+), 131 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/check-perf-trace.py
|
||||
+++ b/tools/perf/scripts/python/check-perf-trace.py
|
||||
@@ -23,60 +23,59 @@ def trace_begin():
|
||||
pass
|
||||
|
||||
def trace_end():
|
||||
- print_unhandled()
|
||||
+ print_unhandled()
|
||||
|
||||
def irq__softirq_entry(event_name, context, common_cpu,
|
||||
- common_secs, common_nsecs, common_pid, common_comm,
|
||||
- common_callchain, vec):
|
||||
- print_header(event_name, common_cpu, common_secs, common_nsecs,
|
||||
- common_pid, common_comm)
|
||||
+ common_secs, common_nsecs, common_pid, common_comm,
|
||||
+ common_callchain, vec):
|
||||
+ print_header(event_name, common_cpu, common_secs, common_nsecs,
|
||||
+ common_pid, common_comm)
|
||||
|
||||
- print_uncommon(context)
|
||||
+ print_uncommon(context)
|
||||
|
||||
- print "vec=%s\n" % \
|
||||
- (symbol_str("irq__softirq_entry", "vec", vec)),
|
||||
+ print "vec=%s\n" % (symbol_str("irq__softirq_entry", "vec", vec)),
|
||||
|
||||
def kmem__kmalloc(event_name, context, common_cpu,
|
||||
- common_secs, common_nsecs, common_pid, common_comm,
|
||||
- common_callchain, call_site, ptr, bytes_req, bytes_alloc,
|
||||
- gfp_flags):
|
||||
- print_header(event_name, common_cpu, common_secs, common_nsecs,
|
||||
- common_pid, common_comm)
|
||||
+ common_secs, common_nsecs, common_pid, common_comm,
|
||||
+ common_callchain, call_site, ptr, bytes_req, bytes_alloc,
|
||||
+ gfp_flags):
|
||||
+ print_header(event_name, common_cpu, common_secs, common_nsecs,
|
||||
+ common_pid, common_comm)
|
||||
|
||||
- print_uncommon(context)
|
||||
+ print_uncommon(context)
|
||||
|
||||
- print "call_site=%u, ptr=%u, bytes_req=%u, " \
|
||||
+ print "call_site=%u, ptr=%u, bytes_req=%u, " \
|
||||
"bytes_alloc=%u, gfp_flags=%s\n" % \
|
||||
(call_site, ptr, bytes_req, bytes_alloc,
|
||||
-
|
||||
flag_str("kmem__kmalloc", "gfp_flags", gfp_flags)),
|
||||
|
||||
def trace_unhandled(event_name, context, event_fields_dict):
|
||||
- try:
|
||||
- unhandled[event_name] += 1
|
||||
- except TypeError:
|
||||
- unhandled[event_name] = 1
|
||||
+ try:
|
||||
+ unhandled[event_name] += 1
|
||||
+ except TypeError:
|
||||
+ unhandled[event_name] = 1
|
||||
|
||||
def print_header(event_name, cpu, secs, nsecs, pid, comm):
|
||||
print "%-20s %5u %05u.%09u %8u %-20s " % \
|
||||
- (event_name, cpu, secs, nsecs, pid, comm),
|
||||
+ (event_name, cpu, secs, nsecs, pid, comm),
|
||||
|
||||
# print trace fields not included in handler args
|
||||
def print_uncommon(context):
|
||||
- print "common_preempt_count=%d, common_flags=%s, common_lock_depth=%d, " \
|
||||
- % (common_pc(context), trace_flag_str(common_flags(context)), \
|
||||
- common_lock_depth(context))
|
||||
+ print "common_preempt_count=%d, common_flags=%s, " \
|
||||
+ "common_lock_depth=%d, " % \
|
||||
+ (common_pc(context), trace_flag_str(common_flags(context)),
|
||||
+ common_lock_depth(context))
|
||||
|
||||
def print_unhandled():
|
||||
- keys = unhandled.keys()
|
||||
- if not keys:
|
||||
- return
|
||||
-
|
||||
- print "\nunhandled events:\n\n",
|
||||
-
|
||||
- print "%-40s %10s\n" % ("event", "count"),
|
||||
- print "%-40s %10s\n" % ("----------------------------------------", \
|
||||
- "-----------"),
|
||||
+ keys = unhandled.keys()
|
||||
+ if not keys:
|
||||
+ return
|
||||
+
|
||||
+ print "\nunhandled events:\n\n",
|
||||
+
|
||||
+ print "%-40s %10s\n" % ("event", "count"),
|
||||
+ print "%-40s %10s\n" % ("----------------------------------------", \
|
||||
+ "-----------"),
|
||||
|
||||
- for event_name in keys:
|
||||
- print "%-40s %10d\n" % (event_name, unhandled[event_name])
|
||||
+ for event_name in keys:
|
||||
+ print "%-40s %10d\n" % (event_name, unhandled[event_name])
|
||||
--- a/tools/perf/scripts/python/compaction-times.py
|
||||
+++ b/tools/perf/scripts/python/compaction-times.py
|
||||
@@ -216,15 +216,15 @@ def compaction__mm_compaction_migratepag
|
||||
pair(nr_migrated, nr_failed), None, None)
|
||||
|
||||
def compaction__mm_compaction_isolate_freepages(event_name, context, common_cpu,
|
||||
- common_secs, common_nsecs, common_pid, common_comm,
|
||||
- common_callchain, start_pfn, end_pfn, nr_scanned, nr_taken):
|
||||
+ common_secs, common_nsecs, common_pid, common_comm,
|
||||
+ common_callchain, start_pfn, end_pfn, nr_scanned, nr_taken):
|
||||
|
||||
chead.increment_pending(common_pid,
|
||||
None, pair(nr_scanned, nr_taken), None)
|
||||
|
||||
def compaction__mm_compaction_isolate_migratepages(event_name, context, common_cpu,
|
||||
- common_secs, common_nsecs, common_pid, common_comm,
|
||||
- common_callchain, start_pfn, end_pfn, nr_scanned, nr_taken):
|
||||
+ common_secs, common_nsecs, common_pid, common_comm,
|
||||
+ common_callchain, start_pfn, end_pfn, nr_scanned, nr_taken):
|
||||
|
||||
chead.increment_pending(common_pid,
|
||||
None, None, pair(nr_scanned, nr_taken))
|
||||
--- a/tools/perf/scripts/python/event_analyzing_sample.py
|
||||
+++ b/tools/perf/scripts/python/event_analyzing_sample.py
|
||||
@@ -37,7 +37,7 @@ con = sqlite3.connect("/dev/shm/perf.db"
|
||||
con.isolation_level = None
|
||||
|
||||
def trace_begin():
|
||||
- print "In trace_begin:\n"
|
||||
+ print "In trace_begin:\n"
|
||||
|
||||
#
|
||||
# Will create several tables at the start, pebs_ll is for PEBS data with
|
||||
@@ -102,7 +102,7 @@ def insert_db(event):
|
||||
event.ip, event.status, event.dse, event.dla, event.lat))
|
||||
|
||||
def trace_end():
|
||||
- print "In trace_end:\n"
|
||||
+ print "In trace_end:\n"
|
||||
# We show the basic info for the 2 type of event classes
|
||||
show_general_events()
|
||||
show_pebs_ll()
|
||||
@@ -187,4 +187,4 @@ def show_pebs_ll():
|
||||
print "%32s %8d %s" % (row[0], row[1], num2sym(row[1]))
|
||||
|
||||
def trace_unhandled(event_name, context, event_fields_dict):
|
||||
- print ' '.join(['%s=%s'%(k,str(v))for k,v in sorted(event_fields_dict.items())])
|
||||
+ print ' '.join(['%s=%s'%(k,str(v))for k,v in sorted(event_fields_dict.items())])
|
||||
--- a/tools/perf/scripts/python/failed-syscalls-by-pid.py
|
||||
+++ b/tools/perf/scripts/python/failed-syscalls-by-pid.py
|
||||
@@ -58,22 +58,22 @@ def syscalls__sys_exit(event_name, conte
|
||||
raw_syscalls__sys_exit(**locals())
|
||||
|
||||
def print_error_totals():
|
||||
- if for_comm is not None:
|
||||
- print("\nsyscall errors for %s:\n" % (for_comm))
|
||||
- else:
|
||||
- print("\nsyscall errors:\n")
|
||||
+ if for_comm is not None:
|
||||
+ print("\nsyscall errors for %s:\n" % (for_comm))
|
||||
+ else:
|
||||
+ print("\nsyscall errors:\n")
|
||||
|
||||
- print("%-30s %10s" % ("comm [pid]", "count"))
|
||||
- print("%-30s %10s" % ("------------------------------", "----------"))
|
||||
+ print("%-30s %10s" % ("comm [pid]", "count"))
|
||||
+ print("%-30s %10s" % ("------------------------------", "----------"))
|
||||
|
||||
- comm_keys = syscalls.keys()
|
||||
- for comm in comm_keys:
|
||||
- pid_keys = syscalls[comm].keys()
|
||||
- for pid in pid_keys:
|
||||
- print("\n%s [%d]" % (comm, pid))
|
||||
- id_keys = syscalls[comm][pid].keys()
|
||||
- for id in id_keys:
|
||||
- print(" syscall: %-16s" % syscall_name(id))
|
||||
- ret_keys = syscalls[comm][pid][id].keys()
|
||||
- for ret, val in sorted(syscalls[comm][pid][id].items(), key = lambda kv: (kv[1], kv[0]), reverse = True):
|
||||
- print(" err = %-20s %10d" % (strerror(ret), val))
|
||||
+ comm_keys = syscalls.keys()
|
||||
+ for comm in comm_keys:
|
||||
+ pid_keys = syscalls[comm].keys()
|
||||
+ for pid in pid_keys:
|
||||
+ print("\n%s [%d]" % (comm, pid))
|
||||
+ id_keys = syscalls[comm][pid].keys()
|
||||
+ for id in id_keys:
|
||||
+ print(" syscall: %-16s" % syscall_name(id))
|
||||
+ ret_keys = syscalls[comm][pid][id].keys()
|
||||
+ for ret, val in sorted(syscalls[comm][pid][id].items(), key = lambda kv: (kv[1], kv[0]), reverse = True):
|
||||
+ print(" err = %-20s %10d" % (strerror(ret), val))
|
||||
--- a/tools/perf/scripts/python/futex-contention.py
|
||||
+++ b/tools/perf/scripts/python/futex-contention.py
|
||||
@@ -46,5 +46,5 @@ def trace_end():
|
||||
for (tid, lock) in lock_waits:
|
||||
min, max, avg, count = lock_waits[tid, lock]
|
||||
print "%s[%d] lock %x contended %d times, %d avg ns" % \
|
||||
- (process_names[tid], tid, lock, count, avg)
|
||||
+ (process_names[tid], tid, lock, count, avg)
|
||||
|
||||
--- a/tools/perf/scripts/python/intel-pt-events.py
|
||||
+++ b/tools/perf/scripts/python/intel-pt-events.py
|
||||
@@ -85,22 +85,22 @@ def print_common_ip(sample, symbol, dso)
|
||||
print "%16x %s (%s)" % (ip, symbol, dso)
|
||||
|
||||
def process_event(param_dict):
|
||||
- event_attr = param_dict["attr"]
|
||||
- sample = param_dict["sample"]
|
||||
- raw_buf = param_dict["raw_buf"]
|
||||
- comm = param_dict["comm"]
|
||||
- name = param_dict["ev_name"]
|
||||
+ event_attr = param_dict["attr"]
|
||||
+ sample = param_dict["sample"]
|
||||
+ raw_buf = param_dict["raw_buf"]
|
||||
+ comm = param_dict["comm"]
|
||||
+ name = param_dict["ev_name"]
|
||||
|
||||
- # Symbol and dso info are not always resolved
|
||||
- if (param_dict.has_key("dso")):
|
||||
- dso = param_dict["dso"]
|
||||
- else:
|
||||
- dso = "[unknown]"
|
||||
+ # Symbol and dso info are not always resolved
|
||||
+ if (param_dict.has_key("dso")):
|
||||
+ dso = param_dict["dso"]
|
||||
+ else:
|
||||
+ dso = "[unknown]"
|
||||
|
||||
- if (param_dict.has_key("symbol")):
|
||||
- symbol = param_dict["symbol"]
|
||||
- else:
|
||||
- symbol = "[unknown]"
|
||||
+ if (param_dict.has_key("symbol")):
|
||||
+ symbol = param_dict["symbol"]
|
||||
+ else:
|
||||
+ symbol = "[unknown]"
|
||||
|
||||
if name == "ptwrite":
|
||||
print_common_start(comm, sample, name)
|
||||
--- a/tools/perf/scripts/python/mem-phys-addr.py
|
||||
+++ b/tools/perf/scripts/python/mem-phys-addr.py
|
||||
@@ -44,12 +44,13 @@ def print_memory_type():
|
||||
print("%-40s %10s %10s\n" % ("Memory type", "count", "percentage"), end='')
|
||||
print("%-40s %10s %10s\n" % ("----------------------------------------",
|
||||
"-----------", "-----------"),
|
||||
- end='');
|
||||
+ end='');
|
||||
total = sum(load_mem_type_cnt.values())
|
||||
for mem_type, count in sorted(load_mem_type_cnt.most_common(), \
|
||||
key = lambda kv: (kv[1], kv[0]), reverse = True):
|
||||
- print("%-40s %10d %10.1f%%\n" % (mem_type, count, 100 * count / total),
|
||||
- end='')
|
||||
+ print("%-40s %10d %10.1f%%\n" %
|
||||
+ (mem_type, count, 100 * count / total),
|
||||
+ end='')
|
||||
|
||||
def trace_begin():
|
||||
parse_iomem()
|
||||
--- a/tools/perf/scripts/python/net_dropmonitor.py
|
||||
+++ b/tools/perf/scripts/python/net_dropmonitor.py
|
||||
@@ -7,7 +7,7 @@ import os
|
||||
import sys
|
||||
|
||||
sys.path.append(os.environ['PERF_EXEC_PATH'] + \
|
||||
- '/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
|
||||
+ '/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
|
||||
|
||||
from perf_trace_context import *
|
||||
from Core import *
|
||||
--- a/tools/perf/scripts/python/netdev-times.py
|
||||
+++ b/tools/perf/scripts/python/netdev-times.py
|
||||
@@ -124,14 +124,16 @@ def print_receive(hunk):
|
||||
event = event_list[i]
|
||||
if event['event_name'] == 'napi_poll':
|
||||
print(PF_NAPI_POLL %
|
||||
- (diff_msec(base_t, event['event_t']), event['dev']))
|
||||
+ (diff_msec(base_t, event['event_t']),
|
||||
+ event['dev']))
|
||||
if i == len(event_list) - 1:
|
||||
print("")
|
||||
else:
|
||||
print(PF_JOINT)
|
||||
else:
|
||||
print(PF_NET_RECV %
|
||||
- (diff_msec(base_t, event['event_t']), event['skbaddr'],
|
||||
+ (diff_msec(base_t, event['event_t']),
|
||||
+ event['skbaddr'],
|
||||
event['len']))
|
||||
if 'comm' in event.keys():
|
||||
print(PF_WJOINT)
|
||||
@@ -256,7 +258,7 @@ def irq__irq_handler_exit(name, context,
|
||||
all_event_list.append(event_info)
|
||||
|
||||
def napi__napi_poll(name, context, cpu, sec, nsec, pid, comm, callchain, napi,
|
||||
- dev_name, work=None, budget=None):
|
||||
+ dev_name, work=None, budget=None):
|
||||
event_info = (name, context, cpu, nsecs(sec, nsec), pid, comm,
|
||||
napi, dev_name, work, budget)
|
||||
all_event_list.append(event_info)
|
||||
@@ -353,7 +355,7 @@ def handle_irq_softirq_exit(event_info):
|
||||
if irq_list == [] or event_list == 0:
|
||||
return
|
||||
rec_data = {'sirq_ent_t':sirq_ent_t, 'sirq_ext_t':time,
|
||||
- 'irq_list':irq_list, 'event_list':event_list}
|
||||
+ 'irq_list':irq_list, 'event_list':event_list}
|
||||
# merge information realted to a NET_RX softirq
|
||||
receive_hunk_list.append(rec_data)
|
||||
|
||||
@@ -390,7 +392,7 @@ def handle_netif_receive_skb(event_info)
|
||||
skbaddr, skblen, dev_name) = event_info
|
||||
if cpu in net_rx_dic.keys():
|
||||
rec_data = {'event_name':'netif_receive_skb',
|
||||
- 'event_t':time, 'skbaddr':skbaddr, 'len':skblen}
|
||||
+ 'event_t':time, 'skbaddr':skbaddr, 'len':skblen}
|
||||
event_list = net_rx_dic[cpu]['event_list']
|
||||
event_list.append(rec_data)
|
||||
rx_skb_list.insert(0, rec_data)
|
||||
--- a/tools/perf/scripts/python/sched-migration.py
|
||||
+++ b/tools/perf/scripts/python/sched-migration.py
|
||||
@@ -16,10 +16,10 @@ import sys
|
||||
|
||||
from collections import defaultdict
|
||||
try:
|
||||
- from UserList import UserList
|
||||
+ from UserList import UserList
|
||||
except ImportError:
|
||||
- # Python 3: UserList moved to the collections package
|
||||
- from collections import UserList
|
||||
+ # Python 3: UserList moved to the collections package
|
||||
+ from collections import UserList
|
||||
|
||||
sys.path.append(os.environ['PERF_EXEC_PATH'] + \
|
||||
'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
|
||||
--- a/tools/perf/scripts/python/sctop.py
|
||||
+++ b/tools/perf/scripts/python/sctop.py
|
||||
@@ -13,9 +13,9 @@ from __future__ import print_function
|
||||
import os, sys, time
|
||||
|
||||
try:
|
||||
- import thread
|
||||
+ import thread
|
||||
except ImportError:
|
||||
- import _thread as thread
|
||||
+ import _thread as thread
|
||||
|
||||
sys.path.append(os.environ['PERF_EXEC_PATH'] + \
|
||||
'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
|
||||
@@ -75,11 +75,12 @@ def print_syscall_totals(interval):
|
||||
|
||||
print("%-40s %10s" % ("event", "count"))
|
||||
print("%-40s %10s" %
|
||||
- ("----------------------------------------",
|
||||
- "----------"))
|
||||
+ ("----------------------------------------",
|
||||
+ "----------"))
|
||||
|
||||
- for id, val in sorted(syscalls.items(), key = lambda kv: (kv[1], kv[0]), \
|
||||
- reverse = True):
|
||||
+ for id, val in sorted(syscalls.items(),
|
||||
+ key = lambda kv: (kv[1], kv[0]),
|
||||
+ reverse = True):
|
||||
try:
|
||||
print("%-40s %10d" % (syscall_name(id), val))
|
||||
except TypeError:
|
||||
--- a/tools/perf/scripts/python/stackcollapse.py
|
||||
+++ b/tools/perf/scripts/python/stackcollapse.py
|
||||
@@ -27,7 +27,7 @@ from collections import defaultdict
|
||||
from optparse import OptionParser, make_option
|
||||
|
||||
sys.path.append(os.environ['PERF_EXEC_PATH'] + \
|
||||
- '/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
|
||||
+ '/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
|
||||
|
||||
from perf_trace_context import *
|
||||
from Core import *
|
||||
--- a/tools/perf/scripts/python/syscall-counts-by-pid.py
|
||||
+++ b/tools/perf/scripts/python/syscall-counts-by-pid.py
|
||||
@@ -39,11 +39,10 @@ def trace_end():
|
||||
print_syscall_totals()
|
||||
|
||||
def raw_syscalls__sys_enter(event_name, context, common_cpu,
|
||||
- common_secs, common_nsecs, common_pid, common_comm,
|
||||
- common_callchain, id, args):
|
||||
-
|
||||
+ common_secs, common_nsecs, common_pid, common_comm,
|
||||
+ common_callchain, id, args):
|
||||
if (for_comm and common_comm != for_comm) or \
|
||||
- (for_pid and common_pid != for_pid ):
|
||||
+ (for_pid and common_pid != for_pid ):
|
||||
return
|
||||
try:
|
||||
syscalls[common_comm][common_pid][id] += 1
|
||||
@@ -51,26 +50,26 @@ def raw_syscalls__sys_enter(event_name,
|
||||
syscalls[common_comm][common_pid][id] = 1
|
||||
|
||||
def syscalls__sys_enter(event_name, context, common_cpu,
|
||||
- common_secs, common_nsecs, common_pid, common_comm,
|
||||
- id, args):
|
||||
+ common_secs, common_nsecs, common_pid, common_comm,
|
||||
+ id, args):
|
||||
raw_syscalls__sys_enter(**locals())
|
||||
|
||||
def print_syscall_totals():
|
||||
- if for_comm is not None:
|
||||
- print("\nsyscall events for %s:\n" % (for_comm))
|
||||
- else:
|
||||
- print("\nsyscall events by comm/pid:\n")
|
||||
-
|
||||
- print("%-40s %10s" % ("comm [pid]/syscalls", "count"))
|
||||
- print("%-40s %10s" % ("----------------------------------------",
|
||||
- "----------"))
|
||||
-
|
||||
- comm_keys = syscalls.keys()
|
||||
- for comm in comm_keys:
|
||||
- pid_keys = syscalls[comm].keys()
|
||||
- for pid in pid_keys:
|
||||
- print("\n%s [%d]" % (comm, pid))
|
||||
- id_keys = syscalls[comm][pid].keys()
|
||||
- for id, val in sorted(syscalls[comm][pid].items(), \
|
||||
- key = lambda kv: (kv[1], kv[0]), reverse = True):
|
||||
- print(" %-38s %10d" % (syscall_name(id), val))
|
||||
+ if for_comm is not None:
|
||||
+ print("\nsyscall events for %s:\n" % (for_comm))
|
||||
+ else:
|
||||
+ print("\nsyscall events by comm/pid:\n")
|
||||
+
|
||||
+ print("%-40s %10s" % ("comm [pid]/syscalls", "count"))
|
||||
+ print("%-40s %10s" % ("----------------------------------------",
|
||||
+ "----------"))
|
||||
+
|
||||
+ comm_keys = syscalls.keys()
|
||||
+ for comm in comm_keys:
|
||||
+ pid_keys = syscalls[comm].keys()
|
||||
+ for pid in pid_keys:
|
||||
+ print("\n%s [%d]" % (comm, pid))
|
||||
+ id_keys = syscalls[comm][pid].keys()
|
||||
+ for id, val in sorted(syscalls[comm][pid].items(),
|
||||
+ key = lambda kv: (kv[1], kv[0]), reverse = True):
|
||||
+ print(" %-38s %10d" % (syscall_name(id), val))
|
||||
--- a/tools/perf/scripts/python/syscall-counts.py
|
||||
+++ b/tools/perf/scripts/python/syscall-counts.py
|
||||
@@ -36,8 +36,8 @@ def trace_end():
|
||||
print_syscall_totals()
|
||||
|
||||
def raw_syscalls__sys_enter(event_name, context, common_cpu,
|
||||
- common_secs, common_nsecs, common_pid, common_comm,
|
||||
- common_callchain, id, args):
|
||||
+ common_secs, common_nsecs, common_pid, common_comm,
|
||||
+ common_callchain, id, args):
|
||||
if for_comm is not None:
|
||||
if common_comm != for_comm:
|
||||
return
|
||||
@@ -47,20 +47,19 @@ def raw_syscalls__sys_enter(event_name,
|
||||
syscalls[id] = 1
|
||||
|
||||
def syscalls__sys_enter(event_name, context, common_cpu,
|
||||
- common_secs, common_nsecs, common_pid, common_comm,
|
||||
- id, args):
|
||||
+ common_secs, common_nsecs, common_pid, common_comm, id, args):
|
||||
raw_syscalls__sys_enter(**locals())
|
||||
|
||||
def print_syscall_totals():
|
||||
- if for_comm is not None:
|
||||
- print("\nsyscall events for %s:\n" % (for_comm))
|
||||
- else:
|
||||
- print("\nsyscall events:\n")
|
||||
+ if for_comm is not None:
|
||||
+ print("\nsyscall events for %s:\n" % (for_comm))
|
||||
+ else:
|
||||
+ print("\nsyscall events:\n")
|
||||
|
||||
- print("%-40s %10s" % ("event", "count"))
|
||||
- print("%-40s %10s" % ("----------------------------------------",
|
||||
- "-----------"))
|
||||
+ print("%-40s %10s" % ("event", "count"))
|
||||
+ print("%-40s %10s" % ("----------------------------------------",
|
||||
+ "-----------"))
|
||||
|
||||
- for id, val in sorted(syscalls.items(), key = lambda kv: (kv[1], kv[0]), \
|
||||
- reverse = True):
|
||||
- print("%-40s %10d" % (syscall_name(id), val))
|
||||
+ for id, val in sorted(syscalls.items(),
|
||||
+ key = lambda kv: (kv[1], kv[0]), reverse = True):
|
||||
+ print("%-40s %10d" % (syscall_name(id), val))
|
104
debian/patches/bugfix/all/perf-script-python-add-Python3-support-to-check-perf.patch
vendored
Normal file
104
debian/patches/bugfix/all/perf-script-python-add-Python3-support-to-check-perf.patch
vendored
Normal file
|
@ -0,0 +1,104 @@
|
|||
From: Tony Jones <tonyj@suse.de>
|
||||
Date: Fri, 1 Mar 2019 17:18:59 -0800
|
||||
Subject: perf script python: add Python3 support to check-perf-trace.py
|
||||
Origin: https://git.kernel.org/linus/57e604b16362273af6a517abaa6cd1133a7fc732
|
||||
Bug-Debian: https://bugs.debian.org/944641
|
||||
|
||||
Support both Python 2 and Python 3 in the check-perf-trace.py script.
|
||||
|
||||
There may be differences in the ordering of output lines due to
|
||||
differences in dictionary ordering etc. However the format within lines
|
||||
should be unchanged.
|
||||
|
||||
The use of from __future__ implies the minimum supported version of
|
||||
Python2 is now v2.6
|
||||
|
||||
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||||
Cc: Tom Zanussi <tzanussi@gmail.com>
|
||||
Link: http://lkml.kernel.org/r/20190302011903.2416-4-tonyj@suse.de
|
||||
Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/scripts/python/check-perf-trace.py | 31 ++++++++++++++------------
|
||||
1 file changed, 17 insertions(+), 14 deletions(-)
|
||||
|
||||
--- a/tools/perf/scripts/python/check-perf-trace.py
|
||||
+++ b/tools/perf/scripts/python/check-perf-trace.py
|
||||
@@ -7,6 +7,8 @@
|
||||
# events, etc. Basically, if this script runs successfully and
|
||||
# displays expected results, Python scripting support should be ok.
|
||||
|
||||
+from __future__ import print_function
|
||||
+
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -19,7 +21,7 @@ from perf_trace_context import *
|
||||
unhandled = autodict()
|
||||
|
||||
def trace_begin():
|
||||
- print "trace_begin"
|
||||
+ print("trace_begin")
|
||||
pass
|
||||
|
||||
def trace_end():
|
||||
@@ -33,7 +35,7 @@ def irq__softirq_entry(event_name, conte
|
||||
|
||||
print_uncommon(context)
|
||||
|
||||
- print "vec=%s\n" % (symbol_str("irq__softirq_entry", "vec", vec)),
|
||||
+ print("vec=%s" % (symbol_str("irq__softirq_entry", "vec", vec)))
|
||||
|
||||
def kmem__kmalloc(event_name, context, common_cpu,
|
||||
common_secs, common_nsecs, common_pid, common_comm,
|
||||
@@ -44,10 +46,10 @@ def kmem__kmalloc(event_name, context, c
|
||||
|
||||
print_uncommon(context)
|
||||
|
||||
- print "call_site=%u, ptr=%u, bytes_req=%u, " \
|
||||
- "bytes_alloc=%u, gfp_flags=%s\n" % \
|
||||
+ print("call_site=%u, ptr=%u, bytes_req=%u, "
|
||||
+ "bytes_alloc=%u, gfp_flags=%s" %
|
||||
(call_site, ptr, bytes_req, bytes_alloc,
|
||||
- flag_str("kmem__kmalloc", "gfp_flags", gfp_flags)),
|
||||
+ flag_str("kmem__kmalloc", "gfp_flags", gfp_flags)))
|
||||
|
||||
def trace_unhandled(event_name, context, event_fields_dict):
|
||||
try:
|
||||
@@ -56,26 +58,27 @@ def trace_unhandled(event_name, context,
|
||||
unhandled[event_name] = 1
|
||||
|
||||
def print_header(event_name, cpu, secs, nsecs, pid, comm):
|
||||
- print "%-20s %5u %05u.%09u %8u %-20s " % \
|
||||
+ print("%-20s %5u %05u.%09u %8u %-20s " %
|
||||
(event_name, cpu, secs, nsecs, pid, comm),
|
||||
+ end=' ')
|
||||
|
||||
# print trace fields not included in handler args
|
||||
def print_uncommon(context):
|
||||
- print "common_preempt_count=%d, common_flags=%s, " \
|
||||
- "common_lock_depth=%d, " % \
|
||||
+ print("common_preempt_count=%d, common_flags=%s, "
|
||||
+ "common_lock_depth=%d, " %
|
||||
(common_pc(context), trace_flag_str(common_flags(context)),
|
||||
- common_lock_depth(context))
|
||||
+ common_lock_depth(context)))
|
||||
|
||||
def print_unhandled():
|
||||
keys = unhandled.keys()
|
||||
if not keys:
|
||||
return
|
||||
|
||||
- print "\nunhandled events:\n\n",
|
||||
+ print("\nunhandled events:\n")
|
||||
|
||||
- print "%-40s %10s\n" % ("event", "count"),
|
||||
- print "%-40s %10s\n" % ("----------------------------------------", \
|
||||
- "-----------"),
|
||||
+ print("%-40s %10s" % ("event", "count"))
|
||||
+ print("%-40s %10s" % ("----------------------------------------",
|
||||
+ "-----------"))
|
||||
|
||||
for event_name in keys:
|
||||
- print "%-40s %10d\n" % (event_name, unhandled[event_name])
|
||||
+ print("%-40s %10d\n" % (event_name, unhandled[event_name]))
|
|
@ -182,6 +182,23 @@ bugfix/x86/tools-turbostat-Add-checks-for-failure-of-fgets-and-.patch
|
|||
bugfix/all/libbpf-add-soname-to-shared-object.patch
|
||||
bugfix/all/libbpf-link-shared-object-with-libelf.patch
|
||||
bugfix/all/libbpf-generate-pkg-config.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-netdev-tim.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-failed-sys.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-mem-phys-a.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-net_dropmo.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-powerpc-hc.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-sctop.py.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-stackcolla.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-stat-cpi.p.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-syscall-co.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-syscall-co-de667cce7f4f.patch
|
||||
bugfix/all/perf-script-python-Remove-mixed-indentation.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-futex-cont.patch
|
||||
bugfix/all/perf-script-python-add-Python3-support-to-check-perf.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-event_anal.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-intel-pt-e.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-export-to-.patch
|
||||
bugfix/all/perf-script-python-Add-Python3-support-to-export-to-ebf6c5c181ab.patch
|
||||
|
||||
# wireless: Disable regulatory.db direct loading (until we sort out signing)
|
||||
debian/wireless-disable-regulatory.db-direct-loading.patch
|
||||
|
|
Loading…
Reference in New Issue