aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/stat-shadow.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2017-11-03 10:06:53 -0400
committerIngo Molnar <mingo@kernel.org>2017-11-03 10:06:53 -0400
commit340b5319c98eb14f7a70947a38e17d06f5beea88 (patch)
treeece6aeb203be9207ae16eb2ffb985fddc42db46d /tools/perf/util/stat-shadow.c
parent0d3d73aac2ff05c78387aa9dcc2c8aa3804405e7 (diff)
parent7285cf3325b4a1dfb336d31eebc27dfbc30fb9aa (diff)
Merge tag 'perf-core-for-mingo-4.15-20171103' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo: - Beautify the 'kcmp' and 'prctl' syscall arguments in 'perf trace' (Arnaldo Carvalho de Melo) - Implement a way to print formatted output to per-event files in 'perf script' to facilitate generate flamegraphs, elliminating the need to write scripts to do that separation (yuzhoujian, Arnaldo Carvalho de Melo) Make 'perf stat --per-thread' update shadow stats to show metrics (Jiri Olsa) - Fix double mapping al->addr in callchain processing for children without self period (Namhyung Kim) - Fix memory leak in addr2inlines() when libbfd is not used (Namhyung Kim) - Show correct function name for srcline of callchains when libbfd is not used (Namhyung Kim) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/util/stat-shadow.c')
-rw-r--r--tools/perf/util/stat-shadow.c48
1 files changed, 25 insertions, 23 deletions
diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c
index a2c12d1ef32a..51ad03a799ec 100644
--- a/tools/perf/util/stat-shadow.c
+++ b/tools/perf/util/stat-shadow.c
@@ -178,58 +178,60 @@ void perf_stat__reset_shadow_stats(void)
178 * more semantic information such as miss/hit ratios, 178 * more semantic information such as miss/hit ratios,
179 * instruction rates, etc: 179 * instruction rates, etc:
180 */ 180 */
181void perf_stat__update_shadow_stats(struct perf_evsel *counter, u64 *count, 181void perf_stat__update_shadow_stats(struct perf_evsel *counter, u64 count,
182 int cpu) 182 int cpu)
183{ 183{
184 int ctx = evsel_context(counter); 184 int ctx = evsel_context(counter);
185 185
186 count *= counter->scale;
187
186 if (perf_evsel__match(counter, SOFTWARE, SW_TASK_CLOCK) || 188 if (perf_evsel__match(counter, SOFTWARE, SW_TASK_CLOCK) ||
187 perf_evsel__match(counter, SOFTWARE, SW_CPU_CLOCK)) 189 perf_evsel__match(counter, SOFTWARE, SW_CPU_CLOCK))
188 update_stats(&runtime_nsecs_stats[cpu], count[0]); 190 update_stats(&runtime_nsecs_stats[cpu], count);
189 else if (perf_evsel__match(counter, HARDWARE, HW_CPU_CYCLES)) 191 else if (perf_evsel__match(counter, HARDWARE, HW_CPU_CYCLES))
190 update_stats(&runtime_cycles_stats[ctx][cpu], count[0]); 192 update_stats(&runtime_cycles_stats[ctx][cpu], count);
191 else if (perf_stat_evsel__is(counter, CYCLES_IN_TX)) 193 else if (perf_stat_evsel__is(counter, CYCLES_IN_TX))
192 update_stats(&runtime_cycles_in_tx_stats[ctx][cpu], count[0]); 194 update_stats(&runtime_cycles_in_tx_stats[ctx][cpu], count);
193 else if (perf_stat_evsel__is(counter, TRANSACTION_START)) 195 else if (perf_stat_evsel__is(counter, TRANSACTION_START))
194 update_stats(&runtime_transaction_stats[ctx][cpu], count[0]); 196 update_stats(&runtime_transaction_stats[ctx][cpu], count);
195 else if (perf_stat_evsel__is(counter, ELISION_START)) 197 else if (perf_stat_evsel__is(counter, ELISION_START))
196 update_stats(&runtime_elision_stats[ctx][cpu], count[0]); 198 update_stats(&runtime_elision_stats[ctx][cpu], count);
197 else if (perf_stat_evsel__is(counter, TOPDOWN_TOTAL_SLOTS)) 199 else if (perf_stat_evsel__is(counter, TOPDOWN_TOTAL_SLOTS))
198 update_stats(&runtime_topdown_total_slots[ctx][cpu], count[0]); 200 update_stats(&runtime_topdown_total_slots[ctx][cpu], count);
199 else if (perf_stat_evsel__is(counter, TOPDOWN_SLOTS_ISSUED)) 201 else if (perf_stat_evsel__is(counter, TOPDOWN_SLOTS_ISSUED))
200 update_stats(&runtime_topdown_slots_issued[ctx][cpu], count[0]); 202 update_stats(&runtime_topdown_slots_issued[ctx][cpu], count);
201 else if (perf_stat_evsel__is(counter, TOPDOWN_SLOTS_RETIRED)) 203 else if (perf_stat_evsel__is(counter, TOPDOWN_SLOTS_RETIRED))
202 update_stats(&runtime_topdown_slots_retired[ctx][cpu], count[0]); 204 update_stats(&runtime_topdown_slots_retired[ctx][cpu], count);
203 else if (perf_stat_evsel__is(counter, TOPDOWN_FETCH_BUBBLES)) 205 else if (perf_stat_evsel__is(counter, TOPDOWN_FETCH_BUBBLES))
204 update_stats(&runtime_topdown_fetch_bubbles[ctx][cpu],count[0]); 206 update_stats(&runtime_topdown_fetch_bubbles[ctx][cpu], count);
205 else if (perf_stat_evsel__is(counter, TOPDOWN_RECOVERY_BUBBLES)) 207 else if (perf_stat_evsel__is(counter, TOPDOWN_RECOVERY_BUBBLES))
206 update_stats(&runtime_topdown_recovery_bubbles[ctx][cpu], count[0]); 208 update_stats(&runtime_topdown_recovery_bubbles[ctx][cpu], count);
207 else if (perf_evsel__match(counter, HARDWARE, HW_STALLED_CYCLES_FRONTEND)) 209 else if (perf_evsel__match(counter, HARDWARE, HW_STALLED_CYCLES_FRONTEND))
208 update_stats(&runtime_stalled_cycles_front_stats[ctx][cpu], count[0]); 210 update_stats(&runtime_stalled_cycles_front_stats[ctx][cpu], count);
209 else if (perf_evsel__match(counter, HARDWARE, HW_STALLED_CYCLES_BACKEND)) 211 else if (perf_evsel__match(counter, HARDWARE, HW_STALLED_CYCLES_BACKEND))
210 update_stats(&runtime_stalled_cycles_back_stats[ctx][cpu], count[0]); 212 update_stats(&runtime_stalled_cycles_back_stats[ctx][cpu], count);
211 else if (perf_evsel__match(counter, HARDWARE, HW_BRANCH_INSTRUCTIONS)) 213 else if (perf_evsel__match(counter, HARDWARE, HW_BRANCH_INSTRUCTIONS))
212 update_stats(&runtime_branches_stats[ctx][cpu], count[0]); 214 update_stats(&runtime_branches_stats[ctx][cpu], count);
213 else if (perf_evsel__match(counter, HARDWARE, HW_CACHE_REFERENCES)) 215 else if (perf_evsel__match(counter, HARDWARE, HW_CACHE_REFERENCES))
214 update_stats(&runtime_cacherefs_stats[ctx][cpu], count[0]); 216 update_stats(&runtime_cacherefs_stats[ctx][cpu], count);
215 else if (perf_evsel__match(counter, HW_CACHE, HW_CACHE_L1D)) 217 else if (perf_evsel__match(counter, HW_CACHE, HW_CACHE_L1D))
216 update_stats(&runtime_l1_dcache_stats[ctx][cpu], count[0]); 218 update_stats(&runtime_l1_dcache_stats[ctx][cpu], count);
217 else if (perf_evsel__match(counter, HW_CACHE, HW_CACHE_L1I)) 219 else if (perf_evsel__match(counter, HW_CACHE, HW_CACHE_L1I))
218 update_stats(&runtime_ll_cache_stats[ctx][cpu], count[0]); 220 update_stats(&runtime_ll_cache_stats[ctx][cpu], count);
219 else if (perf_evsel__match(counter, HW_CACHE, HW_CACHE_LL)) 221 else if (perf_evsel__match(counter, HW_CACHE, HW_CACHE_LL))
220 update_stats(&runtime_ll_cache_stats[ctx][cpu], count[0]); 222 update_stats(&runtime_ll_cache_stats[ctx][cpu], count);
221 else if (perf_evsel__match(counter, HW_CACHE, HW_CACHE_DTLB)) 223 else if (perf_evsel__match(counter, HW_CACHE, HW_CACHE_DTLB))
222 update_stats(&runtime_dtlb_cache_stats[ctx][cpu], count[0]); 224 update_stats(&runtime_dtlb_cache_stats[ctx][cpu], count);
223 else if (perf_evsel__match(counter, HW_CACHE, HW_CACHE_ITLB)) 225 else if (perf_evsel__match(counter, HW_CACHE, HW_CACHE_ITLB))
224 update_stats(&runtime_itlb_cache_stats[ctx][cpu], count[0]); 226 update_stats(&runtime_itlb_cache_stats[ctx][cpu], count);
225 else if (perf_stat_evsel__is(counter, SMI_NUM)) 227 else if (perf_stat_evsel__is(counter, SMI_NUM))
226 update_stats(&runtime_smi_num_stats[ctx][cpu], count[0]); 228 update_stats(&runtime_smi_num_stats[ctx][cpu], count);
227 else if (perf_stat_evsel__is(counter, APERF)) 229 else if (perf_stat_evsel__is(counter, APERF))
228 update_stats(&runtime_aperf_stats[ctx][cpu], count[0]); 230 update_stats(&runtime_aperf_stats[ctx][cpu], count);
229 231
230 if (counter->collect_stat) { 232 if (counter->collect_stat) {
231 struct saved_value *v = saved_value_lookup(counter, cpu, true); 233 struct saved_value *v = saved_value_lookup(counter, cpu, true);
232 update_stats(&v->stats, count[0]); 234 update_stats(&v->stats, count);
233 } 235 }
234} 236}
235 237