Was sind "stalled-cycles-frontend" und "stalled-cycles-backend" in "perf stat"?
Weiß jemand, was ist der Sinn des ins stocken geraten-Zyklen-frontend und ins stocken geraten-Zyklen-backend in perf stat-Ergebnis ? Ich suchte im internet, aber nicht die Antwort finden. Dank
$ sudo perf stat ls
Performance counter stats for 'ls':
0.602144 task-clock # 0.762 CPUs utilized
0 context-switches # 0.000 K/sec
0 CPU-migrations # 0.000 K/sec
236 page-faults # 0.392 M/sec
768956 cycles # 1.277 GHz
962999 stalled-cycles-frontend # 125.23% frontend cycles idle
634360 stalled-cycles-backend # 82.50% backend cycles idle
890060 instructions # 1.16 insns per cycle
# 1.08 stalled cycles per insn
179378 branches # 297.899 M/sec
9362 branch-misses # 5.22% of all branches [48.33%]
0.000790562 seconds time elapsed
InformationsquelleAutor der Frage Dafan | 2014-03-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Theorie:
Let ' s start aus: partnerschaftsmodelle CPUs sind superskalar, das heißt, Sie können ausführen, mehr als eine Instruktion pro Zyklus (IPC). Neueste Intel-Architekturen kann bis zu 4 IPC (4 x86-instruction-Decoder). Lassen Sie uns nicht bringen, makro - /Mikro-fusion in Diskussion, um die Dinge zu komplizieren mehr :).
In der Regel, Arbeitslasten nicht erreichen IPC=4 durch verschiedene Ressourcen-Streitereien. Dies bedeutet, dass die CPU verschwenden Zyklen (Anzahl der Anweisungen, die gegeben ist durch die software und die CPU ausführen muss, Sie in so wenig Zyklen wie möglich).
Können wir teilen die Gesamt-Zyklen ausgegeben wird, durch die CPU in 3 Kategorien:
Um einen IPC von 4, die Zahl der Zyklen Ruhestand hat die Nähe zu der Gesamtanzahl der Zyklen. Beachten Sie, dass in dieser Phase alle micro-operations (uOps) Ausscheiden aus der pipeline und zu Begehen, deren Ergebnisse in die Register /caches. In diesem Stadium können Sie sogar noch mehr als 4 uOps den Ruhestand, weil diese Anzahl ist gegeben durch die Anzahl der execution ports. Wenn Sie nur 25% der Zyklen Ruhestand 4 uOps, dann werden Sie mit einem Gesamt-IPC von 1.
Den Zyklen zum Stillstand kamen in den back-end - sind eine Verschwendung, weil die CPU warten muss, bis die Ressourcen (meist Speicher) oder auf fertig stellen, lange Wartezeiten Anweisungen (z.B. transcedentals - sqrt, kehrwerte, Spaltungen, etc..).
Den Zyklen zum Stillstand kamen in den front-end - sind eine Verschwendung, weil das bedeutet, dass die Front-End-nicht-feed-Back-End mit Mikro-Operationen. Dies kann bedeuten, dass Sie haben, findet in der Instruction cache, oder komplexe Anweisungen, die nicht bereits dekodiert, die in der micro-op-cache. Just-in-time-kompilierten code in der Regel drückt dieses Verhalten.
Einem anderen stall Grund ist die branch prediction verpassen. Dass heißt schlechte Spekulation. In diesem Fall uOps sind ausgestellt, aber Sie werden ausrangiert, weil der BP vorhergesagt falsch.
Die Umsetzung in Profiler:
Wie interpretieren Sie die BE-und FE-angehaltene Zyklen?
Verschiedenen profilern haben unterschiedliche Ansätze, die auf diesen Metriken. In vTune, Kategorien 1 bis 3 fügen Sie bis zu 100% der Zyklen. Dass die Nähte vernünftig, weil entweder hast du deine CPU ins stocken geraten (keine uOps geht in den Ruhestand) entweder er führt nützliche Arbeit (uOps) in den Ruhestand. Weitere Informationen finden Sie hier: https://software.intel.com/sites/products/documentation/doclib/stdxe/2013SP1/amplifierxe/snb/index.htm
In perf diese in der Regel nicht passieren. Das ist ein problem, weil, wenn Sie sehen, 125% Zyklen zum Stillstand kamen in den front-end - Sie nicht wissen, wie Sie wirklich, interpretieren Sie diese. Sie konnte link das >1 Metrik mit der Tatsache, dass es 4-Decoder, aber wenn man weiter die Argumentation, dann ist die IPC nicht übereinstimmt.
Sogar besser, Sie nicht wissen, wie groß das problem ist. 125% von was? Was haben die #Zyklen bedeuten dann?
Ich persönlich ein bisschen misstrauisch auf perf s-und FE-angehaltene Zyklen und hoffe, das wird behoben.
Wahrscheinlich werden wir die endgültige Antwort durch Debuggen des Codes von hier: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/tools/perf/builtin-stat.c
InformationsquelleAutor der Antwort VAndrei
Konvertieren generische Ereignisse exportiert perf in Ihre CPU-Dokumentation raw-Ereignisse, die Sie ausführen können:
Wird es Ihnen zeigen, so etwas wie
Entsprechend der Intel-Dokumentation SDM-Band 3B (ich habe einen core i5-2520):
UOPS_ISSUED.ALLE:
Für die ins stocken geraten-Zyklen-backend-event-übersetzung für Ereignis=0xb1,umask=0x01 auf meinem system die gleiche Dokumentation sagt:
UOPS_DISPATCHED.THREAD:
In der Regel, angehaltene Zyklen sind Zyklen, wo der Prozessor ist, etwas zu warten (Speicher eingespeist werden, nach dem ausführen einer load-operation zum Beispiel) und nicht noch andere Sachen zu tun. Darüber hinaus wird der frontend-Teil der CPU ist das Stück hardware ist verantwortlich für das Holen und Dekodieren von Instruktionen (konvertieren Sie Sie in UOPs), wo als backend-Teil verantwortlich ist, effektiv zu führen UOPs.
InformationsquelleAutor der Antwort Manuel Selva
Einem CPU-Zyklus ist "angehalten", wenn die pipeline nicht Voraus, während Sie.
Prozessor-pipeline besteht aus mehreren Phasen: das front-end ist eine Gruppe von Phasen, die verantwortlich ist für den fetch-und decode-Phasen, während die back-end führt die Anweisungen. Es ist ein Puffer zwischen front-end und back-end, so dass, wenn die ehemaligen ist ins stocken geraten letztere können noch einige Arbeit zu tun.
Entnommen http://paolobernardi.wordpress.com/2012/08/07/playing-around-with-perf/
InformationsquelleAutor der Antwort Milind Dumbare
Laut Autor diese Ereignisse, Sie definiert sind lose und werden angenähert durch die verfügbaren CPU-Leistungsindikatoren. Ich weiß, perf unterstützt keine Formeln zum berechnen einige synthetische event basiert auf mehrere hardware-Ereignisse, also kann es nicht verwenden front-end/back-end-stall gebunden-Methode von Intel manuelle Optimierung (Umgesetzt in VTune) http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf "B. 3.2 Hierarchische Top-Down Performance-Charakterisierung Methodik"
Richtigen Formeln können verwendet werden, mit einigen externen scripting, wie es gemacht wurde Andi Kleen ' s pmu-tools (
toplev.py
): https://github.com/andikleen/pmu-tools (Quelle), http://halobates.de/blog/p/262 (Beschreibung):Begehen eingeführt, die ins stocken geraten-Zyklen-frontend und ins stocken geraten-Zyklen-backend-Veranstaltungen statt original universal
stalled-cycles
:http://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/commit/?id=8f62242246351b5a4bc0c1f00c0c7003edea128a
InformationsquelleAutor der Antwort osgx