Skip to contentSkip to conversation

perf, tools, stat: Print warning when no metric with --metric-only

PATCH In review Andi Kleen 2 participants 3 messages Mar 10, 2016 – Mar 11, 2016 perf events

lore
Share & tools
lore

Andi Kleen

author
#0 lore raw

PATCH 1/1 perf, tools, stat: Print warning when no metric with --metric-only

From: Andi Kleen <[email protected]>

Print a warning when --metric-only is specified, but the events define no metric. Requested by Jiri.

% perf stat -e cycles --metric-only true

Performance counter stats for 'true':

No metrics defined by configured events

       0.001612070 seconds time elapsed
---
 tools/perf/builtin-stat.c | 4 ++++
 1 file changed, 4 insertions(+)
tools/perf/builtin-stat.c +4 -0
index 1f19f2f..70efb58 100644
@@ -743,6 +743,7 @@ struct outstate {
 	int  nfields;
 	int  id, nr;
 	struct perf_evsel *evsel;
+	int nheaders;
 };
 
 #define METRIC_LEN  35
@@ -919,6 +920,7 @@ static void print_metric_header(void *ctx, const char *color __maybe_unused,
 		fprintf(os->fh, "%s%s", unit, csv_sep);
 	else
 		fprintf(os->fh, "%-*s ", METRIC_ONLY_LEN, unit);
+	os->nheaders++;
 }
 
 static void nsec_printout(int id, int nr, struct perf_evsel *evsel, double avg)
@@ -1315,6 +1317,8 @@ static void print_metric_headers(char *prefix)
 					      &out);
 	}
 	fputc('\n', stat_config.output);
+	if (os.nheaders == 0)
+		pr_warning("No metrics defined by configured events\n");
 }
 
 static void print_interval(char *prefix, struct timespec *ts)
Signature · 1 line
2.5.0
#1 lore raw
Quoted 5 lines · Andi Kleen

From: Andi Kleen <[email protected]>

Print a warning when --metric-only is specified, but the events define no metric. Requested by Jiri.

Quoted 8 lines

% perf stat -e cycles --metric-only true

Performance counter stats for 'true':

No metrics defined by configured events

       0.001612070 seconds time elapsed

how about printing the 'time' column and keeping the warning on the header line?

[jolsa@krava perf]$ sudo ./perf stat -a -I 1000 --metric-only

            time insn per cycle       branch-misses of all branches 
     1.000370422    0.30                6.77%                      
     2.000749536    0.40                5.75%                      
     3.001007542    0.28                5.38%                      
     4.001324779    0.57                5.83%                      

^C 4.011558899 0.01 0.12%

[jolsa@krava perf]$ sudo ./perf stat -a -I 1000 --metric-only -e cycles

            time No metrics defined by configured events
     1.000211156 
     2.000432519 

thanks,
jirka

---

tools/perf/builtin-stat.c +3 -3
index 91188047be6a..9ce4138a8065 100644
@@ -1302,7 +1302,7 @@ static void print_metric_headers(char *prefix)
 	};
 
 	if (prefix)
-		fprintf(stat_config.output, "%s", prefix);
+		fprintf(stat_config.output, "%16s ", "time");
 
 	if (!csv_output)
 		fprintf(stat_config.output, "%*s",
@@ -1319,9 +1319,9 @@ static void print_metric_headers(char *prefix)
 					      0,
 					      &out);
 	}
-	fputc('\n', stat_config.output);
 	if (os.nheaders == 0)
-		pr_warning("No metrics defined by configured events\n");
+		pr_warning("No metrics defined by configured events");
+	fputc('\n', stat_config.output);
 }
 
 static void print_interval(char *prefix, struct timespec *ts)
author
#2 lore raw
Quoted 6 lines

[jolsa@krava perf]$ sudo ./perf stat -a -I 1000 --metric-only

            time insn per cycle       branch-misses of all branches 
     1.000370422    0.30                6.77%                      
     2.000749536    0.40                5.75%                      
     3.001007542    0.28                5.38%                      
     4.001324779    0.57                5.83%                      
Quoted 6 lines

^C 4.011558899 0.01 0.12%

[jolsa@krava perf]$ sudo ./perf stat -a -I 1000 --metric-only -e cycles

            time No metrics defined by configured events
     1.000211156 
     2.000432519 

Looks good to me. Please submit it.

-Andi