I have a test case to observe perf iTLB-loads,iTLB-load-misses by
perf stat -e dTLB-loads,dTLB-load-misses,iTLB-loads,iTLB-load-misses -p 22479
and get the output :
Performance counter stats for process id '22479':
1,262,817 dTLB-loads
13,950 dTLB-load-misses # 1.10% of all dTLB cache hits
75 iTLB-loads
6,882 iTLB-load-misses # 9176.00% of all iTLB cache hits
3.999720948 seconds time elapsed
I have no idea how to interpret iTLB-loads only 75 but iTLB-load-misses 6,882 ?!
lscpu showes : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
Edit :
May I interpret it as the following :
do (75+6882) times of iTLB-loads , there are 75 times hits but 6882 times misses ?
Edit :
ocperf.py list | wc -l
Downloading https://download.01.org/perfmon/mapfile.csv to mapfile.csv
Traceback (most recent call last):
File "/home/marschen/tools/pmu-tools-master/ocperf.py", line 1012, in <module>
emap = find_emap()
File "/home/marschen/tools/pmu-tools-master/ocperf.py", line 831, in find_emap
event_download.download(el, toget)
File "/home/marschen/tools/pmu-tools-master/event_download.py", line 105, in download
getfile(modelpath, dir, "mapfile.csv")
File "/home/marschen/tools/pmu-tools-master/event_download.py", line 86, in getfile
f = urlopen(url)
File "/usr/lib64/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib64/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/usr/lib64/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/usr/lib64/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/usr/lib64/python2.7/urllib2.py", line 1258, in https_open
context=self._context, check_hostname=self._check_hostname)
File "/usr/lib64/python2.7/urllib2.py", line 1211, in do_open
h.request(req.get_method(), req.get_selector(), req.data, headers)
File "/usr/lib64/python2.7/httplib.py", line 1017, in request
self._send_request(method, url, body, headers)
File "/usr/lib64/python2.7/httplib.py", line 1051, in _send_request
self.endheaders(body)
File "/usr/lib64/python2.7/httplib.py", line 1013, in endheaders
self._send_output(message_body)
File "/usr/lib64/python2.7/httplib.py", line 864, in _send_output
self.send(msg)
File "/usr/lib64/python2.7/httplib.py", line 826, in send
self.connect()
File "/usr/lib64/python2.7/httplib.py", line 1227, in connect
HTTPConnection.connect(self)
File "/usr/lib64/python2.7/httplib.py", line 807, in connect
self.timeout, self.source_address)
File "/usr/lib64/python2.7/socket.py", line 562, in create_connection
sock.connect(sa)
File "/usr/lib64/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
iTLB-loads
is mapped to. Skylake doesn't seem to have a counter for iTLB accesses, only for misses (frontend_retired.itlb_miss
inocperf.py
). The uop cache is virtually addressed, so fetching uops from the uop cache (DSB) doesn't require TLB accesses if it hits. – Chiquitachiricoperf
is actually using foriTLB-loads
, and find out what it means. I tried usingperf --debug verbose=2
, but I'm not sure if those numbers are the same event / mask numbers that you can find documentation like oprofile.sourceforge.net/docs/intel-haswell-events.php, or like you can see withocperf.py stat -e frontend_retired.itlb_miss
– Chiquitachiricomake
helps. I don't think I had to let it install anything in /usr/local; I just run it from a symlink into the source directory (where I have agit clone
of the repo) – Chiquitachiricoperf
, but IDK how up to data that readme is. Current Linux is 4.15 or so, but RHEL does have kernel patches... – Chiquitachiricoperf list pmu
orperf list --long-desc pmu
should print all aliases and the events they are mapped to. – Uintathereperf list pmu
looks like what you get fromocperf.py list
, but without the simple/generic event names likeLLC-loads
.perf list --details iTLB-loads
sounds like it's supposed to be useful from the docs, but it isn't. It just says "[Hardware cache event]
" and prints some generic stuff. – Chiquitachirico/sys/bus/event_source/devices/cpu/events
. The name of the file is itself the alias and each file contains the event code of the actual performance event. The alias names of other performance events for devices other than the CPU can be found in/sys/bus/event_source/devices/<dev>/events
. – Uintatherefind -L /sys/bus/event_source/ -iname '*tlb*'
doesn't find any tlb events anywhere..../cpu/events
has what perf calls "Hardware event", but not any of the "Hardware cache event" names. – ChiquitachiricoiTLB-loads
is mapped toITLB_MISSES.STLB_HIT
andiTLB-load-misses
is mapped toITLB_MISSES.WALK_COMPLETED
. The numbers make sense now. – UintathereiTLB-loads
is mapped toITLB_MISSES.STLB_HIT
andiTLB-load-misses
is mapped toITLB_MISSES.MISS_CAUSES_A_WALK
. – Uintathere