From: Peter Zijlstra <peterz@infradead.org>
To: Rob Herring <robh@kernel.org>
Cc: linux-kernel@vger.kernel.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@redhat.com>, Namhyung Kim <namhyung@kernel.org>
Subject: Re: [RFC] libperf: Add support for user space counter access
Date: Mon, 10 Aug 2020 22:24:53 +0200 [thread overview]
Message-ID: <20200810202453.GD3982@worktop.programming.kicks-ass.net> (raw)
In-Reply-To: <20200807230517.57114-1-robh@kernel.org>
On Fri, Aug 07, 2020 at 05:05:17PM -0600, Rob Herring wrote:
> x86 and arm64 can both support direct access of event counters in
> userspace. The access sequence is less than trivial and currently exists
> in perf test code (tools/perf/arch/x86/tests/rdpmc.c) with copies in
> projects such as PAPI and libpfm4.
>
> Patches to add arm64 userspace support are pending[1].
>
> For this RFC, looking for a yes, seems like a good idea, or no, go away we
> don't want this in libperf.
I'd like it lots better if you'd at least take an optimized version of
this, also see this thread:
https://lkml.kernel.org/r/20200322101848.GF2452@worktop.programming.kicks-ass.net
Also, I usually strip out all the multiplexing crud out (and use pinned
counters), which saves a bunch.
static inline u64 mmap_read_pinned(void *addr)
{
struct perf_event_mmap_page *pc = addr;
u32 seq, idx, width = 0;
u64 count;
s64 pmc = 0;
do {
seq = pc->lock;
barrier();
idx = pc->index;
count = pc->offset;
if (pc->cap_user_rdpmc && idx) {
width = pc->pmc_width;
pmc = rdpmc(idx - 1);
}
barrier();
} while (pc->lock != seq);
if (idx) {
pmc <<= 64 - width;
pmc >>= 64 - width; /* shift right signed */
count += pmc;
}
return count;
}
prev parent reply other threads:[~2020-08-10 20:25 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-07 23:05 [RFC] libperf: Add support for user space counter access Rob Herring
2020-08-08 10:22 ` Jiri Olsa
2020-08-10 18:11 ` Rob Herring
2020-08-11 10:50 ` Jiri Olsa
2020-08-11 11:02 ` peterz
2020-08-11 16:49 ` Rob Herring
2020-08-12 13:05 ` Jiri Olsa
2020-08-10 20:24 ` Peter Zijlstra [this message]
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=20200810202453.GD3982@worktop.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=robh@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).