Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1343995
| From | Wang Nan <wangnan0@huawei.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 09/46] perf data: Explicitly set byte order for integer types |
| Date | 2016-02-26 11:00 +0100 |
| Message-ID | <r6nlO-1cF-45@gated-at.bofh.it> (permalink) |
| References | <r6n2p-13D-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
After babeltrace commit 5cec03e402aa ("ir: copy variants and
sequences when setting a field path"), 'perf data convert' gets
incorrect result if there's bpf output data. For example:
# perf data convert --to-ctf ./out.ctf
# babeltrace ./out.ctf
[10:44:31.186045346] (+?.?????????) evt: { cpu_id = 0 }, { perf_ip = 0xFFFFFFFF810E7DD1, perf_tid = 23819, perf_pid = 23819, perf_id = 518, raw_len = 3, raw_data = [ [0] = 0xC028E32F, [1] = 0x815D0100, [2] = 0x1000000 ] }
[10:44:31.286101003] (+0.100055657) evt: { cpu_id = 0 }, { perf_ip = 0xFFFFFFFF8105B609, perf_tid = 23819, perf_pid = 23819, perf_id = 518, raw_len = 3, raw_data = [ [0] = 0x35D9F1EB, [1] = 0x15D81, [2] = 0x2 ] }
The expected result of the first sample should be:
raw_data = [ [0] = 0x2FE328C0, [1] = 0x15D81, [2] = 0x1 ] }
however, 'perf data convert' output big endian value to resuling CTF
file.
The reason is a internal change (or a bug?) of babeltrace.
Before this patch, at the first add_bpf_output_values(), byte order of
all integer type is uncertain (is 0, neither 1234 (le) nor 4321 (be)).
It would be fixed by:
perf_evlist__deliver_sample
-> process_sample_event
-> ctf_stream
...
->bt_ctf_trace_add_stream_class
->bt_ctf_field_type_structure_set_byte_order
->bt_ctf_field_type_integer_set_byte_order
during creating the stream.
However, the babeltrace commit mentioned above duplicates types in
sequence to prevent potential conflict in following call stack and
link the newly allocated type into the 'raw_data' sequence:
perf_evlist__deliver_sample
-> process_sample_event
-> ctf_stream
...
-> bt_ctf_trace_add_stream_class
-> bt_ctf_stream_class_resolve_types
...
-> bt_ctf_field_type_sequence_copy
->bt_ctf_field_type_integer_copy
This happens before byte order setting, so only the newly allocated
type is initialized, the byte order of original type perf choose to
create the first raw_data is still uncertain.
Byte order in CTF output is not related to byte order in perf.data.
Setting it to anything other than BT_CTF_BYTE_ORDER_NATIVE solves this
problem (only BT_CTF_BYTE_ORDER_NATIVE needs to be fixed). To reduce
behavior changing, set byte order according to compiling options.
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
---
tools/perf/util/data-convert-bt.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-convert-bt.c
index 1f608a6..811af89 100644
--- a/tools/perf/util/data-convert-bt.c
+++ b/tools/perf/util/data-convert-bt.c
@@ -1080,6 +1080,12 @@ static struct bt_ctf_field_type *create_int_type(int size, bool sign, bool hex)
bt_ctf_field_type_integer_set_base(type, BT_CTF_INTEGER_BASE_HEXADECIMAL))
goto err;
+#if __BYTE_ORDER == __BIG_ENDIAN
+ bt_ctf_field_type_set_byte_order(type, BT_CTF_BYTE_ORDER_BIG_ENDIAN);
+#else
+ bt_ctf_field_type_set_byte_order(type, BT_CTF_BYTE_ORDER_LITTLE_ENDIAN);
+#endif
+
pr2("Created type: INTEGER %d-bit %ssigned %s\n",
size, sign ? "un" : "", hex ? "hex" : "");
return type;
--
1.8.3.4
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 00/46] perf tools: Fix and improvements (bpf and overwrite) Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:40 +0100
[PATCH 07/46] perf trace: Print content of bpf-output event Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:40 +0100
[tip:perf/core] perf trace: Print content of bpf-output event tip-bot for Wang Nan <tipbot@zytor.com> - 2016-02-27 10:50 +0100
[PATCH 43/46] perf record: Rename variable to make code clear Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:40 +0100
[PATCH 46/46] perf tools: Don't warn about out of order event if write_backward is used Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 26/46] perf record: Disable buildid cache options by default in switch output mode Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 33/46] perf tools: Operate multiple channels Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 24/46] perf record: Split output into multiple files via '--switch-output' Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 45/46] perf record: Allow generate tracking events at the end of output Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 36/46] perf record: Don't poll on overwrite channel Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 30/46] perf record: Prevent reading invalid data in record__mmap_read Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 31/46] perf tools: Add evlist channel helpers Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 35/46] perf record: Don't read from and poll overwrite channel Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 23/46] perf record: Add '--timestamp-filename' option to append timestamp to output filename Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 25/46] perf record: Force enable --timestamp-filename when --switch-output is provided Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 28/46] perf record: Generate tracking events for process forked by perf Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 21/46] perf record: Turns auxtrace_snapshot_enable into 3 states Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 27/46] perf record: Re-synthesize tracking events after output switching Wang Nan <wangnan0@huawei.com> - 2016-02-26 10:50 +0100
[PATCH 12/46] perf core: Prepare writing into ring buffer from end Wang Nan <wangnan0@huawei.com> - 2016-02-26 11:00 +0100
[PATCH 19/46] perf record: Extract synthesize code to record__synthesize() Wang Nan <wangnan0@huawei.com> - 2016-02-26 11:00 +0100
[PATCH 11/46] perf core: Set event's default overflow_handler Wang Nan <wangnan0@huawei.com> - 2016-02-26 11:00 +0100
[PATCH 13/46] perf core: Add backward attribute to perf event Wang Nan <wangnan0@huawei.com> - 2016-02-26 11:00 +0100
[PATCH 18/46] perf record: Use WARN_ONCE to replace 'if' condition Wang Nan <wangnan0@huawei.com> - 2016-02-26 11:00 +0100
[PATCH 20/46] perf tools: Add perf_data_file__switch() helper Wang Nan <wangnan0@huawei.com> - 2016-02-26 11:00 +0100
[PATCH 17/46] perf tools: Make ordered_events reusable Wang Nan <wangnan0@huawei.com> - 2016-02-26 11:00 +0100
[PATCH 14/46] perf core: Reduce perf event output overhead by new overflow handler Wang Nan <wangnan0@huawei.com> - 2016-02-26 11:00 +0100
[PATCH 08/46] perf data: Support converting data from bpf_perf_event_output() Wang Nan <wangnan0@huawei.com> - 2016-02-26 11:00 +0100
[PATCH 10/46] perf core: Introduce new ioctl options to pause and resume ring buffer Wang Nan <wangnan0@huawei.com> - 2016-02-26 11:00 +0100
Re: [PATCH 10/46] perf core: Introduce new ioctl options to pause and resume ring buffer Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-02-29 16:40 +0100
Re: [PATCH 10/46] perf core: Introduce new ioctl options to pause and resume ring buffer "Wangnan (F)" <wangnan0@huawei.com> - 2016-03-03 03:20 +0100
[PATCH 09/46] perf data: Explicitly set byte order for integer types Wang Nan <wangnan0@huawei.com> - 2016-02-26 11:00 +0100
[PATCH 03/46] perf config: Bring perf_default_config to the very beginning at main() Wang Nan <wangnan0@huawei.com> - 2016-02-26 11:00 +0100
[tip:perf/core] perf config: Bring perf_default_config to the very beginning at main() tip-bot for Wang Nan <tipbot@zytor.com> - 2016-02-27 10:50 +0100
csiph-web