perf scripts python: export-to-sqlite.py: Export switch events
Export switch events to a new table 'context_switches' and create a view 'context_switches_view'. The table and view will show automatically in the exported-sql-viewer.py script. If the table ends up empty, then it and the view are dropped. Committer testing: Use the exported-sql-viewer.py and look at "Tables" -> "context_switches": id machine_id time cpu thread_out_id comm_out_id thread_in_id comm_in_id flags 1 1 187836111885918 7 1 1 2 2 3 2 1 187836111889369 7 1 1 2 2 0 3 1 187836112464618 7 2 3 1 1 1 4 1 187836112465511 7 2 3 1 1 0 Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Jiri Olsa <jolsa@redhat.com> Link: http://lkml.kernel.org/r/20190710085810.1650-21-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
abde8722d9
commit
37c1f991b1
|
@ -306,6 +306,17 @@ do_query(query, 'CREATE TABLE pwrx ('
|
||||||
'last_cstate integer,'
|
'last_cstate integer,'
|
||||||
'wake_reason integer)')
|
'wake_reason integer)')
|
||||||
|
|
||||||
|
do_query(query, 'CREATE TABLE context_switches ('
|
||||||
|
'id integer NOT NULL PRIMARY KEY,'
|
||||||
|
'machine_id bigint,'
|
||||||
|
'time bigint,'
|
||||||
|
'cpu integer,'
|
||||||
|
'thread_out_id bigint,'
|
||||||
|
'comm_out_id bigint,'
|
||||||
|
'thread_in_id bigint,'
|
||||||
|
'comm_in_id bigint,'
|
||||||
|
'flags integer)')
|
||||||
|
|
||||||
# printf was added to sqlite in version 3.8.3
|
# printf was added to sqlite in version 3.8.3
|
||||||
sqlite_has_printf = False
|
sqlite_has_printf = False
|
||||||
try:
|
try:
|
||||||
|
@ -530,6 +541,29 @@ do_query(query, 'CREATE VIEW power_events_view AS '
|
||||||
' INNER JOIN selected_events ON selected_events.id = evsel_id'
|
' INNER JOIN selected_events ON selected_events.id = evsel_id'
|
||||||
' WHERE selected_events.name IN (\'cbr\',\'mwait\',\'exstop\',\'pwre\',\'pwrx\')')
|
' WHERE selected_events.name IN (\'cbr\',\'mwait\',\'exstop\',\'pwre\',\'pwrx\')')
|
||||||
|
|
||||||
|
do_query(query, 'CREATE VIEW context_switches_view AS '
|
||||||
|
'SELECT '
|
||||||
|
'context_switches.id,'
|
||||||
|
'context_switches.machine_id,'
|
||||||
|
'context_switches.time,'
|
||||||
|
'context_switches.cpu,'
|
||||||
|
'th_out.pid AS pid_out,'
|
||||||
|
'th_out.tid AS tid_out,'
|
||||||
|
'comm_out.comm AS comm_out,'
|
||||||
|
'th_in.pid AS pid_in,'
|
||||||
|
'th_in.tid AS tid_in,'
|
||||||
|
'comm_in.comm AS comm_in,'
|
||||||
|
'CASE WHEN context_switches.flags = 0 THEN \'in\''
|
||||||
|
' WHEN context_switches.flags = 1 THEN \'out\''
|
||||||
|
' WHEN context_switches.flags = 3 THEN \'out preempt\''
|
||||||
|
' ELSE context_switches.flags '
|
||||||
|
'END AS flags'
|
||||||
|
' FROM context_switches'
|
||||||
|
' INNER JOIN threads AS th_out ON th_out.id = context_switches.thread_out_id'
|
||||||
|
' INNER JOIN threads AS th_in ON th_in.id = context_switches.thread_in_id'
|
||||||
|
' INNER JOIN comms AS comm_out ON comm_out.id = context_switches.comm_out_id'
|
||||||
|
' INNER JOIN comms AS comm_in ON comm_in.id = context_switches.comm_in_id')
|
||||||
|
|
||||||
do_query(query, 'END TRANSACTION')
|
do_query(query, 'END TRANSACTION')
|
||||||
|
|
||||||
evsel_query = QSqlQuery(db)
|
evsel_query = QSqlQuery(db)
|
||||||
|
@ -571,6 +605,8 @@ exstop_query = QSqlQuery(db)
|
||||||
exstop_query.prepare("INSERT INTO exstop VALUES (?, ?)")
|
exstop_query.prepare("INSERT INTO exstop VALUES (?, ?)")
|
||||||
pwrx_query = QSqlQuery(db)
|
pwrx_query = QSqlQuery(db)
|
||||||
pwrx_query.prepare("INSERT INTO pwrx VALUES (?, ?, ?, ?)")
|
pwrx_query.prepare("INSERT INTO pwrx VALUES (?, ?, ?, ?)")
|
||||||
|
context_switch_query = QSqlQuery(db)
|
||||||
|
context_switch_query.prepare("INSERT INTO context_switches VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)")
|
||||||
|
|
||||||
def trace_begin():
|
def trace_begin():
|
||||||
printdate("Writing records...")
|
printdate("Writing records...")
|
||||||
|
@ -620,6 +656,8 @@ def trace_end():
|
||||||
drop("pwrx")
|
drop("pwrx")
|
||||||
if is_table_empty("cbr"):
|
if is_table_empty("cbr"):
|
||||||
drop("cbr")
|
drop("cbr")
|
||||||
|
if is_table_empty("context_switches"):
|
||||||
|
drop("context_switches")
|
||||||
|
|
||||||
if (unhandled_count):
|
if (unhandled_count):
|
||||||
printdate("Warning: ", unhandled_count, " unhandled events")
|
printdate("Warning: ", unhandled_count, " unhandled events")
|
||||||
|
@ -753,3 +791,6 @@ def synth_data(id, config, raw_buf, *x):
|
||||||
pwrx(id, raw_buf)
|
pwrx(id, raw_buf)
|
||||||
elif config == 5:
|
elif config == 5:
|
||||||
cbr(id, raw_buf)
|
cbr(id, raw_buf)
|
||||||
|
|
||||||
|
def context_switch_table(*x):
|
||||||
|
bind_exec(context_switch_query, 9, x)
|
||||||
|
|
Loading…
Reference in New Issue