Skip to content

Commit

Permalink
perf scripts python: intel-pt-events.py: Add Event Trace
Browse files Browse the repository at this point in the history
Add Event Trace to the intel-pt-events.py script. This shows how to unpack
the raw data from the new sample events in a Python script.

Signed-off-by: Adrian Hunter <[email protected]>
Cc: Alexander Shishkin <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: Jiri Olsa <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
  • Loading branch information
ahunter6 authored and acmel committed Feb 15, 2022
1 parent 2673859 commit 95f9bfc
Showing 1 changed file with 50 additions and 5 deletions.
55 changes: 50 additions & 5 deletions tools/perf/scripts/python/intel-pt-events.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,16 +76,16 @@ def trace_begin():
glb_args = ap.parse_args()
if glb_args.insn_trace:
print("Intel PT Instruction Trace")
itrace = "i0nsepwx"
itrace = "i0nsepwxI"
glb_insn = True
elif glb_args.src_trace:
print("Intel PT Source Trace")
itrace = "i0nsepwx"
itrace = "i0nsepwxI"
glb_insn = True
glb_src = True
else:
print("Intel PT Branch Trace, Power Events and PTWRITE")
itrace = "bepwx"
print("Intel PT Branch Trace, Power Events, Event Trace and PTWRITE")
itrace = "bepwxI"
global glb_disassembler
try:
glb_disassembler = LibXED()
Expand Down Expand Up @@ -149,6 +149,43 @@ def print_psb(raw_buf):
offset = data[1]
print("offset: %#x" % (offset), end=' ')

glb_cfe = ["", "INTR", "IRET", "SMI", "RSM", "SIPI", "INIT", "VMENTRY", "VMEXIT",
"VMEXIT_INTR", "SHUTDOWN", "", "UINT", "UIRET"] + [""] * 18
glb_evd = ["", "PFA", "VMXQ", "VMXR"] + [""] * 60

def print_evt(raw_buf):
data = struct.unpack_from("<BBH", raw_buf)
typ = data[0] & 0x1f
ip_flag = (data[0] & 0x80) >> 7
vector = data[1]
evd_cnt = data[2]
s = glb_cfe[typ]
if s:
print(" cfe: %s IP: %u vector: %u" % (s, ip_flag, vector), end=' ')
else:
print(" cfe: %u IP: %u vector: %u" % (typ, ip_flag, vector), end=' ')
pos = 4
for i in range(evd_cnt):
data = struct.unpack_from("<QQ", raw_buf)
et = data[0] & 0x3f
s = glb_evd[et]
if s:
print("%s: %#x" % (s, data[1]), end=' ')
else:
print("EVD_%u: %#x" % (et, data[1]), end=' ')

def print_iflag(raw_buf):
data = struct.unpack_from("<IQ", raw_buf)
iflag = data[0] & 1
old_iflag = iflag ^ 1
via_branch = data[0] & 2
branch_ip = data[1]
if via_branch:
s = "via"
else:
s = "non"
print("IFLAG: %u->%u %s branch" % (old_iflag, iflag, s), end=' ')

def common_start_str(comm, sample):
ts = sample["time"]
cpu = sample["cpu"]
Expand All @@ -164,7 +201,7 @@ def print_common_start(comm, sample, name):
# weight = sample["weight"]
# transaction = sample["transaction"]
# cpumode = get_optional_zero(sample, "cpumode")
print(common_start_str(comm, sample) + "%7s %19s" % (name, flags_disp), end=' ')
print(common_start_str(comm, sample) + "%8s %21s" % (name, flags_disp), end=' ')

def print_instructions_start(comm, sample):
if "x" in get_optional_null(sample, "flags"):
Expand Down Expand Up @@ -315,6 +352,14 @@ def do_process_event(param_dict):
print_common_start(comm, sample, name)
print_psb(raw_buf)
print_common_ip(param_dict, sample, symbol, dso)
elif name == "evt":
print_common_start(comm, sample, name)
print_evt(raw_buf)
print_common_ip(param_dict, sample, symbol, dso)
elif name == "iflag":
print_common_start(comm, sample, name)
print_iflag(raw_buf)
print_common_ip(param_dict, sample, symbol, dso)
else:
print_common_start(comm, sample, name)
print_common_ip(param_dict, sample, symbol, dso)
Expand Down

0 comments on commit 95f9bfc

Please sign in to comment.