warum perf stat-show "abgewürgt-Zyklen-backend" als " <nicht unterstützt>?
Läuft perf stat ls
zeigt dies:
Performance counter stats for 'ls':
1.388670 task-clock # 0.067 CPUs utilized
2 context-switches # 0.001 M/sec
0 cpu-migrations # 0.000 K/sec
266 page-faults # 0.192 M/sec
3515391 cycles # 2.531 GHz
2096636 stalled-cycles-frontend # 59.64% frontend cycles idle
<not supported> stalled-cycles-backend
2927468 instructions # 0.83 insns per cycle
# 0.72 stalled cycles per insn
615636 branches # 443.328 M/sec
22172 branch-misses # 3.60% of all branches
0.020657192 seconds time elapsed
Warum ist ins stocken geraten-Zyklen-backend-angezeigt als "nicht unterstützt"? Welche Art von CPU, hardware, kernel-oder user-space-software brauche ich, um diesen Wert anzuzeigen?
Derzeit versucht, diese auf RHEL mit Linux 3.12 für x86_64, passend zu den "perf" - version, die auf verschiedenen Intel-Core-i5-und i7-Systemen (Ivy-Bridge-Typ). Keiner von Ihnen Unterstützung ins stocken geraten-Zyklen-backend.
Paar mehr Infos:
$ perf list | grep stalled
stalled-cycles-frontend OR idle-cycles-frontend [Hardware event]
stalled-cycles-frontend OR cpu/stalled-cycles-frontend/[Kernel PMU event]
$ ls /sys/devices/cpu/events/
branch-instructions bus-cycles cache-references instructions mem-stores
branch-misses cache-misses cpu-cycles mem-loads stalled-cycles-frontend
$ cat /sys/bus/event_source/devices/cpu/events/stalled-cycles-frontend
event=0x0e,umask=0x01,inv,cmask=0x01
Edit: gerade versucht, diese auf einem AMD Phenom II X6 1045T CPU unter Ubuntu 12.04 mit Linux 3.2 (32bit) - und hier spielt es zeigen die Werte für beide ins stocken geraten-Zyklen-frontend und ins stocken geraten-Zyklen-backend.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht aus wie
perf
wurde nicht aktualisiert, um zu verstehen, all die performance-monitoring-Ereignisse, die Ivy-Bridge unterstützt. Zum Glück gibt es einen generischen, wenn auch umständlich, das interface, der Ihnen Zugriff auf die vollständige Liste von performance-monitoring-Ereignisse. Ich wollte nicht sehenstalled-cycles-backend
in der Liste, wenn ich gab ihn einen kurzen Blick, aber vielleicht habe ich verpasst haben, oder vielleicht haben Sie gebrochen, hinunter durch all die verschiedenen Ereignisse, die könnte stall das backend.Beginnen wir mit
...zeigt die folgende HINWEIS
...bewaffnet mit, dass die URL, die Sie am Ende in
...Sie möchten in Abschnitt 19.3
...also für
architectural
Veranstaltungen, die Sie brauchen Tabelle 19-1... jetzt kommt der schwierige Teil, Sie nehmen die
UMask Value
als die oberen 2 hex-Ziffern und dieEvent Num
ist die unteren 2 hex-Ziffern des 4-hex-digit hardware-register-Nummer gegebenperf stat
.... es sagt
NNN
aber Sie können esNNNN
. Lassen Sie uns stellen Sie sicher, dass das funktioniert, Fragen wirperf stat
für cache-misses, die sowohl als eine symbolische Veranstaltung name und als hex-Zahl aus der Tabelle 19-1. Wir rufen diedate
Befehl für Einfachheit.Wie Sie sehen können, berichtet die gleiche Zahl, soweit so gut. Jetzt gehen wir auf Tabelle 19-5 für die nicht-Architektur-hardware-Registern, von denen es zu viele auch hier in die Liste, aber ich werde Liste ein paar:
-e r10e
aber das hat nicht ganz; für letztere könnte es sein-e r1b1
nach stackoverflow.com/questions/22165299; das wäre UOPS_EXECUTED.THREAD nach dem Intel-PDF - nicht sicher, ob das sinnvoll?Den
perf
(oder den kernel-Teil) wurde nicht aktualisiert, um die Unterstützung Ihrer CPU, daher perf ist nicht in der Lage, um anzeigen generisches event-name "ins stocken geraten-Zyklen-backend" tatsächlichen HW-Ereignis.In einem solchen Fall kann es einfacher sein, zu finden, event-Namen, z.B. für Intel CPUs - Intel-Optimierung Handbuch http://www.intel.com/content/dam/doc/manual/64-ia-32-architectures-optimization-manual.pdf (welche Gruppen Veranstaltungen nach Typ auf und erklärt, wie man mit Ihnen misst verschiedene Teile). Don ' T haben ein ähnliches Dokument für AMD.
Verwenden event-Namen mit perf ohne manuelle Konvertierung in raw-Ereignis-ids (wie amdn sagt in seinem Antwort), können Sie den Konverter benutzen Skripte
showevtinfo
undcheck_events
aus perfmon2 (libpfm4; examples Ordner), wie im Artikel beschrieben "Wie monitor die volle Bandbreite der CPU-performance-Veranstaltungen" von Bojan Nikolic http://www.bnikolic.co.uk/blog/hpc-prof-events.html.perfmon2
weiß AMD und Intel CPUs, und geschrieben in C/C++Für Intel CPUs der einfachste Weg ist die Verwendung
ocperf
wrapper überperf
von Intels open-source-python-Projekt von Andi Kleen "pmu-tools" gehostet bei github https://github.com/andikleen/pmu-tools eingeführt und hier in ML: https://lwn.net/Articles/556983/ und in Andi ' s blog http://halobates.de/blog/p/245Den
ocperf
versteht alle intel-event-Namen aus der Intel-Optimierung Handbuch.ocperf
unterstützen auch alle HW-Ereignis mit älteren linux-Kerneln. Es hat seine eigene Datenbank, in der tsv-oder json-format mit allen HW-Ereignisse und deren codes auf https://download.01.org/perfmon/ (es ist auto-downloader in pmu-tools), und die Datenbank wird ständig aktualisiert von Intel Arbeitgeber. Format der Datenbank ist dokumentiert in der readme: https://download.01.org/perfmon/readme.txtFür Sandy Bridge/Ivy Bridge oder Haswell, und Kernel 3.10 oder höher, können Sie auch
toplev.py
Skript von "pmu-tools" zu untersuchen, Leistung. Hier ist die Beschreibung von seinem Autor, Andi Kleen, http://halobates.de/blog/p/262 "pmu-tools, Teil II: toplev", basierend auf "Top-down" - Methode von Ahmad Yasin "Wie Tune-Anwendungen Verwenden einen Top-Down-Charakterisierung von Mikroarchitektonische Fragen und "Top-Down-Analyse. Nie verloren mit Leistungsindikatoren"Gerade gefunden Re: perf, x86: Hinzufügen von teilen der restlichen haswell PMU-Funktionalität:
So IIUC ins stocken geraten-Zyklen-backend-Zähler sind zu unzuverlässig auf Ivy Bridge, und das ist, warum die kernel-Entwickler haben beschlossen, nicht unterstützen.
Und sicher genug, Linux' perf_event_intel.c unterstützt
PERF_COUNT_HW_STALLED_CYCLES_BACKEND
für Nehalem, Xeon E7 und SandyBridge, aber nicht für IvyBridge.PERF_COUNT_HW_STALLED_CYCLES_FRONTEND
unterstützt IvyBridge, obwohl.Also ich denke, es wird nicht eine Möglichkeit, diese Zähler auf meine aktuelle CPU - wechseln Sie entweder CPUs oder verwenden Sie die vollständige top-down-Methodik erwähnt, in der E-mail (und beschrieben hier und hier)