Messages in this thread | | | Date | Wed, 16 May 2012 09:41:47 +0200 | Subject | Re: [PATCH v2 4/5] perf record: add meta-data support for pipe-mode | From | Stephane Eranian <> |
| |
On Wed, May 16, 2012 at 5:34 AM, David Ahern <dsahern@gmail.com> wrote: > On 5/15/12 5:28 AM, Stephane Eranian wrote: >> >> This patch adds the meta-data header support for perf record >> when used in pipe mode: perf record -o - >> >> 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, no host, event header information >> was 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. >> >> It should be noted that there is a limitation with the current >> perf in terms of endianess in pipe mode. Perf assumes the records >> are generated using the same endianess during collection and >> analysis. That is always the case with the example shown below. >> However, one could also do: >> $ perf record -o - noploop 2 | perf inject -b>perf.data >> $ cat perf.data | perf report -i - >> >> With this patch, it is possible to get: >> $ perf record -o - noploop 2 | perf inject -b | perf report -i - >> # ======== >> # captured on: Fri Jan 20 18:13:55 2012 >> # ======== >> # >> # hostname : quad >> # os release : 3.2.0-rc7-tip >> # perf version : 3.2.0 >> # arch : x86_64 >> # nrcpus online : 4 >> # nrcpus avail : 4 >> # cpudesc : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz >> # cpuid : GenuineIntel,6,15,11 >> # total memory : 8092884 kB >> ... >> # HEADER_CPU_TOPOLOGY info available, use -I to display >> noploop for 2 seconds >> [ perf record: Woken up 1 times to write data ] >> [ perf record: Captured and wrote 0.084 MB - (~3677 samples) ] >> 99.80% noploop noploop [.] noploop >> 0.19% noploop [kernel.kallsyms] [k] radix_tree_gang_lookup >> >> Signed-off-by: Stephane Eranian<eranian@google.com> > > > I love the feature and it works nicely, but there has been push back on > adding more synthesized events. Also the size of the patch is a bit much to > take in. If there is no objection to the synthesized can you break the patch > up -- e.g., introduce the events in one, synthesis and processing functions > in another, plug into the commands, ... > Without new synthesized events, you cannot make this work. This is by construction of the pipe mode. Meta-data has be be injected in the stream and therefore it needs PERF_RECORD_* types.
> David -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |