Да, нет отображения «застопорились-циклы-интерфейс» и «Тупик-циклы-серверными» синтетических события в perf_events
подсистеме в ядре для новых процессоров, таких как Ivy Bridge или Haswell. И нет сопоставления с более старым Core 2. Возможно, это название/концепция/идея не хороши для измененных и сложных микроархитектур современных процессоров Out-of-order без простого скалярного измерения глобального «Stall».
Кодекса is in arch/x86/events/intel/core.c
и синтетические события имена PERF_COUNT_HW_STALLED_CYCLES_FRONTEND
и PERF_COUNT_HW_STALLED_CYCLES_BACKEND
:
__init int intel_pmu_init(void)
{...
Оба определяются так Nehalem, для Westmere, Sandy Bridge:
case INTEL_FAM6_NEHALEM:
case INTEL_FAM6_NEHALEM_EP:
case INTEL_FAM6_NEHALEM_EX:
/* UOPS_ISSUED.STALLED_CYCLES */
intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] =
X86_CONFIG(.event=0x0e, .umask=0x01, .inv=1, .cmask=1);
/* UOPS_EXECUTED.CORE_ACTIVE_CYCLES,c=1,i=1 */
intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_BACKEND] =
X86_CONFIG(.event=0xb1, .umask=0x3f, .inv=1, .cmask=1);
case INTEL_FAM6_WESTMERE:
case INTEL_FAM6_WESTMERE_EP:
case INTEL_FAM6_WESTMERE_EX:
/* UOPS_ISSUED.STALLED_CYCLES */
intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] =
X86_CONFIG(.event=0x0e, .umask=0x01, .inv=1, .cmask=1);
/* UOPS_EXECUTED.CORE_ACTIVE_CYCLES,c=1,i=1 */
intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_BACKEND] =
X86_CONFIG(.event=0xb1, .umask=0x3f, .inv=1, .cmask=1);
case INTEL_FAM6_SANDYBRIDGE:
case INTEL_FAM6_SANDYBRIDGE_X:
/* UOPS_ISSUED.ANY,c=1,i=1 to count stall cycles */
intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] =
X86_CONFIG(.event=0x0e, .umask=0x01, .inv=1, .cmask=1);
/* UOPS_DISPATCHED.THREAD,c=1,i=1 to count stall cycles*/
intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_BACKEND] =
X86_CONFIG(.event=0xb1, .umask=0x01, .inv=1, .cmask=1);
только интерфейс стойло определяется для Ivy Bridge
case INTEL_FAM6_IVYBRIDGE:
case INTEL_FAM6_IVYBRIDGE_X:
/* UOPS_ISSUED.ANY,c=1,i=1 to count stall cycles */
intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] =
X86_CONFIG(.event=0x0e, .umask=0x01, .inv=1, .cmask=1);
Нет отображения для веб-интерфейсе и серверными стойла для более поздних настольных процессоров (Haswell, Бродуэлла, Skylake, Каби озеро) и Фи (KNL, KNM):
case INTEL_FAM6_HASWELL_CORE:
case INTEL_FAM6_HASWELL_X:
case INTEL_FAM6_HASWELL_ULT:
case INTEL_FAM6_HASWELL_GT3E:
case INTEL_FAM6_BROADWELL_CORE:
case INTEL_FAM6_BROADWELL_XEON_D:
case INTEL_FAM6_BROADWELL_GT3E:
case INTEL_FAM6_BROADWELL_X:
case INTEL_FAM6_XEON_PHI_KNL:
case INTEL_FAM6_XEON_PHI_KNM:
case INTEL_FAM6_SKYLAKE_MOBILE:
case INTEL_FAM6_SKYLAKE_DESKTOP:
case INTEL_FAM6_SKYLAKE_X:
case INTEL_FAM6_KABYLAKE_MOBILE:
case INTEL_FAM6_KABYLAKE_DESKTOP:
Не определено для старого Core2 тоже (не проверял Atoms):
http://elixir.free-electrons.com/linux/v4.11/source/arch/x86/events/intel/core.c#L27
static u64 intel_perfmon_event_map[PERF_COUNT_HW_MAX] __read_mostly =
{
[PERF_COUNT_HW_CPU_CYCLES] = 0x003c,
[PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0,
[PERF_COUNT_HW_CACHE_REFERENCES] = 0x4f2e,
[PERF_COUNT_HW_CACHE_MISSES] = 0x412e,
[PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = 0x00c4,
[PERF_COUNT_HW_BRANCH_MISSES] = 0x00c5,
[PERF_COUNT_HW_BUS_CYCLES] = 0x013c,
[PERF_COUNT_HW_REF_CPU_CYCLES] = 0x0300, /* pseudo-encoding */
};
Пробовали ли вы [ 'ocperf.py'] (https://lwn.net/Articles/556983/)? Это оболочка с большим количеством имен событий, специфичных для hw. Работает ли 'perf stat' нормально? Он включает эти счетчики по умолчанию. –
@PeterCordes Спасибо за ваш ответ, я попробовал ocperf, и я нашел так называемые «cycle_activity.cycles_no_execute», «uops_executed.stall_cycles» и «uops_retired.stall_cycles». Но я не уверен, что это «заторможенные циклы-бэкэнд». –
hank wing, возможно, авторы отображения подсистемы 'perf_events' тоже были неуверены и просто не отображали этот (плохо спроектированный и названный)« stalled-cycles-backend »в какое-то одно событие на haswell? ([Код] (http://elixir.free-electrons.com/linux/v4.11/source/arch/x86/events/intel/core.c#L3856), существует сопоставление 'PERF_COUNT_HW_STALLED_CYCLES_BACKEND' для Westmere WSM, Sandy SNB, а не для Айви, Хасуэлла, Бродвелла и новее). Авторы [toplev.py] (https://github.com/andikleen/pmu-tools/blob/master/toplev.py) или PAPI могут отображать сложные события, они могут использовать формулы для вычисления их из нескольких. – osgx