perf record: Check conflict between '--timestamp-filename' option and pipe mode befor...
authorYang Jihong <yangjihong1@huawei.com>
Fri, 19 Jan 2024 04:03:03 +0000 (04:03 +0000)
committerNamhyung Kim <namhyung@kernel.org>
Mon, 22 Jan 2024 20:08:20 +0000 (12:08 -0800)
In pipe mode, no need to switch perf data output, therefore,
'--timestamp-filename' option should not take effect.
Check the conflict before recording and output WARNING.
In this case, the check pipe mode in perf_data__switch() can be removed.

Before:

  # perf record --timestamp-filename -o- perf test -w noploop | perf report -i- --percent-limit=1
  # To display the perf.data header info, please use --header/--header-only options.
  #
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Dump -.2024011812110182 ]
  #
  # Total Lost Samples: 0
  #
  # Samples: 4K of event 'cycles:P'
  # Event count (approx.): 2176784359
  #
  # Overhead  Command  Shared Object         Symbol
  # ........  .......  ....................  ......................................
  #
      97.83%  perf     perf                  [.] noploop

  #
  # (Tip: Print event counts in CSV format with: perf stat -x,)
  #

After:

  # perf record --timestamp-filename -o- perf test -w noploop | perf report -i- --percent-limit=1
  WARNING: --timestamp-filename option is not available in pipe mode.
  # To display the perf.data header info, please use --header/--header-only options.
  #
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.000 MB - ]
  #
  # Total Lost Samples: 0
  #
  # Samples: 4K of event 'cycles:P'
  # Event count (approx.): 2185575421
  #
  # Overhead  Command  Shared Object          Symbol
  # ........  .......  .....................  .............................................
  #
      97.75%  perf     perf                   [.] noploop

  #
  # (Tip: Profiling branch (mis)predictions with: perf record -b / perf report)
  #

Fixes: ecfd7a9c044e ("perf record: Add '--timestamp-filename' option to append timestamp to output file name")
Signed-off-by: Yang Jihong <yangjihong1@huawei.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20240119040304.3708522-3-yangjihong1@huawei.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/builtin-record.c
tools/perf/util/data.c

index fb8d4067b76c7b7a1b654b27ccb6f322885b976f..5e3ea5cf14298e7ce5ee367e73fbdbd3b85bc5e3 100644 (file)
@@ -2472,6 +2472,11 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
        if (data->is_pipe && rec->evlist->core.nr_entries == 1)
                rec->opts.sample_id = true;
 
+       if (rec->timestamp_filename && perf_data__is_pipe(data)) {
+               rec->timestamp_filename = false;
+               pr_warning("WARNING: --timestamp-filename option is not available in pipe mode.\n");
+       }
+
        evlist__uniquify_name(rec->evlist);
 
        /* Debug message used by test scripts */
index c29d8a382b1963db452f60aba6509d47fd6436aa..550675ce0b787866737d1c2cbd3f4a6fc883928c 100644 (file)
@@ -430,8 +430,6 @@ int perf_data__switch(struct perf_data *data,
 {
        int ret;
 
-       if (check_pipe(data))
-               return -EINVAL;
        if (perf_data__is_read(data))
                return -EINVAL;