2 * Copyright (c) 2021 Intel and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
16 #include <perfmon/perfmon.h>
17 #include <perfmon/intel/core.h>
20 format_intel_membw_bound (u8 *s, va_list *args)
22 perfmon_node_stats_t *ss = va_arg (*args, perfmon_node_stats_t *);
23 int row = va_arg (*args, int);
29 sv = ss->value[row] / ss->n_packets;
31 s = format (s, "%5.0f", sv);
36 static perfmon_cpu_supports_t membw_bound_cpu_supports[] = {
37 { clib_cpu_supports_avx512_bitalg, PERFMON_BUNDLE_TYPE_NODE },
40 PERFMON_REGISTER_BUNDLE (intel_core_membw_bound) = {
41 .name = "membw-bound",
42 .description = "memory bandwidth boundedness",
43 .source = "intel-core",
44 .events[0] = INTEL_CORE_E_CPU_CLK_UNHALTED_THREAD_P, /* FIXED */
45 .events[1] = INTEL_CORE_E_CYCLE_ACTIVITY_CYCLES_NO_EXECUTE, /*CMask: 0xFF*/
46 .events[2] = INTEL_CORE_E_CYCLE_ACTIVITY_STALLS_MEM_ANY, /*CMask: 0xFF*/
47 .events[3] = INTEL_CORE_E_CYCLE_ACTIVITY_STALLS_L1D_MISS, /*CMask: 0xF*/
48 .events[4] = INTEL_CORE_E_L1D_PEND_MISS_FB_FULL, /*CMask: 0xF*/
49 .events[5] = INTEL_CORE_E_CYCLE_ACTIVITY_STALLS_L3_MISS, /*CMask: 0xF*/
50 .events[6] = INTEL_CORE_E_SQ_MISC_SQ_FULL, /*CMask: 0xF*/
52 .format_fn = format_intel_membw_bound,
53 .cpu_supports = membw_bound_cpu_supports,
54 .n_cpu_supports = ARRAY_LEN (membw_bound_cpu_supports),
55 .column_headers = PERFMON_STRINGS ("Cycles/Packet", "Cycles Stall/Packet",
57 "L1D Miss Stall/Packet", "FB Full/Packet",
58 "L3 Miss Stall/Packet", "SQ Full/Packet"),