]> Git Repo - linux.git/blobdiff - tools/perf/scripts/python/export-to-postgresql.py
Merge tag 'v5.9-rc2' into regulator-5.9
[linux.git] / tools / perf / scripts / python / export-to-postgresql.py
index 92713d93e95647235acee8998641f021020f3b19..d187e46c2683e8cd1ecccc6b1287c46598b0cacc 100644 (file)
@@ -353,7 +353,10 @@ do_query(query, 'CREATE TABLE threads ('
                'tid            integer)')
 do_query(query, 'CREATE TABLE comms ('
                'id             bigint          NOT NULL,'
-               'comm           varchar(16))')
+               'comm           varchar(16),'
+               'c_thread_id    bigint,'
+               'c_time         bigint,'
+               'exec_flag      boolean)')
 do_query(query, 'CREATE TABLE comm_threads ('
                'id             bigint          NOT NULL,'
                'comm_id        bigint,'
@@ -479,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,'
@@ -692,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"
 
@@ -756,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...")
@@ -763,7 +801,7 @@ def trace_begin():
        evsel_table(0, "unknown")
        machine_table(0, 0, "unknown")
        thread_table(0, 0, 0, -1, -1)
-       comm_table(0, "unknown")
+       comm_table(0, "unknown", 0, 0, 0)
        dso_table(0, 0, "unknown", "unknown", "")
        symbol_table(0, 0, 0, 0, 0, "unknown")
        sample_table(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
@@ -804,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)
@@ -825,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)')
@@ -846,11 +886,14 @@ 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 '
                                        'ADD CONSTRAINT machinefk  FOREIGN KEY (machine_id)   REFERENCES machines   (id),'
                                        'ADD CONSTRAINT processfk  FOREIGN KEY (process_id)   REFERENCES threads    (id)')
+       do_query(query, 'ALTER TABLE comms '
+                                       'ADD CONSTRAINT threadfk   FOREIGN KEY (c_thread_id)  REFERENCES threads    (id)')
        do_query(query, 'ALTER TABLE comm_threads '
                                        'ADD CONSTRAINT commfk     FOREIGN KEY (comm_id)      REFERENCES comms      (id),'
                                        'ADD CONSTRAINT threadfk   FOREIGN KEY (thread_id)    REFERENCES threads    (id)')
@@ -881,6 +924,8 @@ def trace_end():
                                        'ADD CONSTRAINT parent_call_pathfk FOREIGN KEY (parent_call_path_id) REFERENCES call_paths (id)')
                do_query(query, 'CREATE INDEX pcpid_idx ON calls (parent_call_path_id)')
                do_query(query, 'CREATE INDEX pid_idx ON calls (parent_id)')
+               do_query(query, 'ALTER TABLE comms ADD has_calls boolean')
+               do_query(query, 'UPDATE comms SET has_calls = TRUE WHERE comms.id IN (SELECT DISTINCT comm_id FROM calls)')
        do_query(query, 'ALTER TABLE ptwrite '
                                        'ADD CONSTRAINT idfk        FOREIGN KEY (id)           REFERENCES samples   (id)')
        do_query(query, 'ALTER TABLE  cbr '
@@ -893,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"):
@@ -905,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")
@@ -935,11 +988,11 @@ def thread_table(thread_id, machine_id, process_id, pid, tid, *x):
        value = struct.pack("!hiqiqiqiiii", 5, 8, thread_id, 8, machine_id, 8, process_id, 4, pid, 4, tid)
        thread_file.write(value)
 
-def comm_table(comm_id, comm_str, *x):
+def comm_table(comm_id, comm_str, thread_id, time, exec_flag, *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)
+       fmt = "!hiqi" + str(n) + "s" + "iqiqiB"
+       value = struct.pack(fmt, 5, 8, comm_id, n, comm_str, 8, thread_id, 8, time, 1, exec_flag)
        comm_file.write(value)
 
 def comm_thread_table(comm_thread_id, comm_id, thread_id, *x):
@@ -1002,7 +1055,7 @@ def cbr(id, raw_buf):
        cbr = data[0]
        MHz = (data[4] + 500) / 1000
        percent = ((cbr * 1000 / data[2]) + 5) / 10
-       value = struct.pack("!hiqiiiiii", 4, 8, id, 4, cbr, 4, MHz, 4, percent)
+       value = struct.pack("!hiqiiiiii", 4, 8, id, 4, cbr, 4, int(MHz), 4, int(percent))
        cbr_file.write(value)
 
 def mwait(id, raw_buf):
@@ -1051,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)
This page took 0.038992 seconds and 4 git commands to generate.