perf stat -d ./sample.out Ausgang ist:Wie löst man "nicht gezählt" in perf?
Performance counter stats for './sample.out':
0.586266 task-clock (msec) # 0.007 CPUs utilized
2 context-switches # 0.003 M/sec
1 cpu-migrations # 0.002 M/sec
116 page-faults # 0.198 M/sec
7,35,790 cycles # 1.255 GHz [81.06%]
<not counted> stalled-cycles-frontend
<not supported> stalled-cycles-backend
<not counted> instructions
<not counted> branches
<not counted> branch-misses
<not supported> L1-dcache-loads:HG
<not counted> L1-dcache-load-misses:HG
<not counted> LLC-loads:HG
<not supported> LLC-load-misses:HG
0.088013919 seconds time elapsed
ich lesen, warum von auftauchen wird. Aber ich bekomme sogar einfache Zähler wie Anweisungen, Zweige usw. Kann jemand vorschlagen, wie es funktioniert?
Interessante ist:
sudo perf stat Schlaf 3
gibt Ausgang:
Performance counter stats for 'sleep 3':
0.598484 task-clock (msec) # 0.000 CPUs utilized
2 context-switches # 0.003 M/sec
0 cpu-migrations # 0.000 K/sec
181 page-faults # 0.302 M/sec
<not counted> cycles
<not counted> stalled-cycles-frontend
<not supported> stalled-cycles-backend
<not counted> instructions
<not counted> branches
<not counted> branch-misses
sudo perf stat -C 1 Schlaf 3
Performance counter stats for 'CPU(s) 1':
3002.640578 task-clock (msec) # 1.001 CPUs utilized [100.00%]
425 context-switches # 0.142 K/sec [100.00%]
9 cpu-migrations # 0.003 K/sec [100.00%]
5 page-faults # 0.002 K/sec
7,82,97,019 cycles # 0.026 GHz [33.32%]
9,38,21,585 stalled-cycles-frontend # 119.83% frontend cycles idle [33.32%]
<not supported> stalled-cycles-backend
3,09,81,643 instructions # 0.40 insns per cycle
# 3.03 stalled cycles per insn [33.32%]
70,15,390 branches # 2.336 M/sec [33.32%]
6,38,644 branch-misses # 9.10% of all branches [33.32%]
3.001075650 seconds time elapsed
Warum funktioniert das unerwartet?
Danke
'perf stat' keine statistische Probenahme (http: //lxr.free-electronics.com/source/tools/perf/builtin-stat.c?v=4.4 - "Built-in-stat-Befehl: Geben Sie eine ** genaue ** Übersicht der Leistungsindikatoren zu einer beliebigen Auslastung, CPU oder spezifischen PID "), sollte es einfach Zählmodus von hw pmu sein, in der Lage, jedes Ereignis zu sehen. "sleep 1" und "echo 1" machen beide eine Menge von syscalls (überprüfen Sie "strace sleep 1" oder "ltrace sleep 1") und sie haben alle Hunderttausende Zyklen und Anweisungen. Nur Perf-Record ist eine statistische Stichprobe. Sie können auch -vv flag nach stat hinzufügen, um das "sampling" -Feld von perf_events syscall zu überprüfen. – osgx
@osgx: Ich meine, dass die HW-PMU selbst Probe macht, indem sie nur alle 50k Befehle/Zyklen/Verzweigungen oder einen Interrupt auslöst, richtig? Es kann keinen Interrupt bei jedem Taktzyklus auslösen. Oder können Sie die exakten Zählungen auch nach Zählern abrufen, die sich niemals überschlagen haben und einen Interrupt ausgelöst haben? –
@osgx: Wie auch immer, deine Antwort ist eindeutig die richtige; Danke für die Korrektur meines Fehlers. Ich habe den Ausgang "-C" nicht genau genug untersucht, um festzustellen, dass es Zähler multiplexte, und dies erklärt die Beobachtungen des OP vollständig. –