17 #include <perfmon/perfmon.h> 20 #define GET_METRIC(m, i) (((m) >> (i * 8)) & 0xff) 21 #define GET_RATIO(m, i) (((m) >> (i * 32)) & 0xffffffff) 22 #define RDPMC_FIXED_SLOTS (1 << 30) 23 #define RDPMC_L1_METRICS (1 << 29) 25 #define FIXED_COUNTER_SLOTS 3 26 #define METRIC_COUNTER_TOPDOWN_L1 0 54 slots_t1 = slots_t1 - slots_t0;
56 return (slots_t1 / slots_delta) * 100;
63 u64 row = va_arg (*args,
int);
98 .name =
"topdown-level1",
99 .description =
"Top-down Microarchitecture Analysis Level 1",
100 .source =
"intel-core",
103 .events[0] = INTEL_CORE_E_TOPDOWN_SLOTS,
104 .events[1] = INTEL_CORE_E_TOPDOWN_L1_METRICS,
108 .cpu_supports = clib_cpu_supports_avx512_bitalg,
110 .column_headers =
PERFMON_STRINGS (
"% NS",
"% ST",
"% NS.RT",
"% NS.BS",
111 "% ST.FE",
"% ST.BE"),
112 .footer =
"Not Stalled (NS),STalled (ST),\n" 113 " Retiring (RT), Bad Speculation (BS),\n" 114 " FrontEnd bound (FE), BackEnd bound (BE)",
#define RDPMC_FIXED_SLOTS
static_always_inline f32 topdown_lvl1_parse_row(perfmon_node_stats_t *ns, topdown_lvl1_counters_t e)
#define FIXED_COUNTER_SLOTS
#define static_always_inline
description fragment has unexpected format
#define PERFMON_STRINGS(...)
PERFMON_REGISTER_BUNDLE(topdown_lvl1)
static u8 * format_topdown_lvl1(u8 *s, va_list *args)
enum @756 topdown_lvl1_metrics_t
#define METRIC_COUNTER_TOPDOWN_L1
struct perfmon_node_stats_t::@759::@761 t[2]