Ce sont au point mort-cycles-frontend et au point mort-cycles-backend dans "perf stat' résultat?
Quelqu'un sait ce qu'est le sens de au point mort-cycles-frontend et au point mort-cycles-backend en perf stat résultat ? J'ai cherché sur internet mais n'a pas trouvé la réponse. Grâce
$ 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
- Je ne suis pas sûr de ce que la vraie question est ici. Demandez ce que le frontend et le backend d'un PROCESSEUR? Veuillez lire ce très haut niveau introduction. Est-ce répondre à votre question?
- J'ai cherché et la recherche d'une semblable réponse... C'était la ressource la plus utile que j'ai trouvé d'Intel: software.intel.com/en-us/articles/...
- Non, presque personne ne sait ce que ces signifient vraiment. Mais le référencement manuel (comme dans le Manuel Selva réponse) combiné avec ce post (que je ne comprends pas tout encore), sont le plus proche que j'ai trouvé: sites.utexas.edu/jdm4372/2014/06/04/...
Vous devez vous connecter pour publier un commentaire.
La théorie:
Commençons par ceci: aujourd'hui, la CPU sont superscalar, ce qui signifie qu'ils peuvent exécuter plus d'une instruction par cycle (IPC). Les dernières architectures Intel peut aller jusqu'à 4 CIB (4 décodeurs d'instructions x86). Ne soyons pas apporter de macro /micro fusion dans le débat pour compliquer les choses plus :).
Généralement, la charge de travail n'atteignent pas la CIB=4 en raison des diverses ressources de querelles. Cela signifie que le CPU est gaspiller des cycles (nombre d'instructions est donné par le logiciel et le PROCESSEUR doit exécuter en quelques cycles que possible).
Nous pouvons diviser le total des cycles étant passé par le PROCESSEUR en 3 catégories:
Pour obtenir une classification de 4, le nombre de cycles de retraite d'être au plus près le nombre total de cycles. Gardez à l'esprit qu'à cette étape, tous les micro-opérations (uop) à la retraite à partir de la canalisation et d'engager leurs résultats dans des registres /caches. À ce stade, vous pouvez même avoir plus de 4 uop à la retraite, parce que ce nombre est donné par le nombre d'exécution de ports. Si vous avez seulement 25% des cycles de retraite 4 uop, alors vous allez avoir une vue d'ensemble de l'IPC de 1.
La cycles calé dans le back-end sont une perte de temps parce que le PROCESSEUR doit attendre pour les ressources (généralement la mémoire) ou pour terminer une longue période de latence des instructions (par exemple, transcedentals - sqrt, inverses, les divisions, etc.).
La cycles calé dans le front-end sont un gaspillage, car cela signifie que le Front-End ne se nourrit pas la Fin avec les micro-opérations. Cela peut signifier que vous avez manque dans le cache d'Instructions, ou instructions complexes qui ne sont pas déjà décodé dans le micro-op cache. Juste-à-temps, le code compilé exprime généralement ce comportement.
Une autre raison de décrochage est la branche de prédiction de la miss. Qui est appelé la mauvaise spéculation. Dans ce cas, uOps sont émises, mais ils sont rejetés car la BP prédit mal.
La mise en œuvre dans les profileurs:
Comment interprétez-vous l'ÊTRE et FE impasse des cycles?
Différents profileurs ont des approches différentes de ces mesures. Dans vTune, les catégories 1 à 3 ajouter jusqu'à se donner à 100% des cycles. Que les coutures raisonnable, soit parce que vous avez votre CPU bloqué (pas de uop sont à la retraite), soit il effectue utile de travail (uop) à la retraite. Voir plus ici: https://software.intel.com/sites/products/documentation/doclib/stdxe/2013SP1/amplifierxe/snb/index.htm
En perf cela ne se produit généralement pas. C'est un problème parce que quand vous voyez 125% cycles de l'impasse dans l'extrémité avant, vous ne savez pas comment l'interpréter. Vous pouvez lier l' >1 métrique avec le fait qu'il y a 4 décodeurs, mais si vous continuez le raisonnement, alors la CIB ne correspond pas.
Encore mieux, vous ne savez pas comment l'ampleur du problème. 125% de quoi? Ce qui ne l' #cycles de moyenne alors?
Personnellement, j'ai l'air un peu méfiant sur la perf de l'ÊTRE et de FE impasse des cycles et espérons que ce sera corrigé.
Probablement, nous allons obtenir la réponse finale par le débogage du code à partir d'ici: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/tools/perf/builtin-stat.c
Cmask = 1, Inv = 1, Any= 1
- UOPS_ISSUED.CORE_STALL_CYCLES - "Cycles où aucun uop ont été émises à l'OOO backend de la pipleine soit par fil logique").Pour convertir générique événements exportées par perf dans votre PROCESSEUR de la documentation d'événements bruts, vous pouvez exécuter:
Il va vous montrer quelque chose comme
Selon la Documentation Intel SDM volume 3B (j'ai un core i5-2520):
UOPS_ISSUED.TOUT:
Pour le point mort-cycles-backend événement se traduisant par événement=0xb1,umask=0x01 sur mon système, le même documentation dit:
UOPS_DISPATCHED.FIL de discussion:
Généralement, calé, les cycles sont des cycles où le processeur est en attente de quelque chose (de la mémoire après l'exécution d'une opération de chargement par exemple) et ne pas avoir d'autres trucs à faire. En outre, l'interface de PROCESSEUR est l'élément matériel chargé de récupérer et de décoder des instructions (les convertir en Uop) où comme la principale partie est responsable à l'exécution effective de l'Uop.
Un cycle CPU est “bloqué” lorsque le pipeline ne fait pas avancer pendant.
Processeur pipeline est composé de plusieurs étapes: le front-end est un groupe de ces étapes, qui est responsable de l'extraction et de décoder les phases, tandis que le back-end exécute les instructions. Il y a un tampon entre les front-end et back-end, de sorte que lorsque l'ancien est au point mort ces derniers peuvent avoir encore un peu de travail à faire.
Prises de http://paolobernardi.wordpress.com/2012/08/07/playing-around-with-perf/
Selon l'auteur de ces événements, ils ont défini de manière vague et sont approchées par des processeurs disponibles compteurs de performance. Que je sache, les perf ne prend pas en charge les formules pour calculer certaines synthétique de l'événement basé sur plusieurs événements de matériel, de sorte qu'il ne peut pas utiliser de front-end/back-end de décrochage de la méthode liée à partir d'Intel manuel d'Optimisation (mise en œuvre en VTune) http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf "B. 3.2 Hiérarchique De Haut En Bas La Caractérisation Des Performances De La Méthodologie"
Droit formules peuvent être utilisées avec certains scripts externes, comme cela a été fait dans l'Andi Kleen du pmu-outils (
toplev.py
): https://github.com/andikleen/pmu-tools (source), http://halobates.de/blog/p/262 (description):Commit qui a introduit l'impasse-cycles-frontend et au point mort-cycles-backend des événements au lieu de l'original universelle
stalled-cycles
:http://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/commit/?id=8f62242246351b5a4bc0c1f00c0c7003edea128a
perf stat
avec FE > 100% et pour toplev.py? Je viens de commencer à partir de courtes et simples boucles et 3G cycles pour la 3G instructions (1G sont les branches avec de 0,00% miss taux) avec 2G FE stands (perf stat
) et 1G stalles (IPC=1.00). Je pense que le problème est de définir correctement le "décrochage" pour le complexe OOO base et un autre est à interpréter correctement lestoplev.py
résultats.