Introducing perf.data version 3 format. No functional change, just introducing doc, magic bytes and the struct.
Signed-off-by: Jiri Olsa <jo...@redhat.com> Cc: Corey Ashford <cjash...@linux.vnet.ibm.com> Cc: Frederic Weisbecker <fweis...@gmail.com> Cc: Ingo Molnar <mi...@elte.hu> Cc: Namhyung Kim <namhy...@kernel.org> Cc: Paul Mackerras <pau...@samba.org> Cc: Peter Zijlstra <a.p.zijls...@chello.nl> Cc: Arnaldo Carvalho de Melo <a...@redhat.com> Cc: Andi Kleen <a...@linux.intel.com> Cc: David Ahern <dsah...@gmail.com> --- tools/perf/Documentation/perf-data-file-v3.txt | 63 ++++++++++++++++++++++++++ tools/perf/util/header.c | 8 +++- tools/perf/util/header.h | 8 ++++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 tools/perf/Documentation/perf-data-file-v3.txt diff --git a/tools/perf/Documentation/perf-data-file-v3.txt b/tools/perf/Documentation/perf-data-file-v3.txt new file mode 100644 index 0000000..9bf9464 --- /dev/null +++ b/tools/perf/Documentation/perf-data-file-v3.txt @@ -0,0 +1,63 @@ +perf-data-file-v3(5) +==================== + +NAME +---- +perf-data-file-v3 - The perf tool file format version 3 + + +DESCRIPTION +----------- +Following text describes version 3 of the perf data file format, +which is version that is currently used by perf tool. + +In version 3 we got rid of following sections: + EVENT IDS + EVENT ATTRIBUTES + EVENT TYPES + +and keep only data and features sections. All the data +from above listed sections are now read from specific +FEATURES sections. + +High level view of the format: + FILE HEADER + EVENT DATA + FEATURES + + +FILE HEADER +----------- +Starting point of the data file with magic bytes and global +section information. + +The section contains following data: + struct perf_file_header header + +struct perf_file_header:: + struct perf_file_header { + u64 magic; + u64 size; + u64 attr_size; + struct perf_file_section data; + struct perf_file_section features; + DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS); + } + + magic ID 'PERFILE3' + size header size sizeof(struct perf_file_header) + attr_size attribute size sizeof(struct perf_file_attr) + data location of 'EVENT DATA' + features location of 'EVENT TYPES' + adds_features 'FEATURES' bitmask + + +EVENT DATA +---------- +This section contains blob of all events' data - auxiliary events +and samples. + + +FEATURES +-------- +Same as in version 2. diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index e43879e..db6b131 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -30,6 +30,7 @@ static const char **header_argv; /* * magic2 = "PERFILE2" + * magic3 = "PERFILE3" * must be a numerical value to let the endianness * determine the memory layout. That way we are able * to detect endianness when reading the perf.data file @@ -40,6 +41,8 @@ static const char **header_argv; static const char *__perf_magic1 = "PERFFILE"; static const u64 __perf_magic2 = 0x32454c4946524550ULL; static const u64 __perf_magic2_sw = 0x50455246494c4532ULL; +static const u64 __perf_magic3 = 0x33454c4946524550ULL; +static const u64 __perf_magic3_sw = 0x50455246494c4533ULL; #define PERF_MAGIC __perf_magic2 @@ -2464,7 +2467,9 @@ bool is_perf_magic(u64 magic) { if (!memcmp(&magic, __perf_magic1, sizeof(magic)) || magic == __perf_magic2 - || magic == __perf_magic2_sw) + || magic == __perf_magic2_sw + || magic == __perf_magic3 + || magic == __perf_magic3_sw) return true; return false; @@ -2506,6 +2511,7 @@ do { \ } while (0) CHECK(__perf_magic2, PERF_HEADER_VERSION_2); + CHECK(__perf_magic3, PERF_HEADER_VERSION_3); return -1; } diff --git a/tools/perf/util/header.h b/tools/perf/util/header.h index c6ea4603..bcd3e64 100644 --- a/tools/perf/util/header.h +++ b/tools/perf/util/header.h @@ -37,6 +37,7 @@ enum { enum perf_header_version { PERF_HEADER_VERSION_1, PERF_HEADER_VERSION_2, + PERF_HEADER_VERSION_3, }; struct perf_file_section { @@ -52,6 +53,12 @@ struct perf_file_header_v2 { DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS); }; +struct perf_file_header_v3 { + struct perf_file_section data; + struct perf_file_section features; + DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS); +}; + struct perf_file_header { u64 magic; u64 size; @@ -60,6 +67,7 @@ struct perf_file_header { /* version specific data */ union { struct perf_file_header_v2 v2; + struct perf_file_header_v3 v3; }; }; -- 1.7.11.7 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/