Lines Matching refs:config

71 static void print_running_std(struct perf_stat_config *config, u64 run, u64 ena)
74 fprintf(config->output, " (%.2f%%)", 100.0 * run / ena);
77 static void print_running_csv(struct perf_stat_config *config, u64 run, u64 ena)
83 fprintf(config->output, "%s%" PRIu64 "%s%.2f",
84 config->csv_sep, run, config->csv_sep, enabled_percent);
87 static void print_running_json(struct perf_stat_config *config, u64 run, u64 ena)
93 fprintf(config->output, "\"event-runtime\" : %" PRIu64 ", \"pcnt-running\" : %.2f, ",
97 static void print_running(struct perf_stat_config *config,
100 if (config->json_output) {
102 print_running_json(config, run, ena);
103 } else if (config->csv_output) {
105 print_running_csv(config, run, ena);
108 print_running_std(config, run, ena);
112 static void print_noise_pct_std(struct perf_stat_config *config,
116 fprintf(config->output, " ( +-%6.2f%% )", pct);
119 static void print_noise_pct_csv(struct perf_stat_config *config,
122 fprintf(config->output, "%s%.2f%%", config->csv_sep, pct);
125 static void print_noise_pct_json(struct perf_stat_config *config,
128 fprintf(config->output, "\"variance\" : %.2f, ", pct);
131 static void print_noise_pct(struct perf_stat_config *config,
136 if (config->json_output) {
138 print_noise_pct_json(config, pct);
139 } else if (config->csv_output) {
141 print_noise_pct_csv(config, pct);
144 print_noise_pct_std(config, pct);
148 static void print_noise(struct perf_stat_config *config,
153 if (config->run_count == 1)
157 print_noise_pct(config, stddev_stats(&ps->res_stats), avg, before_metric);
160 static void print_cgroup_std(struct perf_stat_config *config, const char *cgrp_name)
162 fprintf(config->output, " %-*s", CGROUP_LEN, cgrp_name);
165 static void print_cgroup_csv(struct perf_stat_config *config, const char *cgrp_name)
167 fprintf(config->output, "%s%s", config->csv_sep, cgrp_name);
170 static void print_cgroup_json(struct perf_stat_config *config, const char *cgrp_name)
172 fprintf(config->output, "\"cgroup\" : \"%s\", ", cgrp_name);
175 static void print_cgroup(struct perf_stat_config *config, struct cgroup *cgrp)
177 if (nr_cgroups || config->cgroup_list) {
180 if (config->json_output)
181 print_cgroup_json(config, cgrp_name);
182 else if (config->csv_output)
183 print_cgroup_csv(config, cgrp_name);
185 print_cgroup_std(config, cgrp_name);
189 static void print_aggr_id_std(struct perf_stat_config *config,
192 FILE *output = config->output;
193 int idx = config->aggr_mode;
196 switch (config->aggr_mode) {
214 if (evsel->percore && !config->percore_show_thread) {
239 static void print_aggr_id_csv(struct perf_stat_config *config,
242 FILE *output = config->output;
243 const char *sep = config->csv_sep;
245 switch (config->aggr_mode) {
251 fprintf(config->output, "S%d-D%d-L%d-ID%d%s%d%s",
267 if (evsel->percore && !config->percore_show_thread) {
289 static void print_aggr_id_json(struct perf_stat_config *config,
292 FILE *output = config->output;
294 switch (config->aggr_mode) {
316 if (evsel->percore && !config->percore_show_thread) {
337 static void aggr_printout(struct perf_stat_config *config,
340 if (config->json_output)
341 print_aggr_id_json(config, evsel, id, aggr_nr);
342 else if (config->csv_output)
343 print_aggr_id_csv(config, evsel, id, aggr_nr);
345 print_aggr_id_std(config, evsel, id, aggr_nr);
360 static void new_line_std(struct perf_stat_config *config __maybe_unused,
368 static inline void __new_line_std_csv(struct perf_stat_config *config,
374 aggr_printout(config, os->evsel, os->id, os->aggr_nr);
382 static void do_new_line_std(struct perf_stat_config *config,
385 __new_line_std_csv(config, os);
386 if (config->aggr_mode == AGGR_NONE)
391 static void print_metric_std(struct perf_stat_config *config,
408 do_new_line_std(config, os);
418 static void new_line_csv(struct perf_stat_config *config, void *ctx)
423 __new_line_std_csv(config, os);
425 fputs(config->csv_sep, os->fh);
428 static void print_metric_csv(struct perf_stat_config *config __maybe_unused,
438 fprintf(out, "%s%s", config->csv_sep, config->csv_sep);
446 fprintf(out, "%s%s%s%s", config->csv_sep, vals, config->csv_sep, skip_spaces(unit));
449 static void print_metric_json(struct perf_stat_config *config __maybe_unused,
460 if (!config->metric_only)
464 static void new_line_json(struct perf_stat_config *config, void *ctx)
471 aggr_printout(config, os->evsel, os->id, os->aggr_nr);
474 static void print_metricgroup_header_json(struct perf_stat_config *config,
481 fprintf(config->output, "\"metricgroup\" : \"%s\"}", metricgroup_name);
482 new_line_json(config, ctx);
485 static void print_metricgroup_header_csv(struct perf_stat_config *config,
495 fputs(config->csv_sep, os->fh);
500 fputs(config->csv_sep, os->fh);
501 fprintf(config->output, "%s", metricgroup_name);
502 new_line_csv(config, ctx);
505 static void print_metricgroup_header_std(struct perf_stat_config *config,
517 n = fprintf(config->output, " %*s", EVNAME_LEN, metricgroup_name);
519 fprintf(config->output, "%*s", MGROUP_LEN - n - 1, "");
545 static void print_metric_only(struct perf_stat_config *config,
552 unsigned mlen = config->metric_only_len;
568 static void print_metric_only_csv(struct perf_stat_config *config __maybe_unused,
586 fprintf(out, "%s%s", vals, config->csv_sep);
590 static void print_metric_only_json(struct perf_stat_config *config __maybe_unused,
614 static void new_line_metric(struct perf_stat_config *config __maybe_unused,
619 static void print_metric_header(struct perf_stat_config *config,
628 if (config->iostat_run &&
639 if (config->json_output)
641 else if (config->csv_output)
642 fprintf(os->fh, "%s%s", unit, config->csv_sep);
644 fprintf(os->fh, "%*s ", config->metric_only_len, unit);
647 static void print_counter_value_std(struct perf_stat_config *config,
650 FILE *output = config->output;
655 if (config->big_num)
666 fprintf(output, "%-*s ", config->unit_width, evsel->unit);
671 static void print_counter_value_csv(struct perf_stat_config *config,
674 FILE *output = config->output;
676 const char *sep = config->csv_sep;
691 static void print_counter_value_json(struct perf_stat_config *config,
694 FILE *output = config->output;
708 static void print_counter_value(struct perf_stat_config *config,
711 if (config->json_output)
712 print_counter_value_json(config, evsel, avg, ok);
713 else if (config->csv_output)
714 print_counter_value_csv(config, evsel, avg, ok);
716 print_counter_value_std(config, evsel, avg, ok);
719 static void abs_printout(struct perf_stat_config *config,
723 aggr_printout(config, evsel, id, aggr_nr);
724 print_counter_value(config, evsel, avg, ok);
725 print_cgroup(config, evsel->cgrp);
767 static void printout(struct perf_stat_config *config, struct outstate *os,
777 if (config->csv_output) {
778 pm = config->metric_only ? print_metric_only_csv : print_metric_csv;
779 nl = config->metric_only ? new_line_metric : new_line_csv;
782 } else if (config->json_output) {
783 pm = config->metric_only ? print_metric_only_json : print_metric_json;
784 nl = config->metric_only ? new_line_metric : new_line_json;
787 pm = config->metric_only ? print_metric_only : print_metric_std;
788 nl = config->metric_only ? new_line_metric : new_line_std;
793 if (config->metric_only) {
794 pm(config, os, NULL, "", "", 0);
802 config->print_free_counters_hint = 1;
804 config->print_mixed_hw_group_error = 1;
815 if (!config->metric_only && !counter->default_metricgroup) {
816 abs_printout(config, os->id, os->aggr_nr, counter, uval, ok);
818 print_noise(config, counter, noise, /*before_metric=*/true);
819 print_running(config, run, ena, /*before_metric=*/true);
823 if (!config->metric_only && counter->default_metricgroup) {
826 aggr_printout(config, os->evsel, os->id, os->aggr_nr);
833 if (config->json_output)
834 new_line_json(config, (void *)os);
836 __new_line_std_csv(config, os);
839 print_noise(config, counter, noise, /*before_metric=*/true);
840 print_running(config, run, ena, /*before_metric=*/true);
841 from = perf_stat__print_shadow_stats_metricgroup(config, counter, aggr_idx,
843 &config->metric_events);
846 perf_stat__print_shadow_stats(config, counter, uval, aggr_idx,
847 &out, &config->metric_events);
849 pm(config, os, /*color=*/NULL, /*format=*/NULL, /*unit=*/"", /*val=*/0);
852 if (!config->metric_only) {
853 print_noise(config, counter, noise, /*before_metric=*/false);
854 print_running(config, run, ena, /*before_metric=*/false);
861 char *config;
869 config = strchr(counter->name, '/');
870 if (config) {
872 "%s%s", counter->pmu_name, config) > 0) {
894 static bool hybrid_uniquify(struct evsel *evsel, struct perf_stat_config *config)
896 return evsel__is_hybrid(evsel) && !config->hybrid_merge;
899 static void uniquify_counter(struct perf_stat_config *config, struct evsel *counter)
901 if (config->no_merge || hybrid_uniquify(counter, config))
907 * @config: The perf stat configuration (including aggregation mode).
921 static bool should_skip_zero_counter(struct perf_stat_config *config,
932 if (config->aggr_mode == AGGR_THREAD && config->system_wide)
947 struct aggr_cpu_id own_id = config->aggr_get_id(config, cpu);
955 static void print_counter_aggrdata(struct perf_stat_config *config,
959 FILE *output = config->output;
964 struct aggr_cpu_id id = config->aggr_map->map[aggr_idx];
966 bool metric_only = config->metric_only;
976 uniquify_counter(config, counter);
982 if (perf_stat__skip_metric_event(counter, &config->metric_events, ena, run))
985 if (val == 0 && should_skip_zero_counter(config, counter, &id))
989 if (config->json_output)
993 else if (config->summary && config->csv_output &&
994 !config->no_csv_summary && !config->interval)
995 fprintf(output, "%s%s", "summary", config->csv_sep);
1000 printout(config, os, uval, run, ena, avg, aggr_idx);
1006 static void print_metric_begin(struct perf_stat_config *config,
1015 if (!config->metric_only)
1018 if (config->json_output)
1019 fputc('{', config->output);
1021 fprintf(config->output, "%s", os->prefix);
1024 id = config->aggr_map->map[aggr_idx];
1026 aggr_printout(config, evsel, id, aggr->nr);
1028 print_cgroup(config, os->cgrp ? : evsel->cgrp);
1031 static void print_metric_end(struct perf_stat_config *config, struct outstate *os)
1033 FILE *output = config->output;
1035 if (!config->metric_only)
1038 if (config->json_output) {
1046 static void print_aggr(struct perf_stat_config *config,
1053 if (!config->aggr_map || !config->aggr_get_id)
1060 cpu_aggr_map__for_each_idx(aggr_idx, config->aggr_map) {
1061 print_metric_begin(config, evlist, os, aggr_idx);
1064 print_counter_aggrdata(config, counter, aggr_idx, os);
1066 print_metric_end(config, os);
1070 static void print_aggr_cgroup(struct perf_stat_config *config,
1077 if (!config->aggr_map || !config->aggr_get_id)
1086 cpu_aggr_map__for_each_idx(aggr_idx, config->aggr_map) {
1087 print_metric_begin(config, evlist, os, aggr_idx);
1093 print_counter_aggrdata(config, counter, aggr_idx, os);
1095 print_metric_end(config, os);
1100 static void print_counter(struct perf_stat_config *config,
1105 /* AGGR_THREAD doesn't have config->aggr_get_id */
1106 if (!config->aggr_map)
1109 cpu_aggr_map__for_each_idx(aggr_idx, config->aggr_map) {
1110 print_counter_aggrdata(config, counter, aggr_idx, os);
1114 static void print_no_aggr_metric(struct perf_stat_config *config,
1137 print_metric_begin(config, evlist, os, aggr_idx);
1145 printout(config, os, uval, run, ena, 1.0, aggr_idx);
1148 print_metric_end(config, os);
1152 static void print_metric_headers_std(struct perf_stat_config *config,
1155 fputc(' ', config->output);
1158 int len = aggr_header_lens[config->aggr_mode];
1160 if (nr_cgroups || config->cgroup_list)
1163 fprintf(config->output, "%*s", len, "");
1167 static void print_metric_headers_csv(struct perf_stat_config *config,
1170 if (config->interval)
1171 fputs("time,", config->output);
1172 if (!config->iostat_run)
1173 fputs(aggr_header_csv[config->aggr_mode], config->output);
1176 static void print_metric_headers_json(struct perf_stat_config *config __maybe_unused,
1181 static void print_metric_headers(struct perf_stat_config *config,
1186 .fh = config->output
1195 if (config->json_output)
1196 print_metric_headers_json(config, no_indent);
1197 else if (config->csv_output)
1198 print_metric_headers_csv(config, no_indent);
1200 print_metric_headers_std(config, no_indent);
1202 if (config->iostat_run)
1203 iostat_print_header_prefix(config);
1205 if (config->cgroup_list)
1212 perf_stat__print_shadow_stats(config, counter, 0,
1215 &config->metric_events);
1218 if (!config->json_output)
1219 fputc('\n', config->output);
1222 static void prepare_interval(struct perf_stat_config *config,
1225 if (config->iostat_run)
1228 if (config->json_output)
1231 else if (config->csv_output)
1233 (unsigned long) ts->tv_sec, ts->tv_nsec, config->csv_sep);
1239 static void print_header_interval_std(struct perf_stat_config *config,
1245 FILE *output = config->output;
1247 switch (config->aggr_mode) {
1255 aggr_header_lens[config->aggr_mode],
1256 aggr_header_std[config->aggr_mode]);
1261 aggr_header_lens[config->aggr_mode],
1262 aggr_header_std[config->aggr_mode]);
1271 if (!config->iostat_run)
1279 if (config->metric_only)
1280 print_metric_headers(config, evlist, true);
1283 COUNTS_LEN, "counts", config->unit_width, "unit");
1286 static void print_header_std(struct perf_stat_config *config,
1290 FILE *output = config->output;
1311 if (config->run_count > 1)
1312 fprintf(output, " (%d runs)", config->run_count);
1315 if (config->metric_only)
1316 print_metric_headers(config, evlist, false);
1319 static void print_header_csv(struct perf_stat_config *config,
1325 if (config->metric_only)
1326 print_metric_headers(config, evlist, true);
1328 static void print_header_json(struct perf_stat_config *config,
1334 if (config->metric_only)
1335 print_metric_headers(config, evlist, true);
1338 static void print_header(struct perf_stat_config *config,
1347 if (config->interval_clear)
1350 if (num_print_iv == 0 || config->interval_clear) {
1351 if (config->json_output)
1352 print_header_json(config, _target, evlist, argc, argv);
1353 else if (config->csv_output)
1354 print_header_csv(config, _target, evlist, argc, argv);
1355 else if (config->interval)
1356 print_header_interval_std(config, _target, evlist, argc, argv);
1358 print_header_std(config, _target, evlist, argc, argv);
1373 static void print_table(struct perf_stat_config *config,
1385 for (idx = 0; idx < config->run_count; idx++) {
1386 double run = (double) config->walltime_run[idx] / NSEC_PER_SEC;
1406 static void print_footer(struct perf_stat_config *config)
1408 double avg = avg_stats(config->walltime_nsecs_stats) / NSEC_PER_SEC;
1409 FILE *output = config->output;
1411 if (config->interval || config->csv_output || config->json_output)
1414 if (!config->null_run)
1417 if (config->run_count == 1) {
1420 if (config->ru_display) {
1421 double ru_utime = timeval2double(&config->ru_data.ru_utime);
1422 double ru_stime = timeval2double(&config->ru_data.ru_stime);
1429 double sd = stddev_stats(config->walltime_nsecs_stats) / NSEC_PER_SEC;
1436 if (config->walltime_run_table)
1437 print_table(config, output, precision, avg);
1442 print_noise_pct(config, sd, avg, /*before_metric=*/false);
1446 if (config->print_free_counters_hint && sysctl__nmi_watchdog_enabled())
1453 if (config->print_mixed_hw_group_error)
1459 static void print_percore(struct perf_stat_config *config,
1462 bool metric_only = config->metric_only;
1463 FILE *output = config->output;
1467 if (!config->aggr_map || !config->aggr_get_id)
1470 if (config->percore_show_thread)
1471 return print_counter(config, counter, os);
1477 core_map = cpu_aggr_map__empty_new(config->aggr_map->nr);
1483 cpu_aggr_map__for_each_idx(aggr_idx, config->aggr_map) {
1484 struct perf_cpu curr_cpu = config->aggr_map->map[aggr_idx].cpu;
1497 print_counter_aggrdata(config, counter, aggr_idx, os);
1507 static void print_cgroup_counter(struct perf_stat_config *config, struct evlist *evlist,
1515 print_metric_end(config, os);
1518 print_metric_begin(config, evlist, os, /*aggr_idx=*/0);
1521 print_counter(config, counter, os);
1524 print_metric_end(config, os);
1527 void evlist__print_counters(struct evlist *evlist, struct perf_stat_config *config,
1531 bool metric_only = config->metric_only;
1532 int interval = config->interval;
1536 .fh = config->output,
1540 if (config->iostat_run)
1545 prepare_interval(config, buf, sizeof(buf), ts);
1548 print_header(config, _target, evlist, argc, argv);
1550 switch (config->aggr_mode) {
1556 if (config->cgroup_list)
1557 print_aggr_cgroup(config, evlist, &os);
1559 print_aggr(config, evlist, &os);
1563 if (config->iostat_run) {
1564 iostat_print_counters(evlist, config, ts, buf,
1566 } else if (config->cgroup_list) {
1567 print_cgroup_counter(config, evlist, &os);
1569 print_metric_begin(config, evlist, &os, /*aggr_idx=*/0);
1571 print_counter(config, counter, &os);
1573 print_metric_end(config, &os);
1578 print_no_aggr_metric(config, evlist, &os);
1582 print_percore(config, counter, &os);
1584 print_counter(config, counter, &os);
1594 print_footer(config);
1596 fflush(config->output);