forked from luck/tmp_suning_uos_patched
perf scripts python: export-to-postgresql.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. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Jiri Olsa <jolsa@redhat.com> Link: http://lkml.kernel.org/r/20190710085810.1650-22-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
37c1f991b1
commit
56789f3dc1
|
@ -482,6 +482,17 @@ do_query(query, 'CREATE TABLE pwrx ('
|
|||
'last_cstate integer,'
|
||||
'wake_reason integer)')
|
||||
|
||||
do_query(query, 'CREATE TABLE context_switches ('
|
||||
'id bigint NOT NULL,'
|
||||
'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)')
|
||||
|
||||
do_query(query, 'CREATE VIEW machines_view AS '
|
||||
'SELECT '
|
||||
'id,'
|
||||
|
@ -695,6 +706,29 @@ do_query(query, 'CREATE VIEW power_events_view AS '
|
|||
' INNER JOIN selected_events ON selected_events.id = samples.evsel_id'
|
||||
' ORDER BY samples.id')
|
||||
|
||||
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 CAST ( context_switches.flags AS VARCHAR(11) )'
|
||||
'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')
|
||||
|
||||
file_header = struct.pack("!11sii", b"PGCOPY\n\377\r\n\0", 0, 0)
|
||||
file_trailer = b"\377\377"
|
||||
|
||||
|
@ -759,6 +793,7 @@ mwait_file = open_output_file("mwait_table.bin")
|
|||
pwre_file = open_output_file("pwre_table.bin")
|
||||
exstop_file = open_output_file("exstop_table.bin")
|
||||
pwrx_file = open_output_file("pwrx_table.bin")
|
||||
context_switches_file = open_output_file("context_switches_table.bin")
|
||||
|
||||
def trace_begin():
|
||||
printdate("Writing to intermediate files...")
|
||||
|
@ -807,6 +842,7 @@ def trace_end():
|
|||
copy_output_file(pwre_file, "pwre")
|
||||
copy_output_file(exstop_file, "exstop")
|
||||
copy_output_file(pwrx_file, "pwrx")
|
||||
copy_output_file(context_switches_file, "context_switches")
|
||||
|
||||
printdate("Removing intermediate files...")
|
||||
remove_output_file(evsel_file)
|
||||
|
@ -828,6 +864,7 @@ def trace_end():
|
|||
remove_output_file(pwre_file)
|
||||
remove_output_file(exstop_file)
|
||||
remove_output_file(pwrx_file)
|
||||
remove_output_file(context_switches_file)
|
||||
os.rmdir(output_dir_name)
|
||||
printdate("Adding primary keys")
|
||||
do_query(query, 'ALTER TABLE selected_events ADD PRIMARY KEY (id)')
|
||||
|
@ -849,6 +886,7 @@ def trace_end():
|
|||
do_query(query, 'ALTER TABLE pwre ADD PRIMARY KEY (id)')
|
||||
do_query(query, 'ALTER TABLE exstop ADD PRIMARY KEY (id)')
|
||||
do_query(query, 'ALTER TABLE pwrx ADD PRIMARY KEY (id)')
|
||||
do_query(query, 'ALTER TABLE context_switches ADD PRIMARY KEY (id)')
|
||||
|
||||
printdate("Adding foreign keys")
|
||||
do_query(query, 'ALTER TABLE threads '
|
||||
|
@ -900,6 +938,12 @@ def trace_end():
|
|||
'ADD CONSTRAINT idfk FOREIGN KEY (id) REFERENCES samples (id)')
|
||||
do_query(query, 'ALTER TABLE pwrx '
|
||||
'ADD CONSTRAINT idfk FOREIGN KEY (id) REFERENCES samples (id)')
|
||||
do_query(query, 'ALTER TABLE context_switches '
|
||||
'ADD CONSTRAINT machinefk FOREIGN KEY (machine_id) REFERENCES machines (id),'
|
||||
'ADD CONSTRAINT toutfk FOREIGN KEY (thread_out_id) REFERENCES threads (id),'
|
||||
'ADD CONSTRAINT tinfk FOREIGN KEY (thread_in_id) REFERENCES threads (id),'
|
||||
'ADD CONSTRAINT coutfk FOREIGN KEY (comm_out_id) REFERENCES comms (id),'
|
||||
'ADD CONSTRAINT cinfk FOREIGN KEY (comm_in_id) REFERENCES comms (id)')
|
||||
|
||||
printdate("Dropping unused tables")
|
||||
if is_table_empty("ptwrite"):
|
||||
|
@ -912,6 +956,8 @@ def trace_end():
|
|||
drop("pwrx")
|
||||
if is_table_empty("cbr"):
|
||||
drop("cbr")
|
||||
if is_table_empty("context_switches"):
|
||||
drop("context_switches")
|
||||
|
||||
if (unhandled_count):
|
||||
printdate("Warning: ", unhandled_count, " unhandled events")
|
||||
|
@ -1058,3 +1104,8 @@ def synth_data(id, config, raw_buf, *x):
|
|||
pwrx(id, raw_buf)
|
||||
elif config == 5:
|
||||
cbr(id, raw_buf)
|
||||
|
||||
def context_switch_table(id, machine_id, time, cpu, thread_out_id, comm_out_id, thread_in_id, comm_in_id, flags, *x):
|
||||
fmt = "!hiqiqiqiiiqiqiqiqii"
|
||||
value = struct.pack(fmt, 9, 8, id, 8, machine_id, 8, time, 4, cpu, 8, thread_out_id, 8, comm_out_id, 8, thread_in_id, 8, comm_in_id, 4, flags)
|
||||
context_switches_file.write(value)
|
||||
|
|
Loading…
Reference in New Issue
Block a user