From: Leo Yan <leo.yan@linaro.org>
To: James Clark <james.clark@arm.com>
Cc: coresight@lists.linaro.org, denik@chromium.org,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Mike Leach <mike.leach@linaro.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>, Namhyung Kim <namhyung@kernel.org>,
Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
John Garry <john.g.garry@oracle.com>,
Will Deacon <will@kernel.org>,
linux-arm-kernel@lists.infradead.org,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/4] perf cs-etm: Use previous thread for branch sample source IP
Date: Thu, 8 Jun 2023 18:25:55 +0800 [thread overview]
Message-ID: <20230608102555.GB123723@leoy-huanghe> (raw)
In-Reply-To: <1e7aa657-6d1e-9e7c-95cb-b32d307abe93@arm.com>
On Thu, Jun 08, 2023 at 10:34:42AM +0100, James Clark wrote:
[...]
> >>> @@ -616,6 +618,8 @@ static void cs_etm__packet_swap(struct cs_etm_auxtrace *etm,
> >>> tmp = tidq->packet;
> >>> tidq->packet = tidq->prev_packet;
> >>> tidq->prev_packet = tmp;
> >>> + thread__put(tidq->prev_thread);
> >>> + tidq->prev_thread = thread__get(tidq->thread);
> >>
> >> Maybe cs_etm__packet_swap() is not the best place to update
> >> "tidq->prev_thread", since swapping packet doesn't mean it's necessarily
> >> thread switching; can we move this change into the cs_etm__set_thread()?
> >>
> >
> > Yeah that might make more sense. I can move it there if we decide to
> > keep this change.
> >
>
> Unfortunately I don't think I can make this change. It seems like
> putting the previous thread swap in cs_etm__set_thread() has different
> semantics to keeping all the swaps together in cs_etm__packet_swap().
Thanks for trying this.
> This is because if you swap the thread in cs_etm__packet_swap() the
> previous packet and next packet can have the _same_ thread if there
> happened to be no change. However if you only swap previous thread in
> cs_etm__set_thread(), that means that the previous thread is always
> different to the next one. This has a huge difference on the decoding
> because two adjacent packets on the same thread will say they branched
> from the previous thread that ran, not the previous thread on the
> previous packet.
Seems to me, this is a synchronization issue between the field
'tidq->prev_thread' and 'tidq->prev_packet'.
It's still hard for me to understand "two adjacent packets on the same
thread will say they branched from the previous thread that ran", IIUC,
even we move thread swapping into cs_etm__set_thread(), if the two
adjacent packets are in the same thread context, we can skip to update
fields 'tidq->prev_thread' and 'tidq->prev_packet'.
So I am curious if below cs_etm__set_thread() works or not?
static void cs_etm__set_thread(struct cs_etm_auxtrace *etm,
struct cs_etm_traceid_queue *tidq, pid_t tid)
{
struct machine *machine = &etm->session->machines.host;
/* No context switching, bail out */
if ((tidq->thread->tid != tid)
return;
/* If tid is -1, we simply use idle thread context */
if (tid == -1)
goto find_idle_thread;
/*
* The new incoming tid is different from current thread,
* so it's to switch to the next thread context.
*/
/* Swap thread contexts */
thread__put(tidq->prev_thread);
tidq->prev_thread = thread__get(tidq->thread);
/* Find thread context for new tid */
thread__zput(tidq->thread);
tidq->thread = machine__find_thread(machine, -1, tid);
find_idle_thread:
/* Couldn't find a known thread */
if (!tidq->thread)
tidq->thread = machine__idle_thread(machine);
}
Thanks,
Leo
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-06-08 10:26 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-24 13:19 [PATCH 0/4] perf cs-etm: Track exception level James Clark
2023-05-24 13:19 ` [PATCH 1/4] perf cs-etm: Only track threads instead of PID and TIDs James Clark
2023-05-25 10:17 ` Mike Leach
2023-05-27 8:45 ` Leo Yan
2023-06-05 22:11 ` Suzuki K Poulose
2023-05-24 13:19 ` [PATCH 2/4] perf cs-etm: Use previous thread for branch sample source IP James Clark
2023-05-25 11:01 ` Mike Leach
2023-05-27 9:06 ` Leo Yan
2023-05-30 14:28 ` James Clark
2023-06-06 0:44 ` Leo Yan
2023-06-08 9:34 ` James Clark
2023-06-08 10:25 ` Leo Yan [this message]
2023-06-08 10:32 ` Leo Yan
2023-06-09 11:00 ` James Clark
2023-06-10 1:20 ` Leo Yan
2023-05-24 13:19 ` [PATCH 3/4] perf cs-etm: Track exception level James Clark
2023-05-25 11:16 ` Mike Leach
2023-05-30 9:24 ` James Clark
2023-05-30 13:16 ` Leo Yan
2023-05-28 11:05 ` Leo Yan
2023-05-30 9:43 ` James Clark
2023-05-24 13:19 ` [PATCH 4/4] perf cs-etm: Add exception level consistency check James Clark
2023-05-25 11:39 ` Mike Leach
2023-05-30 9:12 ` James Clark
2023-05-30 10:40 ` Mike Leach
2023-06-07 9:14 ` James Clark
2023-06-05 19:44 ` [PATCH 0/4] perf cs-etm: Track exception level Arnaldo Carvalho de Melo
2023-06-06 0:46 ` Leo Yan
2023-06-06 18:07 ` 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=20230608102555.GB123723@leoy-huanghe \
--to=leo.yan@linaro.org \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=coresight@lists.linaro.org \
--cc=denik@chromium.org \
--cc=irogers@google.com \
--cc=james.clark@arm.com \
--cc=john.g.garry@oracle.com \
--cc=jolsa@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mike.leach@linaro.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=suzuki.poulose@arm.com \
--cc=will@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