Skip to content

perf tool: add meta-data header support for pipe-mode

David Carrillo-Cisneros lkml 6 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v6 Latest16 patches 1 replyIn review
  2. v511 of 16 patches 4 repliesSuperseded
  3. v416 patches 16 repliesSuperseded
Earlier versions · 3
VersionPostedPatchesRepliesStatus
v315 patches11 repliesSuperseded
v213 patches29 repliesSuperseded
v17 patches14 repliesSuperseded

Patches in v6 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/16perf header: encapsulate read and swaptools/perf/util/header.c+77 -1330 replies
2/16perf header: add PROCESS_STR_FUN macrotools/perf/util/header.c+17 -480 replies
3/16perf header: fail on write_padded errortools/perf/util/header.c+5 -10 replies
4/16perf util: add const modifier to buf in "writen" functiontools/perf/util/util.c tools/perf/util/util.h+5 -30 replies
5/16perf header: revamp do_writetools/perf/util/build-id.c tools/perf/util/header.c tools/perf/util/header.h+8 -100 replies
6/16perf header: add struct feat_fd for writetools/perf/util/build-id.c tools/perf/util/build-id.h tools/perf/util/header.c +1 more+138 -1110 replies
7/16perf header: use struct feat_fd for printtools/perf/util/header.c+47 -550 replies
8/16perf header: use struct feat_fd to process header recordstools/perf/util/header.c+79 -850 replies
9/16perf header: don't pass struct perf_file_section to process_##_feattools/perf/util/header.c+24 -340 replies
10/16perf header: use struct feat_fd in read header recordstools/perf/util/header.c+50 -510 replies
11/16perf header: make write_pmu_mappings pipe-mode friendlytools/perf/util/header.c+11 -100 replies
12/16perf header: add a buffer to struct feat_fdtools/perf/util/header.c+70 -50 replies
13/16perf header: change FEAT_OP* macrostools/perf/util/header.c+44 -280 replies
14/16perf tool: add show_feature_header to perf_tooltools/perf/builtin-report.c tools/perf/builtin-script.c tools/perf/util/tool.h+14 -00 replies
15/16perf tools: add feature header record to pipe-modetools/perf/Documentation/perf.data-file-format.txt tools/perf/builtin-annotate.c tools/perf/builtin-inject.c +9 more+141 -30 replies
16/16perf header: add event desc to pipe-mode headertools/perf/util/header.c+17 -20 replies

Reviews trailers per patch

None of the 16 patches has a Reviewed-by or Acked-by of their own; the series has one for all of them.

PatchJiri Olsa
SeriesA-b
1/16
2/16
3/16
4/16
5/16
6/16
7/16
8/16
9/16
10/16
11/16
12/16
13/16
14/16
15/16
16/16

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v6 thread

Cover letter [PATCH v6 00/16] perf tool: add meta-data header support for pipe-mode

v6: - Avoid buffer resize that would overflow event's header size.
v5: - Fix buffer leaking and size changes in
perf_event__synthesize_features.
- Remove unnecessary renaming.
- Remove extra tabs in do_write_string.
v4: - Limit write_* functions to page_size.
- Fixed bugs spotted by Jiri.
- Add information about pipe-mode to some error messages.
v3: - Fix header output for event aux record.
- Uniformize variable naming and other cleanup.
- Other fixes suggested by Jiri and Nahmyung.

v2: - Finer patch splitting.
- Add only one record type with a feature id instead of one record per new feature (as suggested by Jiri).
- Add perf.data documentation.

(This is a rebased and updated version of Stephane Eranian's version
in https://patchwork.kernel.org/patch/1499081/)

Up until now, meta-data was only available when perf record was used in "regular" mode, i.e., generating a perf.data file. For users depending on pipe mode, neither host or event header information were gathered. This patch addresses this limitation.

The difficulty in pipe mode is that information needs to be written sequentially to the pipe. Meta data headers are usually generated (and also expected) at the beginning of the file (or piped output). To solve this problem, we introduce new synthetic record types, one for each meta-data type. The approach is similar to what is *ALREADY* used for BUILD_ID and TRACING_DATA.

We have modified util/header.c such that the same routines are used to generate and read the meta-data information regardless of pipe-mode vs. regular mode. To make this work, we added a new struct called feat_fd which encapsulates all the information necessary to read or write meta-data information to a file/pipe or from a file/pipe.

With this series, it is possible to get:

  $ perf record -o - -e cycles sleep 1 | perf report --stdio --header
  # ========
  # captured on: Mon May 22 16:33:43 2017
  # ========
  #
  # hostname : my_hostname
  # os release : 4.11.0-dbx-up_perf
  # perf version : 4.11.rc6.g6277c80
  # arch : x86_64
  # nrcpus online : 72
  # nrcpus avail : 72
  # cpudesc : Intel(R) Xeon(R) CPU E5-2696 v3 @ 2.30GHz
  # cpuid : GenuineIntel,6,63,2
  # total memory : 263457192 kB
  # cmdline : /root/perf record -e cycles sleep 1 
  # event : name = cycles, , size = 112, { sample_period, sample_freq } = 4000, sample_type = IP|TID|TIME|PERIOD, disabled = 1, inherit = 1, mmap = 1, comm = 1, freq = 1, enable_on_exec = 1, task = 1, sample_id_all = 1, exclude_guest = 1, mmap2 = 1, comm_exec = 1
  # CPU_TOPOLOGY info available, use -I to display
  # NUMA_TOPOLOGY info available, use -I to display
  # pmu mappings: intel_bts = 6, cpu = 4, msr = 49, uncore_cbox_10 = 36, [SNIP]
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.000 MB - ]
  ...

Only patches 14 to 16 affect user observed behavior. All other are preparatory changes or bug fixes.

David Carrillo-Cisneros (16):
perf header: encapsulate read and swap
perf header: add PROCESS_STR_FUN macro
perf header: fail on write_padded error
perf util: add const modifier to buf in "writen" function perf header: revamp do_write
perf header: add struct feat_fd for write
perf header: use struct feat_fd for print
perf header: use struct feat_fd to process header records perf header: don't pass struct perf_file_section to process_##_feat perf header: use struct feat_fd in read header records perf header: make write_pmu_mappings pipe-mode friendly perf header: add a buffer to struct feat_fd
perf header: change FEAT_OP* macros
perf tool: add show_feature_header to perf_tool
perf tools: add feature header record to pipe-mode
perf header: add event desc to pipe-mode header

 tools/perf/Documentation/perf.data-file-format.txt |   10 +-
 tools/perf/builtin-annotate.c                      |    1 +
 tools/perf/builtin-inject.c                        |    1 +
 tools/perf/builtin-record.c                        |    7 +
 tools/perf/builtin-report.c                        |    5 +
 tools/perf/builtin-script.c                        |    4 +
 tools/perf/util/build-id.c                         |   10 +-
 tools/perf/util/build-id.h                         |    4 +-
 tools/perf/util/event.c                            |    1 +
 tools/perf/util/event.h                            |    8 +
 tools/perf/util/header.c                           | 1015 +++++++++++---------
 tools/perf/util/header.h                           |   16 +-
 tools/perf/util/session.c                          |    4 +
 tools/perf/util/tool.h                             |   10 +-
 tools/perf/util/util.c                             |    6 +-
 tools/perf/util/util.h                             |    2 +-
 16 files changed, 636 insertions(+), 468 deletions(-)
Signature · 1 line
2.13.2.932.g7449e964c-goog