[BUG] --benchmark_perf_counters only counts user events
Maintainer thường phản hồi trong vòng 1 ngày
@be0hhh đang làm issue này rồi.
Từ ngày 30/7/2026.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 68/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- cpp
- Lĩnh vực
- performance
Hướng nghiên cứu
Bắt đầu trong src/perf_counters.cc tại PerfCounters::Create() quanh dòng 141 và định nghĩa kCounterMode quanh dòng 85. Tái hiện vấn đề bằng --benchmark_perf_counters=INSTRUCTIONS:u,INSTRUCTIONS:k,INSTRUCTIONS; hoàn tất khi các bộ đếm chỉ người dùng, chỉ kernel và chưa sửa đổi phản ánh đúng phạm vi sự kiện tương ứng của chúng.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Describe the bug
Perf counter events specified using --benchmark_perf_counters only count user events. Event modifiers, like "event:k" to count kernel-only events, or without a modifier, like "event" to count user+kernel, only count user events, i.e., as if it's always "event:u".
System
Which OS, compiler, and compiler version are you using:
- OS: Ubuntu 22.04.2 LTS
- Compiler and version: gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04)
To reproduce
Steps to reproduce the behavior:
- Run a benchmark with --benchmark_perf_counters=INSTRUCTIONS:u,INSTRUCTIONS:k,INSTRUCTIONS
- See that the event counts are the same for all three, even though the event modifiers should have it count only user events, kernel events, or total events, respectively, and should most likely be different. At the very least, INSTRUCTIONS:u + INSTRUCTIONS:k should total to INSTRUCTIONS.
Expected behavior
The :u modifier should count only user events. The :k modifier should count only kernel events. The event without a specified modifier should count both user and kernel events.
Additional context
The reason is that PerfCounters::Create() overrides the perf_event_attr attr to exclude kernel and hv events and thus only counts user events.
https://github.com/google/benchmark/blob/v1.8.0/src/perf_counters.cc#L141
attr.exclude_kernel = true;
attr.exclude_user = false;
attr.exclude_hv = true;
If these three lines are commented out, event modifiers appear to work as expected.
However, giving just the event name without any modifiers still counts only user events because the default mode is user mode only.
https://github.com/google/benchmark/blob/v1.8.0/src/perf_counters.cc#L85
const int kCounterMode = PFM_PLM3; // user mode only
Nonetheless, if both user and kernel modifiers are given, i.e. "INSTRUCTIONS:k:u", then both will be counted.
- Ngôn ngữ chính
- C++
- Star
- 10.5k
- Fork
- 1.8k
- Merge trung bình
- 1 ngày 15 giờ
- Pull request đã merge (30 ngày)
- 28
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của google/benchmark
-
[BUG] Confusing title in docs/platform_specific_build_instructions.mdCó thể đã có người làm @skryabae đã nhận 30 ngày trước. Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[BUG] Memory manager counts allocations not part of benchmarkCó thể làm lại được Pull request cho issue này đã bị đóng mà không được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
google/benchmark#2149 · 5 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[FR] Add native Zig bindings via top-level `bindings/zig`Có thể làm lại được Pull request cho issue này đã bị đóng mà không được merge. Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 42/100
google/benchmark#2266 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
google/benchmark#2235 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
google/benchmark#2195 · 3 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của google/benchmark
Issue tương tự
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Niko1221/Strata#5560 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 4 ngày
-
NVIDIA windows
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[辞書] C/C++のプリプロセッサ指令名を英字のままにするĐang mở要トリアージ 辞書
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 86/100
yksr-melt/Meltype#1625 · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[yugabyted] xcluster set_up and add_to_replication fail for database names containing - . or (Đang mởkind/bug priority/medium qa_automation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
yugabyte/yugabyte-db#37324 ·
Maintainer thường phản hồi trong vòng 1 ngày