From: Rob Herring <robh@kernel.org> To: Jiri Olsa <jolsa@redhat.com> Cc: Will Deacon <will@kernel.org>, Catalin Marinas <catalin.marinas@arm.com>, Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>, Arnaldo Carvalho de Melo <acme@kernel.org>, "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>, "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" <linux-arm-kernel@lists.infradead.org>, Alexander Shishkin <alexander.shishkin@linux.intel.com>, Namhyung Kim <namhyung@kernel.org>, Raphael Gault <raphael.gault@arm.com>, Mark Rutland <mark.rutland@arm.com>, Jonathan Cameron <Jonathan.Cameron@huawei.com>, Ian Rogers <irogers@google.com>, Honnappa Nagarahalli <honnappa.nagarahalli@arm.com> Subject: Re: [PATCH v2 5/9] libperf: Add support for user space counter access Date: Wed, 2 Sep 2020 10:58:34 -0600 [thread overview] Message-ID: <CAL_Jsq+rrQWObtaTQpoxjJbFJeWPf5VxnOZyp6pZzZcb3Ybv+w@mail.gmail.com> (raw) In-Reply-To: <20200831091123.GB406859@krava> On Mon, Aug 31, 2020 at 3:11 AM Jiri Olsa <jolsa@redhat.com> wrote: > > On Fri, Aug 28, 2020 at 02:56:10PM -0600, Rob Herring wrote: > > SNIP > > +int perf_mmap__read_self(struct perf_mmap *map, struct perf_counts_values *count) > > +{ > > + struct perf_event_mmap_page *pc = map->base; > > + u32 seq, idx, time_mult = 0, time_shift = 0; > > + u64 cnt, cyc = 0, time_offset = 0, time_cycles = 0, time_mask = ~0ULL; > > + > > + BUG_ON(!pc); > > + > > + if (!pc->cap_user_rdpmc) > > + return -1; > > + > > + do { > > + seq = READ_ONCE(pc->lock); > > + barrier(); > > + > > + count->ena = READ_ONCE(pc->time_enabled); > > + count->run = READ_ONCE(pc->time_running); > > + > > + if (pc->cap_user_time && count->ena != count->run) { > > + cyc = read_timestamp(); > > + time_mult = READ_ONCE(pc->time_mult); > > + time_shift = READ_ONCE(pc->time_shift); > > + time_offset = READ_ONCE(pc->time_offset); > > + > > + if (pc->cap_user_time_short) { > > + time_cycles = READ_ONCE(pc->time_cycles); > > + time_mask = READ_ONCE(pc->time_mask); > > + } > > + } > > + > > + idx = READ_ONCE(pc->index); > > + cnt = READ_ONCE(pc->offset); > > + if (pc->cap_user_rdpmc && idx) { > > no need to check pc->cap_user_rdpmc again I was thinking cap_user_rdpmc could change, but I guess idx will always be 0 in that case. > > +static int test_stat_user_read(int event) > > +{ > > + struct perf_counts_values counts = { .val = 0 }; > > + struct perf_thread_map *threads; > > + struct perf_evsel *evsel; > > + struct perf_event_mmap_page *pc; > > + struct perf_event_attr attr = { > > + .type = PERF_TYPE_HARDWARE, > > + .config = event, > > + }; > > + int err, i; > > + > > + threads = perf_thread_map__new_dummy(); > > + __T("failed to create threads", threads); > > + > > + perf_thread_map__set_pid(threads, 0, 0); > > + > > + evsel = perf_evsel__new(&attr); > > + __T("failed to create evsel", evsel); > > + > > + err = perf_evsel__open(evsel, NULL, threads); > > + __T("failed to open evsel", err == 0); > > + > > + pc = perf_evsel__mmap(evsel); > > + __T("failed to mmap evsel", pc); > > + > > +#if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) > > + __T("userspace counter access not supported", pc->cap_user_rdpmc); > > + __T("userspace counter access not enabled", pc->index); > > + __T("userspace counter width not set", pc->pmc_width >= 32); > > +#endif > > + > > + perf_evsel__read(evsel, 0, 0, &counts); > > + __T("failed to read value for evsel", counts.val != 0); > > + > > + fputs("\n", stderr); > > + for (i = 0; i < 5; i++) { > > + volatile int count = 0x10000 << i; > > + __u64 start, end, last = 0; > > + > > + fprintf(stderr, "\tloop = %u, ", count); > > we should add support to display verbose output for tests, > because right now this breaks the output: > > - running test-cpumap.c...OK > - running test-threadmap.c...OK > - running test-evlist.c...OK > - running test-evsel.c... > loop = 65536, count = 328035 > loop = 131072, count = 655715 > loop = 262144, count = 1311075 > loop = 524288, count = 2627060 > loop = 1048576, count = 5253540 > > loop = 65536, count = 327594 > loop = 131072, count = 659930 > loop = 262144, count = 1378892 > loop = 524288, count = 2664341 > loop = 1048576, count = 5365682 > OK > > but we can do it in separate change later Would you like me to just comment this out then for now? Rob
WARNING: multiple messages have this Message-ID (diff)
From: Rob Herring <robh@kernel.org> To: Jiri Olsa <jolsa@redhat.com> Cc: Mark Rutland <mark.rutland@arm.com>, Ian Rogers <irogers@google.com>, Peter Zijlstra <peterz@infradead.org>, Catalin Marinas <catalin.marinas@arm.com>, "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>, Arnaldo Carvalho de Melo <acme@kernel.org>, Alexander Shishkin <alexander.shishkin@linux.intel.com>, Raphael Gault <raphael.gault@arm.com>, Ingo Molnar <mingo@redhat.com>, Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>, Jonathan Cameron <Jonathan.Cameron@huawei.com>, Namhyung Kim <namhyung@kernel.org>, Will Deacon <will@kernel.org>, "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" <linux-arm-kernel@lists.infradead.org> Subject: Re: [PATCH v2 5/9] libperf: Add support for user space counter access Date: Wed, 2 Sep 2020 10:58:34 -0600 [thread overview] Message-ID: <CAL_Jsq+rrQWObtaTQpoxjJbFJeWPf5VxnOZyp6pZzZcb3Ybv+w@mail.gmail.com> (raw) In-Reply-To: <20200831091123.GB406859@krava> On Mon, Aug 31, 2020 at 3:11 AM Jiri Olsa <jolsa@redhat.com> wrote: > > On Fri, Aug 28, 2020 at 02:56:10PM -0600, Rob Herring wrote: > > SNIP > > +int perf_mmap__read_self(struct perf_mmap *map, struct perf_counts_values *count) > > +{ > > + struct perf_event_mmap_page *pc = map->base; > > + u32 seq, idx, time_mult = 0, time_shift = 0; > > + u64 cnt, cyc = 0, time_offset = 0, time_cycles = 0, time_mask = ~0ULL; > > + > > + BUG_ON(!pc); > > + > > + if (!pc->cap_user_rdpmc) > > + return -1; > > + > > + do { > > + seq = READ_ONCE(pc->lock); > > + barrier(); > > + > > + count->ena = READ_ONCE(pc->time_enabled); > > + count->run = READ_ONCE(pc->time_running); > > + > > + if (pc->cap_user_time && count->ena != count->run) { > > + cyc = read_timestamp(); > > + time_mult = READ_ONCE(pc->time_mult); > > + time_shift = READ_ONCE(pc->time_shift); > > + time_offset = READ_ONCE(pc->time_offset); > > + > > + if (pc->cap_user_time_short) { > > + time_cycles = READ_ONCE(pc->time_cycles); > > + time_mask = READ_ONCE(pc->time_mask); > > + } > > + } > > + > > + idx = READ_ONCE(pc->index); > > + cnt = READ_ONCE(pc->offset); > > + if (pc->cap_user_rdpmc && idx) { > > no need to check pc->cap_user_rdpmc again I was thinking cap_user_rdpmc could change, but I guess idx will always be 0 in that case. > > +static int test_stat_user_read(int event) > > +{ > > + struct perf_counts_values counts = { .val = 0 }; > > + struct perf_thread_map *threads; > > + struct perf_evsel *evsel; > > + struct perf_event_mmap_page *pc; > > + struct perf_event_attr attr = { > > + .type = PERF_TYPE_HARDWARE, > > + .config = event, > > + }; > > + int err, i; > > + > > + threads = perf_thread_map__new_dummy(); > > + __T("failed to create threads", threads); > > + > > + perf_thread_map__set_pid(threads, 0, 0); > > + > > + evsel = perf_evsel__new(&attr); > > + __T("failed to create evsel", evsel); > > + > > + err = perf_evsel__open(evsel, NULL, threads); > > + __T("failed to open evsel", err == 0); > > + > > + pc = perf_evsel__mmap(evsel); > > + __T("failed to mmap evsel", pc); > > + > > +#if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) > > + __T("userspace counter access not supported", pc->cap_user_rdpmc); > > + __T("userspace counter access not enabled", pc->index); > > + __T("userspace counter width not set", pc->pmc_width >= 32); > > +#endif > > + > > + perf_evsel__read(evsel, 0, 0, &counts); > > + __T("failed to read value for evsel", counts.val != 0); > > + > > + fputs("\n", stderr); > > + for (i = 0; i < 5; i++) { > > + volatile int count = 0x10000 << i; > > + __u64 start, end, last = 0; > > + > > + fprintf(stderr, "\tloop = %u, ", count); > > we should add support to display verbose output for tests, > because right now this breaks the output: > > - running test-cpumap.c...OK > - running test-threadmap.c...OK > - running test-evlist.c...OK > - running test-evsel.c... > loop = 65536, count = 328035 > loop = 131072, count = 655715 > loop = 262144, count = 1311075 > loop = 524288, count = 2627060 > loop = 1048576, count = 5253540 > > loop = 65536, count = 327594 > loop = 131072, count = 659930 > loop = 262144, count = 1378892 > loop = 524288, count = 2664341 > loop = 1048576, count = 5365682 > OK > > but we can do it in separate change later Would you like me to just comment this out then for now? Rob _______________________________________________ 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:[~2020-09-02 17:00 UTC|newest] Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-08-28 20:56 [PATCH v2 0/9] libperf and arm64 userspace counter access support Rob Herring 2020-08-28 20:56 ` Rob Herring 2020-08-28 20:56 ` [PATCH v2 1/9] arm64: pmu: Add hook to handle pmu-related undefined instructions Rob Herring 2020-08-28 20:56 ` Rob Herring 2020-08-28 20:56 ` [PATCH v2 2/9] arm64: pmu: Add function implementation to update event index in userpage Rob Herring 2020-08-28 20:56 ` Rob Herring 2020-08-28 20:56 ` [PATCH v2 3/9] arm64: perf: Enable pmu counter direct access for perf event on armv8 Rob Herring 2020-08-28 20:56 ` Rob Herring 2020-08-28 20:56 ` [PATCH v2 4/9] tools/include: Add an initial math64.h Rob Herring 2020-08-28 20:56 ` Rob Herring 2020-08-28 20:56 ` [PATCH v2 5/9] libperf: Add support for user space counter access Rob Herring 2020-08-28 20:56 ` Rob Herring 2020-08-31 9:11 ` Jiri Olsa 2020-08-31 9:11 ` Jiri Olsa 2020-09-02 16:58 ` Rob Herring [this message] 2020-09-02 16:58 ` Rob Herring 2020-08-31 9:11 ` Jiri Olsa 2020-08-31 9:11 ` Jiri Olsa 2020-09-02 17:01 ` Rob Herring 2020-09-02 17:01 ` Rob Herring 2020-09-02 18:07 ` Ian Rogers 2020-09-02 18:07 ` Ian Rogers 2020-09-02 19:48 ` Rob Herring 2020-09-02 19:48 ` Rob Herring 2020-09-04 5:51 ` Ian Rogers 2020-09-04 5:51 ` Ian Rogers 2020-08-28 20:56 ` [PATCH v2 6/9] libperf: Add arm64 support to perf_mmap__read_self() Rob Herring 2020-08-28 20:56 ` Rob Herring 2020-08-28 20:56 ` [PATCH v2 7/9] perf: arm64: Add test for userspace counter access on heterogeneous systems Rob Herring 2020-08-28 20:56 ` Rob Herring 2020-08-28 20:56 ` [PATCH v2 8/9] Documentation: arm64: Document PMU counters access from userspace Rob Herring 2020-08-28 20:56 ` Rob Herring 2020-08-28 20:56 ` [PATCH v2 9/9] perf: Remove x86 specific rdpmc test Rob Herring 2020-08-28 20:56 ` Rob Herring 2020-08-31 9:11 ` Jiri Olsa 2020-08-31 9:11 ` Jiri Olsa
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=CAL_Jsq+rrQWObtaTQpoxjJbFJeWPf5VxnOZyp6pZzZcb3Ybv+w@mail.gmail.com \ --to=robh@kernel.org \ --cc=Jonathan.Cameron@huawei.com \ --cc=acme@kernel.org \ --cc=alexander.shishkin@linux.intel.com \ --cc=catalin.marinas@arm.com \ --cc=honnappa.nagarahalli@arm.com \ --cc=irogers@google.com \ --cc=jolsa@redhat.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mark.rutland@arm.com \ --cc=mingo@redhat.com \ --cc=namhyung@kernel.org \ --cc=peterz@infradead.org \ --cc=raphael.gault@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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.