Skip to content

Commit

Permalink
ocperf: Handle :request=...:response=... syntax for OFFCORE_RESPONSE
Browse files Browse the repository at this point in the history
This syntax is used by some Intel tools and also appeared in toplev
models.

Fixes #58
  • Loading branch information
Andi Kleen committed Sep 4, 2016
1 parent 93ad970 commit de2375e
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 13 deletions.
28 changes: 15 additions & 13 deletions ocperf.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ def output_newstyle(self, newextra="", noname=False, period=False, name=""):
if name:
e += ",name=" + name
elif not noname:
e += ",name=%s" % (self.name.replace(".", "_"),)
e += ",name=%s" % (self.name.replace(".", "_").replace(":", "_").replace("=", "_"))
if period and self.period:
e += ",period=%d" % self.period
return e
Expand Down Expand Up @@ -385,6 +385,12 @@ def check_uncore_event(e):
"cpu_clk_unhalted.thread_any": (0x3c, 0, 1),
}

def update_ename(ev, name):
if ev:
ev = copy.deepcopy(ev)
ev.name = name
return ev

class Emap(object):
"""Read an event table."""

Expand Down Expand Up @@ -488,6 +494,10 @@ def getevent(self, e):
e = e.lower()
extra = ""
edelim = ""
m = re.match(r'([^:]+):request=([^:]+):response=([^:]+)', e)
if m:
ename = m.group(1) + "." + m.group(2) + "." + m.group(3)
return update_ename(self.getevent(ename), e)
m = re.match(r'(.*?):(.*)', e)
if m:
extra = m.group(2)
Expand All @@ -503,11 +513,11 @@ def getevent(self, e):
return ev
return self.events[e]
elif e.endswith("_ps"):
return self.getevent(e[:-3] + ":p" + extra)
return update_ename(self.getevent(e[:-3] + ":p" + extra), e)
elif e.endswith("_0") or e.endswith("_1"):
return self.getevent(e.replace("_0","").replace("_1","") + edelim + extra)
return update_ename(self.getevent(e.replace("_0","").replace("_1","") + edelim + extra), e)
elif e.startswith("offcore") and (e + "_0") in self.events:
return self.getevent(e + "_0" + edelim + extra)
return update_ename(self.getevent(e + "_0" + edelim + extra), e)
elif e in self.uncore_events:
return check_uncore_event(self.uncore_events[e])
return None
Expand Down Expand Up @@ -719,17 +729,9 @@ def process_events(event, print_only, period):
start = ""
end = ""
else:
extra = ""
m = re.match("([^:]*):(.*)", i)
if m:
extra = m.group(2)
i = m.group(1)
ev = emap.getevent(i)
if ev:
i = ev.output(flags=extra, period=period)
else:
if extra:
i += ":" + extra
i = ev.output(period=period)
if ev:
if ev.msr:
msr.checked_writemsr(ev.msr, ev.msrval, print_only)
Expand Down
7 changes: 7 additions & 0 deletions tester
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,15 @@ checkp cpu/BR_INST_RETIRED.CONDITIONAL,foo=bar/p 'event=0xc4,umask=0x1,name=br_
checkp cpu/BR_INST_RETIRED.CONDITIONAL,foo=bar/ppu 'event=0xc4,umask=0x1,name=br_inst_retired_conditional,foo=bar/ppu$'
export EVENTMAP=${cpus[wsm-sp]}
DIRECT_MSR=1 checkp l2_write.rfo.m_state:c4 'r4000827'
unset DIRECT_MSR
#checkp l2_write.rfo.m_state:c4 'cpu/event=0x27,umask=0x8,cmask=4,name=l2_write_rfo_m_state/'

export EVENTMAP=${cpus[hsx]}
# check :request :response syntax
checkp OFFCORE_RESPONSE:request=DEMAND_RFO:response=LLC_MISS.REMOTE_HITM \
cpu/event=0xb7,umask=0x1,offcore_rsp=0x107fc00002,name=offcore_response_request_demand_rfo_response_llc_miss_remote_hitm/


trap "" ERR 0

echo SUCCEEDED

0 comments on commit de2375e

Please sign in to comment.