From: Adrian Hunter <adrian.hunter@intel.com>
To: Ian Rogers <irogers@google.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
Andi Kleen <ak@linux.intel.com>,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org
Subject: Re: [PATCH 05/35] perf tools: Factor out evsel__id_hdr_size()
Date: Tue, 9 Aug 2022 14:49:53 +0300 [thread overview]
Message-ID: <0e415212-b828-34d3-fd1b-ba518149bf89@intel.com> (raw)
In-Reply-To: <CAP-5=fUChJLqfJ__joVhtKwgjLTtBtMm8M0vt9eaOfLMmck85g@mail.gmail.com>
On 19/07/22 20:09, Ian Rogers wrote:
> On Mon, Jul 11, 2022 at 2:32 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>>
>> Factor out evsel__id_hdr_size() so it can be reused.
>>
>> This is needed by perf inject. When injecting events from a guest perf.data
>> file, there is a possibility that the sample ID numbers conflict. To
>> re-write an ID sample, the old one needs to be removed first, which means
>> determining how big it is with evsel__id_hdr_size() and then subtracting
>> that from the event size.
>>
>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
>> ---
>> tools/perf/util/evlist.c | 28 +---------------------------
>> tools/perf/util/evsel.c | 26 ++++++++++++++++++++++++++
>> tools/perf/util/evsel.h | 2 ++
>> 3 files changed, 29 insertions(+), 27 deletions(-)
>>
>> diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
>> index 48af7d379d82..03fbe151b0c4 100644
>> --- a/tools/perf/util/evlist.c
>> +++ b/tools/perf/util/evlist.c
>> @@ -1244,34 +1244,8 @@ bool evlist__valid_read_format(struct evlist *evlist)
>> u16 evlist__id_hdr_size(struct evlist *evlist)
>> {
>> struct evsel *first = evlist__first(evlist);
>> - struct perf_sample *data;
>> - u64 sample_type;
>> - u16 size = 0;
>>
>> - if (!first->core.attr.sample_id_all)
>> - goto out;
>> -
>> - sample_type = first->core.attr.sample_type;
>> -
>> - if (sample_type & PERF_SAMPLE_TID)
>> - size += sizeof(data->tid) * 2;
>> -
>> - if (sample_type & PERF_SAMPLE_TIME)
>> - size += sizeof(data->time);
>> -
>> - if (sample_type & PERF_SAMPLE_ID)
>> - size += sizeof(data->id);
>> -
>> - if (sample_type & PERF_SAMPLE_STREAM_ID)
>> - size += sizeof(data->stream_id);
>> -
>> - if (sample_type & PERF_SAMPLE_CPU)
>> - size += sizeof(data->cpu) * 2;
>> -
>> - if (sample_type & PERF_SAMPLE_IDENTIFIER)
>> - size += sizeof(data->id);
>> -out:
>> - return size;
>> + return first->core.attr.sample_id_all ? evsel__id_hdr_size(first) : 0;
>> }
>>
>> bool evlist__valid_sample_id_all(struct evlist *evlist)
>> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
>> index a67cc3f2fa74..9a30ccb7b104 100644
>> --- a/tools/perf/util/evsel.c
>> +++ b/tools/perf/util/evsel.c
>> @@ -2724,6 +2724,32 @@ int evsel__parse_sample_timestamp(struct evsel *evsel, union perf_event *event,
>> return 0;
>> }
>>
>> +u16 evsel__id_hdr_size(struct evsel *evsel)
>> +{
>> + u64 sample_type = evsel->core.attr.sample_type;
>
> As this just uses core, would it be more appropriate to put it in libperf?
AFAIK we move to libperf only as needed.
>
>> + u16 size = 0;
>
> Perhaps size_t or int? u16 seems odd.
Event header size member is 16-bit
>
>> +
>> + if (sample_type & PERF_SAMPLE_TID)
>> + size += sizeof(u64);
>> +
>> + if (sample_type & PERF_SAMPLE_TIME)
>> + size += sizeof(u64);
>> +
>> + if (sample_type & PERF_SAMPLE_ID)
>> + size += sizeof(u64);
>> +
>> + if (sample_type & PERF_SAMPLE_STREAM_ID)
>> + size += sizeof(u64);
>> +
>> + if (sample_type & PERF_SAMPLE_CPU)
>> + size += sizeof(u64);
>> +
>> + if (sample_type & PERF_SAMPLE_IDENTIFIER)
>> + size += sizeof(u64);
>> +
>> + return size;
>> +}
>> +
>> struct tep_format_field *evsel__field(struct evsel *evsel, const char *name)
>> {
>> return tep_find_field(evsel->tp_format, name);
>> diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
>> index 92bed8e2f7d8..699448f2bc2b 100644
>> --- a/tools/perf/util/evsel.h
>> +++ b/tools/perf/util/evsel.h
>> @@ -381,6 +381,8 @@ int evsel__parse_sample(struct evsel *evsel, union perf_event *event,
>> int evsel__parse_sample_timestamp(struct evsel *evsel, union perf_event *event,
>> u64 *timestamp);
>>
>> +u16 evsel__id_hdr_size(struct evsel *evsel);
>> +
>
> A comment would be nice, I know this is just moving code about but
> this is a new function.
>
> Thanks,
> Ian
>
>> static inline struct evsel *evsel__next(struct evsel *evsel)
>> {
>> return list_entry(evsel->core.node.next, struct evsel, core.node);
>> --
>> 2.25.1
>>
next prev parent reply other threads:[~2022-08-09 11:50 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-11 9:31 [PATCH 00/35] perf intel-pt: Add support for tracing virtual machine user space on the host Adrian Hunter
2022-07-11 9:31 ` [PATCH 01/35] perf tools: Fix dso_id inode generation comparison Adrian Hunter
2022-07-18 14:57 ` Arnaldo Carvalho de Melo
2022-07-19 10:18 ` Adrian Hunter
2022-07-19 15:13 ` Ian Rogers
2022-07-19 19:16 ` Arnaldo Carvalho de Melo
2022-07-11 9:31 ` [PATCH 02/35] perf tools: Export dsos__for_each_with_build_id() Adrian Hunter
2022-07-19 16:55 ` Ian Rogers
2022-07-11 9:31 ` [PATCH 03/35] perf ordered_events: Add ordered_events__last_flush_time() Adrian Hunter
2022-07-19 16:56 ` Ian Rogers
2022-07-11 9:31 ` [PATCH 04/35] perf tools: Export perf_event__process_finished_round() Adrian Hunter
2022-07-19 17:04 ` Ian Rogers
2022-08-09 11:37 ` Adrian Hunter
2022-07-11 9:31 ` [PATCH 05/35] perf tools: Factor out evsel__id_hdr_size() Adrian Hunter
2022-07-19 17:09 ` Ian Rogers
2022-08-09 11:49 ` Adrian Hunter [this message]
2022-08-09 17:07 ` Ian Rogers
2022-07-11 9:31 ` [PATCH 06/35] perf tools: Add perf_event__synthesize_id_sample() Adrian Hunter
2022-07-19 17:10 ` Ian Rogers
2022-07-11 9:31 ` [PATCH 07/35] perf script: Add --dump-unsorted-raw-trace option Adrian Hunter
2022-07-19 17:11 ` Ian Rogers
2022-07-11 9:31 ` [PATCH 08/35] perf buildid-cache: Add guestmount'd files to the build ID cache Adrian Hunter
2022-07-19 17:41 ` Ian Rogers
2022-08-09 12:21 ` Adrian Hunter
2022-07-11 9:31 ` [PATCH 09/35] perf buildid-cache: Do not require purge files to also be in the file system Adrian Hunter
2022-07-19 17:44 ` Ian Rogers
2022-07-11 9:31 ` [PATCH 10/35] perf tools: Add machine_pid and vcpu to id_index Adrian Hunter
2022-07-19 17:48 ` Ian Rogers
2022-08-09 12:19 ` Adrian Hunter
2022-07-11 9:31 ` [PATCH 11/35] perf session: Create guest machines from id_index Adrian Hunter
2022-07-19 17:51 ` Ian Rogers
2022-07-11 9:31 ` [PATCH 12/35] perf tools: Add guest_cpu to hypervisor threads Adrian Hunter
2022-07-20 0:23 ` Ian Rogers
2022-07-11 9:31 ` [PATCH 13/35] perf tools: Add machine_pid and vcpu to perf_sample Adrian Hunter
2022-07-20 0:36 ` Ian Rogers
2022-07-11 9:31 ` [PATCH 14/35] perf tools: Use sample->machine_pid to find guest machine Adrian Hunter
2022-07-20 0:37 ` Ian Rogers
2022-07-11 9:31 ` [PATCH 15/35] perf script: Add machine_pid and vcpu Adrian Hunter
2022-07-20 0:39 ` Ian Rogers
2022-07-11 9:31 ` [PATCH 16/35] perf dlfilter: " Adrian Hunter
2022-07-20 0:42 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 17/35] perf auxtrace: Add machine_pid and vcpu to auxtrace_error Adrian Hunter
2022-07-20 0:43 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 18/35] perf script python: Add machine_pid and vcpu Adrian Hunter
2022-07-20 0:43 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 19/35] perf script python: intel-pt-events: " Adrian Hunter
2022-07-20 0:44 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 20/35] perf tools: Remove also guest kcore_dir with host kcore_dir Adrian Hunter
2022-07-20 0:45 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 21/35] perf tools: Make has_kcore_dir() work also for guest kcore_dir Adrian Hunter
2022-07-20 0:49 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 22/35] perf tools: Automatically use guest kcore_dir if present Adrian Hunter
2022-07-20 0:51 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 23/35] perf tools: Add reallocarray_as_needed() Adrian Hunter
2022-07-20 0:55 ` Ian Rogers
2022-08-09 16:48 ` Adrian Hunter
2022-07-11 9:32 ` [PATCH 24/35] perf inject: Add support for injecting guest sideband events Adrian Hunter
2022-07-20 1:06 ` Ian Rogers
2022-08-11 17:19 ` Adrian Hunter
2022-07-11 9:32 ` [PATCH 25/35] perf machine: Use realloc_array_as_needed() in machine__set_current_tid() Adrian Hunter
2022-07-11 9:32 ` [PATCH 26/35] perf tools: Handle injected guest kernel mmap event Adrian Hunter
2022-07-20 1:09 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 27/35] perf tools: Add perf_event__is_guest() Adrian Hunter
2022-07-20 1:11 ` Ian Rogers
2022-07-20 14:06 ` Arnaldo Carvalho de Melo
2022-07-20 14:56 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 28/35] perf intel-pt: Remove guest_machine_pid Adrian Hunter
2022-07-20 1:12 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 29/35] perf intel-pt: Add some more logging to intel_pt_walk_next_insn() Adrian Hunter
2022-07-20 1:13 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 30/35] perf intel-pt: Track guest context switches Adrian Hunter
2022-07-20 1:13 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 31/35] perf intel-pt: Disable sync switch with guest sideband Adrian Hunter
2022-07-20 1:14 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 32/35] perf intel-pt: Determine guest thread from " Adrian Hunter
2022-07-20 1:15 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 33/35] perf intel-pt: Add machine_pid and vcpu to auxtrace_error Adrian Hunter
2022-07-20 5:27 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 34/35] perf intel-pt: Use guest pid/tid etc in guest samples Adrian Hunter
2022-07-20 5:28 ` Ian Rogers
2022-07-11 9:32 ` [PATCH 35/35] perf intel-pt: Add documentation for tracing guest machine user space Adrian Hunter
2022-07-20 5:29 ` Ian Rogers
2022-07-18 15:28 ` [PATCH 00/35] perf intel-pt: Add support for tracing virtual machine user space on the host Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0e415212-b828-34d3-fd1b-ba518149bf89@intel.com \
--to=adrian.hunter@intel.com \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=irogers@google.com \
--cc=jolsa@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=namhyung@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).