Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf stat: Move the shadow stats scale computation in perf_stat__update_shadow_stats

Move the shadow stats scale computation to the
perf_stat__update_shadow_stats() function, so it's centralized and we
don't forget to do it. It also saves few lines of code.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Changbin Du <changbin.du@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jin Yao <yao.jin@linux.intel.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-htg7mmyxv6pcrf57qyo6msid@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Jiri Olsa and committed by
Arnaldo Carvalho de Melo
54830dd0 e268687b

+29 -30
+1 -2
tools/perf/builtin-stat.c
··· 1267 1267 continue; 1268 1268 val += perf_counts(counter->counts, cpu, 0)->val; 1269 1269 } 1270 - val = val * counter->scale; 1271 - perf_stat__update_shadow_stats(counter, &val, 1270 + perf_stat__update_shadow_stats(counter, val, 1272 1271 first_shadow_cpu(counter, id)); 1273 1272 } 1274 1273 }
+25 -23
tools/perf/util/stat-shadow.c
··· 178 178 * more semantic information such as miss/hit ratios, 179 179 * instruction rates, etc: 180 180 */ 181 - void perf_stat__update_shadow_stats(struct perf_evsel *counter, u64 *count, 181 + void perf_stat__update_shadow_stats(struct perf_evsel *counter, u64 count, 182 182 int cpu) 183 183 { 184 184 int ctx = evsel_context(counter); 185 185 186 + count *= counter->scale; 187 + 186 188 if (perf_evsel__match(counter, SOFTWARE, SW_TASK_CLOCK) || 187 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 232 if (counter->collect_stat) { 231 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
+2 -4
tools/perf/util/stat.c
··· 277 277 perf_evsel__compute_deltas(evsel, cpu, thread, count); 278 278 perf_counts_values__scale(count, config->scale, NULL); 279 279 if (config->aggr_mode == AGGR_NONE) 280 - perf_stat__update_shadow_stats(evsel, count->values, cpu); 280 + perf_stat__update_shadow_stats(evsel, count->val, cpu); 281 281 break; 282 282 case AGGR_GLOBAL: 283 283 aggr->val += count->val; ··· 320 320 struct perf_counts_values *aggr = &counter->counts->aggr; 321 321 struct perf_stat_evsel *ps = counter->stats; 322 322 u64 *count = counter->counts->aggr.values; 323 - u64 val; 324 323 int i, ret; 325 324 326 325 aggr->val = aggr->ena = aggr->run = 0; ··· 359 360 /* 360 361 * Save the full runtime - to allow normalization during printout: 361 362 */ 362 - val = counter->scale * *count; 363 - perf_stat__update_shadow_stats(counter, &val, 0); 363 + perf_stat__update_shadow_stats(counter, *count, 0); 364 364 365 365 return 0; 366 366 }
+1 -1
tools/perf/util/stat.h
··· 82 82 83 83 void perf_stat__init_shadow_stats(void); 84 84 void perf_stat__reset_shadow_stats(void); 85 - void perf_stat__update_shadow_stats(struct perf_evsel *counter, u64 *count, 85 + void perf_stat__update_shadow_stats(struct perf_evsel *counter, u64 count, 86 86 int cpu); 87 87 struct perf_stat_output_ctx { 88 88 void *ctx;