LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Matt Fleming <matt@codeblueprint.co.uk> To: Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@kernel.org>, Jiri Olsa <jolsa@redhat.com>, Arnaldo Carvalho de Melo <acme@kernel.org>, Andi Kleen <andi@firstfloor.org> Cc: Thomas Gleixner <tglx@linutronix.de>, linux-kernel@vger.kernel.org, "H. Peter Anvin" <hpa@zytor.com>, Kanaka Juvva <kanaka.d.juvva@intel.com>, Vikas Shivappa <vikas.shivappa@linux.intel.com>, Matt Fleming <matt.fleming@intel.com>, Arnaldo Carvalho de Melo <acme@redhat.com> Subject: [PATCH 2/9] perf: Add ->count() function to read per-package counters Date: Fri, 23 Jan 2015 18:45:41 +0000 [thread overview] Message-ID: <1422038748-21397-3-git-send-email-matt@codeblueprint.co.uk> (raw) In-Reply-To: <1422038748-21397-1-git-send-email-matt@codeblueprint.co.uk> From: Matt Fleming <matt.fleming@intel.com> For PMU drivers that record per-package counters, the ->count variable cannot be used to record an accurate aggregated value, since it's not possible to perform SMP cross-calls to cpus on other packages from the context in which we update ->count. Introduce a new optional ->count() accessor function that can be used to customize how values are collected. If a PMU driver doesn't provide a ->count() function, we fallback to the existing code. There is necessarily a window of staleness with this approach because the task that generated the counter value may not have been scheduled by the cpu recently. An alternative and more complex approach would be to use a hrtimer to periodically refresh the values from a more permissive scheduling context. So, we're trading off complexity for accuracy. Cc: Jiri Olsa <jolsa@redhat.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Matt Fleming <matt.fleming@intel.com> --- include/linux/perf_event.h | 10 ++++++++++ kernel/events/core.c | 5 ++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 72482f06401c..48879562ba25 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -259,6 +259,11 @@ struct pmu { * flush branch stack on context-switches (needed in cpu-wide mode) */ void (*flush_branch_stack) (void); + + /* + * Return the count value for a counter. + */ + u64 (*count) (struct perf_event *event); /*optional*/ }; /** @@ -760,6 +765,11 @@ static inline void perf_event_task_sched_out(struct task_struct *prev, __perf_event_task_sched_out(prev, next); } +static inline u64 __perf_event_count(struct perf_event *event) +{ + return local64_read(&event->count) + atomic64_read(&event->child_count); +} + extern void perf_event_mmap(struct vm_area_struct *vma); extern struct perf_guest_info_callbacks *perf_guest_cbs; extern int perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *callbacks); diff --git a/kernel/events/core.c b/kernel/events/core.c index dcb292a14127..56efd5142f3e 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -3076,7 +3076,10 @@ static void __perf_event_read(void *info) static inline u64 perf_event_count(struct perf_event *event) { - return local64_read(&event->count) + atomic64_read(&event->child_count); + if (event->pmu->count) + return event->pmu->count(event); + + return __perf_event_count(event); } static u64 perf_event_read(struct perf_event *event) -- 1.9.3
next prev parent reply other threads:[~2015-01-23 18:47 UTC|newest] Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-01-23 18:45 [PATCH v5 0/9] perf: Intel Cache QoS Monitoring support Matt Fleming 2015-01-23 18:45 ` [PATCH 1/9] perf: Make perf_cgroup_from_task() global Matt Fleming 2015-02-26 4:14 ` [tip:perf/x86] " tip-bot for Matt Fleming 2015-01-23 18:45 ` Matt Fleming [this message] 2015-02-26 4:14 ` [tip:perf/x86] perf: Add ->count() function to read per-package counters tip-bot for Matt Fleming 2015-01-23 18:45 ` [PATCH 3/9] perf: Move cgroup init before PMU ->event_init() Matt Fleming 2015-02-26 4:14 ` [tip:perf/x86] " tip-bot for Matt Fleming 2015-01-23 18:45 ` [PATCH 4/9] x86: Add support for Intel Cache QoS Monitoring (CQM) detection Matt Fleming 2015-02-26 4:14 ` [tip:perf/x86] x86: Add support for Intel Cache QoS Monitoring ( CQM) detection tip-bot for Peter P Waskiewicz Jr 2015-01-23 18:45 ` [PATCH 5/9] perf/x86/intel: Add Intel Cache QoS Monitoring support Matt Fleming 2015-01-25 18:34 ` Jiri Olsa 2015-01-25 23:07 ` Matt Fleming 2015-02-26 4:15 ` [tip:perf/x86] " tip-bot for Matt Fleming 2015-02-26 18:47 ` Matt Fleming 2015-02-26 19:40 ` Peter Zijlstra 2015-03-23 12:25 ` [tip:perf/x86] perf/x86/intel: Fix Makefile to actually build the cqm driver tip-bot for Matt Fleming 2015-01-23 18:45 ` [PATCH 6/9] perf/x86/intel: Implement LRU monitoring ID allocation for CQM Matt Fleming 2015-02-26 4:15 ` [tip:perf/x86] " tip-bot for Matt Fleming 2015-01-23 18:45 ` [PATCH 7/9] perf/x86/intel: Support task events with Intel CQM Matt Fleming 2015-02-26 4:15 ` [tip:perf/x86] " tip-bot for Matt Fleming 2015-03-04 4:16 ` Vince Weaver 2015-03-05 0:55 ` Ingo Molnar 2015-03-05 21:10 ` Peter Zijlstra 2015-03-23 12:26 ` [tip:perf/x86] perf: Remove type specific target pointers tip-bot for Peter Zijlstra 2015-01-23 18:45 ` [PATCH v5 8/9] perf/x86/intel: Perform rotation on Intel CQM RMIDs Matt Fleming 2015-02-26 4:16 ` [tip:perf/x86] " tip-bot for Matt Fleming 2015-01-23 18:45 ` [PATCH v5 9/9] perf/x86/intel: Enable conflicting event scheduling for CQM Matt Fleming 2015-02-26 4:16 ` [tip:perf/x86] " tip-bot for Matt Fleming
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=1422038748-21397-3-git-send-email-matt@codeblueprint.co.uk \ --to=matt@codeblueprint.co.uk \ --cc=acme@kernel.org \ --cc=acme@redhat.com \ --cc=andi@firstfloor.org \ --cc=hpa@zytor.com \ --cc=jolsa@redhat.com \ --cc=kanaka.d.juvva@intel.com \ --cc=linux-kernel@vger.kernel.org \ --cc=matt.fleming@intel.com \ --cc=mingo@kernel.org \ --cc=peterz@infradead.org \ --cc=tglx@linutronix.de \ --cc=vikas.shivappa@linux.intel.com \ /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 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).