perf: Add cputime events/metrics
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
Changes in v2 from the cover letter
- all of the support patches are already in
- new way of 'fixing' of idle counts when tick is disabled (patch 2)
Patches in v2 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/3 | perf/cputime: Add cputime pmuinclude/ kernel/ kernel/ +1 more | +202 | 0 replies | |
| 2/3 | perf/cputime: Fix idle time on NO_HZ configinclude/ kernel/ kernel/ | +36 | 0 replies | |
| 3/3 | perf stat: Add cputime metric supporttools/ tools/ tools/ +2 more | +204 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.
Cover letter [PATCHv2 0/3] perf: Add cputime events/metrics
hi,
so.. I failed to make work reliably the exclude_idle bit for cpu-clock event using the idle's process sum_exec_runtime as Peter outlined in his patch [1]. The time jumped up and down and I couldn't make it stable.
But I noticed we actually have IDLE stats (and many more) available for each CPU (enum cpu_usage_stat), we just can't reach them by perf yet.
This patchset adds 'cputime' perf software PMU, that provides CPUTIME_* stats via events that mirrors their names:
# perf list | grep cputime
cputime/guest/ [Kernel PMU event]
cputime/guest_nice/ [Kernel PMU event]
cputime/idle/ [Kernel PMU event]
cputime/iowait/ [Kernel PMU event]
cputime/irq/ [Kernel PMU event]
cputime/nice/ [Kernel PMU event]
cputime/softirq/ [Kernel PMU event]
cputime/steal/ [Kernel PMU event]
cputime/system/ [Kernel PMU event]
cputime/user/ [Kernel PMU event]v2 changes:
- all of the support patches are already in
- new way of 'fixing' of idle counts when tick is disabled (patch 2)
Examples:
# perf stat --top -I 1000
# time Idle System User Irq Softirq IO wait
1.001692690 100.0% 0.0% 0.0% 0.7% 0.2% 0.0%
2.002994039 98.9% 0.0% 0.0% 0.9% 0.2% 0.0%
3.004164038 98.5% 0.2% 0.2% 0.9% 0.2% 0.0%
4.005312773 98.9% 0.0% 0.0% 0.9% 0.2% 0.0% # perf stat --top-full -I 1000
# time Idle System User Irq Softirq IO wait Guest Guest nice Nice Steal
1.001750803 100.0% 0.0% 0.0% 0.7% 0.2% 0.0% 0.0% 0.0% 0.0% 0.0%
2.003159490 99.0% 0.0% 0.0% 0.9% 0.2% 0.0% 0.0% 0.0% 0.0% 0.0%
3.004358366 99.0% 0.0% 0.0% 0.9% 0.2% 0.0% 0.0% 0.0% 0.0% 0.0%
4.005592436 98.9% 0.0% 0.0% 0.9% 0.2% 0.0% 0.0% 0.0% 0.0% 0.0%# perf stat -e cpu-clock,cputime/system/,cputime/user/,cputime/idle/ -a sleep 10
Performance counter stats for 'system wide':
240070.828221 cpu-clock (msec) # 23.999 CPUs utilized
208,910,979,120 ns cputime/system/ # 87.0% System
20,589,603,359 ns cputime/user/ # 8.6% User
8,813,416,821 ns cputime/idle/ # 3.7% Idle 10.003261054 seconds time elapsed
# perf stat -e cpu-clock,cputime/system/,cputime/user/ yes > /dev/null ^Cyes: Interrupt
Performance counter stats for 'yes':
3483.824364 cpu-clock (msec) # 1.000 CPUs utilized
2,460,117,205 ns cputime/system/ # 70.6% System
1,018,360,669 ns cputime/user/ # 29.2% User 3.484554149 seconds time elapsed
1.018525000 seconds user
2.460515000 seconds sys# perf stat --top -I 1000 --interval-clear # perf stat --top -I 1000 --interval-clear --per-core # perf stat --top -I 1000 --interval-clear --per-socket # perf stat --top -I 1000 --interval-clear -A
It's also available in here:
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/fixes
thanks,
jirka
[1] https://marc.info/?l=linux-kernel&m=152397251027433&w=2
---
Jiri Olsa (3):
perf/cputime: Add cputime pmu
perf/cputime: Fix idle time on NO_HZ config perf stat: Add cputime metric support
include/linux/perf_event.h | 2 ++ include/linux/tick.h | 1 + kernel/events/Makefile | 2 +- kernel/events/core.c | 1 + kernel/events/cputime.c | 221 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ kernel/time/tick-sched.c | 11 ++++++ tools/perf/Documentation/perf-stat.txt | 65 +++++++++++++++++++++++++++++++++ tools/perf/builtin-stat.c | 47 ++++++++++++++++++++++++ tools/perf/util/stat-shadow.c | 72 +++++++++++++++++++++++++++++++++++++ tools/perf/util/stat.c | 10 ++++++ tools/perf/util/stat.h | 10 ++++++ 11 files changed, 441 insertions(+), 1 deletion(-) create mode 100644 kernel/events/cputime.c