Hello,
This is a collection of small fixes for perf stat bpf counters (bperf).
The bperf framework maintains perf_attr_map in the BPF fs to share the
same event as much as possible. But the size was limited to 16 and
perf stat with -ddd option would create more than 16 events and fails.
Also cgroup events with --for-each-cgroup had some other problems when
dealing with unsupported events and duplicate cgroups.
The code is available at 'perf/stat-bpf-fix-v1' branch in
git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git
Thanks,
Namhyung
Namhyung Kim (4):
perf bpf_counter: Add more error messages for bperf
perf bpf_counter: Increase perf_attr_map entries to 32
perf bpf_counter: Handle unsupported cgroup events
perf stat: Do not use the same cgroup more than once
tools/perf/util/bpf_counter.c | 11 ++++++++---
tools/perf/util/bpf_counter_cgroup.c | 14 +++-----------
tools/perf/util/cgroup.c | 23 ++++++++++++++++++-----
3 files changed, 29 insertions(+), 19 deletions(-)
base-commit: d8d85ce86dc82de4f88b821a78f533b9d5b22a45
--
2.39.0.314.g84b9a713c41-goog
The current size 16 cannot hold all events when user gave -dd or -ddd.
As it's a part of perf stat, let's increase the size to 32.
# unlink previous map to change the size
$ sudo unlink /sys/fs/bpf/perf_attr_map
$ sudo ./perf stat -a --bpf-counters -ddd sleep 1
Performance counter stats for 'system wide':
35,927.41 msec cpu-clock # 35.802 CPUs utilized
12,629 context-switches # 351.514 /sec
209 cpu-migrations # 5.817 /sec
826 page-faults # 22.991 /sec
2,155,729,621 cycles # 0.060 GHz (30.43%)
1,053,849,500 instructions # 0.49 insn per cycle (38.18%)
232,711,500 branches # 6.477 M/sec (38.44%)
10,693,352 branch-misses # 4.60% of all branches (31.27%)
267,561,655 L1-dcache-loads # 7.447 M/sec (30.58%)
27,290,728 L1-dcache-load-misses # 10.20% of all L1-dcache accesses (30.48%)
12,651,208 LLC-loads # 352.133 K/sec (30.78%)
1,274,018 LLC-load-misses # 10.07% of all LL-cache accesses (38.70%)
<not supported> L1-icache-loads
75,916,358 L1-icache-load-misses # 0.00% of all L1-icache accesses (38.11%)
273,330,559 dTLB-loads # 7.608 M/sec (30.54%)
2,864,458 dTLB-load-misses # 1.05% of all dTLB cache accesses (38.77%)
361,507 iTLB-loads # 10.062 K/sec (30.59%)
848,031 iTLB-load-misses # 234.58% of all iTLB cache accesses (31.30%)
<not supported> L1-dcache-prefetches
<not supported> L1-dcache-prefetch-misses
Signed-off-by: Namhyung Kim <[email protected]>
---
tools/perf/util/bpf_counter.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/perf/util/bpf_counter.c b/tools/perf/util/bpf_counter.c
index 7f5cc1aa4903..de6331f5263c 100644
--- a/tools/perf/util/bpf_counter.c
+++ b/tools/perf/util/bpf_counter.c
@@ -28,7 +28,7 @@
#include "bpf_skel/bperf_leader.skel.h"
#include "bpf_skel/bperf_follower.skel.h"
-#define ATTR_MAP_SIZE 16
+#define ATTR_MAP_SIZE 32
static inline void *u64_to_ptr(__u64 ptr)
{
--
2.39.0.314.g84b9a713c41-goog
Em Tue, Jan 03, 2023 at 10:43:58PM -0800, Namhyung Kim escreveu:
> Hello,
>
> This is a collection of small fixes for perf stat bpf counters (bperf).
>
> The bperf framework maintains perf_attr_map in the BPF fs to share the
> same event as much as possible. But the size was limited to 16 and
> perf stat with -ddd option would create more than 16 events and fails.
>
> Also cgroup events with --for-each-cgroup had some other problems when
> dealing with unsupported events and duplicate cgroups.
>
> The code is available at 'perf/stat-bpf-fix-v1' branch in
>
> git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git
The first two are improvements, not strict fixes, so I'm leaving them
for the next merge window.
- Arnaldo
> Thanks,
> Namhyung
>
> Namhyung Kim (4):
> perf bpf_counter: Add more error messages for bperf
> perf bpf_counter: Increase perf_attr_map entries to 32
> perf bpf_counter: Handle unsupported cgroup events
> perf stat: Do not use the same cgroup more than once
>
> tools/perf/util/bpf_counter.c | 11 ++++++++---
> tools/perf/util/bpf_counter_cgroup.c | 14 +++-----------
> tools/perf/util/cgroup.c | 23 ++++++++++++++++++-----
> 3 files changed, 29 insertions(+), 19 deletions(-)
>
>
> base-commit: d8d85ce86dc82de4f88b821a78f533b9d5b22a45
> --
> 2.39.0.314.g84b9a713c41-goog
--
- Arnaldo