Кто-нибудь знает, в чем смысл stalled-циклов-frontend и stalled-циклов-backend в травмопункте результате стат ? Я искал в интернете, но не нашла ответа. Спасибо
$ 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
Теория:
Позвольте'ы начать с этого: сегодня'процессор с'с суперскалярной, что означает, что они могут выполнять более одной инструкции за такт (IPC). Последний архитектур Intel может доходить до 4 МПК (4 х86 декодеры инструкция). Позвольте's не принесет макро / микро фьюжн в дискуссию, чтобы усложнить вещи еще больше :).
Как правило, нагрузки не достигают МПК=4 из-за различных конфликтов ресурсов. Это означает, что процессор тратит циклы (номер инструкции дается программного обеспечения и процессора, чтобы выполнить их в несколько циклов, как это возможно).
Мы можем разделить общую циклов, затрачиваемых процессором на 3 категории:
Чтобы получить МПК 4, Количество циклыпенсию** должно быть близко к общему количеству циклов. Имейте в виду, что на данном этапе, все микро-операции (uOps) уйти из трубопровода и фиксации их результатов в регистры / кэши. На этом этапе вы сможете есть даже больше, чем 4 uOps пенсию, поскольку это число определяется количество портов исполнение. Если у вас есть только 25% циклов пенсию 4 uOps, то вы будете иметь общую МПК 1.
В циклы тупик в админцентр являются пустой тратой, потому что центральный процессор вынужден ждать освобождения ресурсов (памяти) или для отделки длинные инструкции задержкой (например, transcedentals - корень, обратные, подразделениях и т. д.).
В циклы в тупик в фронт-енд являются пустой тратой, потому что это означает, что передний конец не кормить задний конец с микро-операции. Это может означать, что у вас не попадает в кэш инструкций или сложных инструкций, которые уже не декодируется в микро-ФП кэш. Просто-в-время скомпилированный код, как правило, выражает такое поведение.
Еще одна отвлекающая причина предсказание ветвлений Мисс. Это называется плохой спекуляции. В этом случае uOps выдаются, но они отбрасываются, потому что BP предсказала неверно.
Реализация в профайлеры:
Как вы трактуете быть и Fe заглох циклов?
Различные профайлеры имеют разные подходы на эти показатели. В втуне, категорий 1-3 Добавить, чтобы дать 100% циклов. Что швы разумно, потому что либо у вас процессор в тупик (нет uOps уходят на пенсию) либо он выполняет полезную работу (uOps) уходит. Подробнее можно посмотреть здесь: https://software.intel.com/sites/products/documentation/doclib/stdxe/2013SP1/amplifierxe/snb/index.htm
В производительности это, как правило, не бывает. Что's не проблема, потому что когда видишь 125% циклов в тупик в передней части автомобиля, вы не'т знаем как на самом деле трактовать это. Вы могли бы связать >1 метрическая с тем, что есть 4 декодеры, но если продолжить рассуждения, то МПК выиграл'т матч.
Даже лучше, вы не'т знаю, насколько большой проблемой является. 125% из чего? Что делать циклами #значит?
Я лично выглядеть немного подозрительно на производительности's будет и Fe заглох циклов и надеюсь, что это будет исправлено.
Вероятно, мы получим окончательный ответ на отладку кода здесь: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/tools/perf/builtin-stat.c
Для преобразования общих событий, экспортируемых производительности процессора документацию необработанных событий вы можете выполнить:
more /sys/bus/event_source/devices/cpu/events/stalled-cycles-frontend
Он покажет вам что-то вроде
event=0x0e,umask=0x01,inv,cmask=0x01
Согласно Интел документации СДМ объем 3б (у меня ядро i5-2520):
UOPS_ISSUED.Любой:
Для затянувшегося цикла-серверной событие перевод на событие=0xb1,значение umask=0х01 на моей системе той же документации написано:
UOPS_DISPATCHED.Нить:
Как правило, в тупик циклов циклов, когда процессор находится в ожидании чего-то (память будет кормить после выполнения, например, операции загрузки) и doesn'Т есть какие-либо другие дела. Кроме того, на сайте часть процессора-это железка отвечает для выборки и декодирования инструкций (конвертировать их в UOPs), где в качестве серверной части несет ответственность, чтобы эффективно выполнять UOPs.
Цикл процессора-это “тупик”, когда трубопровод не't заранее во время него.
Конвейер процессора состоит из многих этапов: передний конец-это группа из этих этапов, который отвечает за выборку и декодирование фазы, в то время как фоновый выполняет инструкции. Есть буфер между фронт-энд и бэк-энд, так что, когда бывший заглох последний все-таки может придется немного потрудиться.
Взято из http://paolobernardi.wordpress.com/2012/08/07/playing-around-with-perf/
По данным автора этих событиях, они определены нечетко и аппроксимируются доступны счетчики производительности процессора. Как я знаю, перфорация не'т поддерживать формул для расчета некоторых синтетических событие, основанное на нескольких аппаратных событиях, поэтому он может'т использовать фронт-энд и бэк-энд стойле связанный метод от Intel'ы оптимизации ручного (реализовано в втуне) http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf "по Б. 3.2 иерархии сверху-вниз производительность характеристика методологии и"
%FE_Bound = 100 * (IDQ_UOPS_NOT_DELIVERED.CORE / N );
%Bad_Speculation = 100 * ( (UOPS_ISSUED.ANY – UOPS_RETIRED.RETIRE_SLOTS + 4 * INT_MISC.RECOVERY_CYCLES ) / N) ;
%Retiring = 100 * ( UOPS_RETIRED.RETIRE_SLOTS/ N) ;
%BE_Bound = 100 * (1 – (FE_Bound + Retiring + Bad_Speculation) ) ;
N = 4*CPU_CLK_UNHALTED.THREAD" (for SandyBridge)
Правильные формулы могут быть использованы с некоторых внешних скриптов, как это было сделано в Энди клином'ы ПМУ-инструменты (toplev.py
): https://github.com/andikleen/pmu-tools (источник), http://halobates.de/blog/p/262 (описание):
% toplev.py -d -l2 numademo 100M stream
...
perf stat --log-fd 4 -x, -e
{r3079,r19c,r10401c3,r100030d,rc5,r10e,cycles,r400019c,r2c2,instructions}
{r15e,r60006a3,r30001b1,r40004a3,r8a2,r10001b1,cycles}
numademo 100M stream
...
BE Backend Bound: 72.03%
This category reflects slots where no uops are being delivered due to a lack
of required resources for accepting more uops in the Backend of the pipeline.
.....
FE Frontend Bound: 54.07%
This category reflects slots where the Frontend of the processor undersupplies
its Backend.
Совершить который ввел в тупик-циклов-frontend и заглох-циклов-серверной события, а не оригинальный универсальный `заглох-циклов:
author Ingo Molnar <mingo@el...> 2011-04-29 11:19:47 (GMT)
committer Ingo Molnar <mingo@el...> 2011-04-29 12:23:58 (GMT)
commit 8f62242246351b5a4bc0c1f00c0c7003edea128a (patch)
tree 9021c99956e0f9dc64655aaa4309c0f0fdb055c9
parent ede70290046043b2638204cab55e26ea1d0c6cd9 (diff)
перфорация событий: добавить универсальный фронт-энд и бэк-энд заглох определения событий цикла Добавить два универсальных аппаратных событий: фронт-энд и бэк-энд тупик циклов.
эти события условия измерения, когда процессор выполняет код, но его возможности не используются в полной мере. Понимание таких ситуаций и анализируя их важная подзадача оптимизации кода рабочие процессы.
оба мероприятия ограничивают производительность: большую часть киосков склонны быть вызваны филиал misprediction или выборки команды cachemisses, бэкэнд в палатках может быть вызвана различными нехватки ресурсов или неэффективного планирование инструкций.
передний конец стойла наиболее важные из них: код не может работать быстро если поток инструкция не проводится.
за используемые может вызвать переднего плана в палатках и таким образом должно быть, приглядывал, а также.
точный состав очень логика программы и смешать инструкция зависит.
мы используем термины 'ларек', 'фронтальный' и 'фоновыми' свободно и старайтесь использовать самые лучшие события с конкретными процессорами, приблизительная эти понятия.
чч: Питер Зейлстра <a.p.zijlstra@che...> чч: Арнальдо де Карвальо Мело <acme@redh...> чч: Фредерик Weisbecker <fweisbec@gmai...> По ссылке: http://lkml.kernel.org/n/[email protected] подпись-от: Инго Молнар <mingo@el...>
/* Install the stalled-cycles event: UOPS_EXECUTED.CORE_ACTIVE_CYCLES,c=1,i=1 */
- intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES] = 0x1803fb1;
+ intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = 0x1803fb1;
- PERF_COUNT_HW_STALLED_CYCLES = 7,
+ PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
+ PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,