]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
perf stat: Align metric output without events
authorNamhyung Kim <namhyung@kernel.org>
Thu, 6 Nov 2025 07:28:34 +0000 (23:28 -0800)
committerNamhyung Kim <namhyung@kernel.org>
Wed, 12 Nov 2025 01:00:31 +0000 (17:00 -0800)
One of my concern in the perf stat output was the alignment in the
metrics and shadow stats.  I think it missed to calculate the basic
output length using COUNTS_LEN and EVNAME_LEN but missed to add the
unit length like "msec" and surround 2 spaces.  I'm not sure why it's
not printed below though.

But anyway, now it shows correctly aligned metric output.

  $ perf stat true

   Performance counter stats for 'true':

             859,772      task-clock                       #    0.395 CPUs utilized
                   0      context-switches                 #    0.000 /sec
                   0      cpu-migrations                   #    0.000 /sec
                  56      page-faults                      #   65.134 K/sec
           1,075,022      instructions                     #    0.86  insn per cycle
           1,255,911      cycles                           #    1.461 GHz
             220,573      branches                         #  256.548 M/sec
               7,381      branch-misses                    #    3.35% of all branches
                          TopdownL1                        #     19.2 %  tma_retiring
                                                           #     28.6 %  tma_backend_bound
                                                           #      9.5 %  tma_bad_speculation
                                                           #     42.6 %  tma_frontend_bound

         0.002174871 seconds time elapsed                  ^
                                                           |
         0.002154000 seconds user                          |
         0.000000000 seconds sys                          here

Reviewed-by: Ian Rogers <irogers@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/util/stat-display.c

index b3596f9f5cdd81f50bc4860d075f35bd369c0e68..5ac9854f8c585559a17b3181a4093f4a444877cc 100644 (file)
@@ -439,9 +439,9 @@ static inline void __new_line_std_csv(struct perf_stat_config *config,
        aggr_printout(config, os, os->evsel, os->id, os->aggr_nr);
 }
 
-static inline void __new_line_std(struct outstate *os)
+static inline void __new_line_std(struct perf_stat_config *config, struct outstate *os)
 {
-       fprintf(os->fh, "                                                 ");
+       fprintf(os->fh, "%*s", COUNTS_LEN + EVNAME_LEN + config->unit_width + 2, "");
 }
 
 static void do_new_line_std(struct perf_stat_config *config,
@@ -450,7 +450,7 @@ static void do_new_line_std(struct perf_stat_config *config,
        __new_line_std_csv(config, os);
        if (config->aggr_mode == AGGR_NONE)
                fprintf(os->fh, "        ");
-       __new_line_std(os);
+       __new_line_std(config, os);
 }
 
 static void print_metric_std(struct perf_stat_config *config,
@@ -583,13 +583,13 @@ static void print_metricgroup_header_std(struct perf_stat_config *config,
        int n;
 
        if (!metricgroup_name) {
-               __new_line_std(os);
+               __new_line_std(config, os);
                return;
        }
 
        n = fprintf(config->output, " %*s", EVNAME_LEN, metricgroup_name);
 
-       fprintf(config->output, "%*s", MGROUP_LEN - n - 1, "");
+       fprintf(config->output, "%*s", MGROUP_LEN + config->unit_width + 2 - n, "");
 }
 
 static void print_metric_only(struct perf_stat_config *config,