Ja, gibt es keine Zuordnung von "abgewürgt-Zyklen-Frontend" und "abgewürgt-Zyklen-Backend" synthetischer Ereignissen in perf_events
Subsystem im Kernel für neue Prozessoren wie Ivy Bridge oder Haswell. Und kein Mapping auf älteren Core 2. Wahrscheinlich ist dieser Name/Konzept/Idee nicht gut für veränderte und komplexe Mikroarchitekturen moderner Out-of-Order-CPUs ohne einfache skalare Messung des globalen "Stall".
Der Code is in arch/x86/events/intel/core.c
, und das synthetische Ereignisnamen sind PERF_COUNT_HW_STALLED_CYCLES_FRONTEND
und PERF_COUNT_HW_STALLED_CYCLES_BACKEND
:
__init int intel_pmu_init(void)
{...
Beide seit Nehalem definiert sind, für 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);
Nur Frontend Stall ist definiert für 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);
Keine Zuordnung für Frontend und Back-End-Stände für neueren CPUs Desktop (Haswell, Broadwell, Skylake, Kaby See) und Phi (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:
Nicht zu für alte Core2 definiert (nicht überprüfen Atom):
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 */
};
Haben Sie versucht, [ 'ocperf.py'] (https://lwn.net/Articles/556983/)? Es ist ein Wrapper mit mehr hw-spezifischen Ereignisnamen. Funktioniert 'perf stat' normal? Es enthält standardmäßig diese Leistungsindikatoren. –
@PeterCordes Dank Ihrer Antwort habe ich ocperf ausprobiert und die sogenannten "cycle_activity.cycles_no_execute", "uops_executed.stall_cycles" und "uops_retired.stall_cycles" gefunden. Aber ich bin mir nicht sicher, ob das "Festplatten-Zyklen-Backend" sind. –
hank wing, wahrscheinlich, Autoren von 'perf_events' Subsystem Mapping waren auch unsicher und einfach nicht zugeordnet (schlecht entworfen und benannt)" stalled-Zyklen-Backend "in ein einzelnes Ereignis auf haswell? ([Der Code] (http://elixir.free-electronics.com/linux/v4.11/source/arch/x86/events/intel/core.c#L3856), es gibt eine Zuordnung von 'PERF_COUNT_HW_STALLED_CYCLES_BACKEND' für Westmere WSM, Sandy SNB; nicht für Ivy, Haswell, Broadwell und neuer). Autoren von [toplev.py] (https://github.com/andikleen/pmu-tools/blob/master/toplev.py) oder PAPI können komplexe Ereignisse zuordnen, sie können Formeln verwenden, um sie aus mehreren zu berechnen. – osgx