From: tip-bot for Frederic Weisbecker <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, eranian@google.com,
acme@redhat.com, hpa@zytor.com, mingo@kernel.org,
peterz@infradead.org, namhyung@kernel.org, jolsa@redhat.com,
fweisbec@gmail.com, tglx@linutronix.de
Subject: [tip:perf/core] perf: Split the per-cpu accounting part of the event accounting code
Date: Wed, 31 Jul 2013 01:56:28 -0700 [thread overview]
Message-ID: <tip-4beb31f3657348a8b702dd014d01c520e522012f@git.kernel.org> (raw)
In-Reply-To: <1374539466-4799-5-git-send-email-fweisbec@gmail.com>
Commit-ID: 4beb31f3657348a8b702dd014d01c520e522012f
Gitweb: http://git.kernel.org/tip/4beb31f3657348a8b702dd014d01c520e522012f
Author: Frederic Weisbecker <fweisbec@gmail.com>
AuthorDate: Tue, 23 Jul 2013 02:31:02 +0200
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 30 Jul 2013 22:29:13 +0200
perf: Split the per-cpu accounting part of the event accounting code
This way we can use the per-cpu handling seperately.
This is going to be used by to fix the event migration
code accounting.
Original-patch-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Stephane Eranian <eranian@google.com>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1374539466-4799-5-git-send-email-fweisbec@gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
kernel/events/core.c | 87 +++++++++++++++++++++++++++++++++-------------------
1 file changed, 55 insertions(+), 32 deletions(-)
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 158fd57..3a4b73a 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -3128,6 +3128,40 @@ static void free_event_rcu(struct rcu_head *head)
static void ring_buffer_put(struct ring_buffer *rb);
static void ring_buffer_detach(struct perf_event *event, struct ring_buffer *rb);
+static void unaccount_event_cpu(struct perf_event *event, int cpu)
+{
+ if (event->parent)
+ return;
+
+ if (has_branch_stack(event)) {
+ if (!(event->attach_state & PERF_ATTACH_TASK))
+ atomic_dec(&per_cpu(perf_branch_stack_events, cpu));
+ }
+ if (is_cgroup_event(event))
+ atomic_dec(&per_cpu(perf_cgroup_events, cpu));
+}
+
+static void unaccount_event(struct perf_event *event)
+{
+ if (event->parent)
+ return;
+
+ if (event->attach_state & PERF_ATTACH_TASK)
+ static_key_slow_dec_deferred(&perf_sched_events);
+ if (event->attr.mmap || event->attr.mmap_data)
+ atomic_dec(&nr_mmap_events);
+ if (event->attr.comm)
+ atomic_dec(&nr_comm_events);
+ if (event->attr.task)
+ atomic_dec(&nr_task_events);
+ if (is_cgroup_event(event))
+ static_key_slow_dec_deferred(&perf_sched_events);
+ if (has_branch_stack(event))
+ static_key_slow_dec_deferred(&perf_sched_events);
+
+ unaccount_event_cpu(event, event->cpu);
+}
+
static void __free_event(struct perf_event *event)
{
if (!event->parent) {
@@ -3147,29 +3181,7 @@ static void free_event(struct perf_event *event)
{
irq_work_sync(&event->pending);
- if (!event->parent) {
- if (event->attach_state & PERF_ATTACH_TASK)
- static_key_slow_dec_deferred(&perf_sched_events);
- if (event->attr.mmap || event->attr.mmap_data)
- atomic_dec(&nr_mmap_events);
- if (event->attr.comm)
- atomic_dec(&nr_comm_events);
- if (event->attr.task)
- atomic_dec(&nr_task_events);
- if (is_cgroup_event(event)) {
- atomic_dec(&per_cpu(perf_cgroup_events, event->cpu));
- static_key_slow_dec_deferred(&perf_sched_events);
- }
-
- if (has_branch_stack(event)) {
- static_key_slow_dec_deferred(&perf_sched_events);
- /* is system-wide event */
- if (!(event->attach_state & PERF_ATTACH_TASK)) {
- atomic_dec(&per_cpu(perf_branch_stack_events,
- event->cpu));
- }
- }
- }
+ unaccount_event(event);
if (event->rb) {
struct ring_buffer *rb;
@@ -6451,8 +6463,24 @@ unlock:
return pmu;
}
+static void account_event_cpu(struct perf_event *event, int cpu)
+{
+ if (event->parent)
+ return;
+
+ if (has_branch_stack(event)) {
+ if (!(event->attach_state & PERF_ATTACH_TASK))
+ atomic_inc(&per_cpu(perf_branch_stack_events, cpu));
+ }
+ if (is_cgroup_event(event))
+ atomic_inc(&per_cpu(perf_cgroup_events, cpu));
+}
+
static void account_event(struct perf_event *event)
{
+ if (event->parent)
+ return;
+
if (event->attach_state & PERF_ATTACH_TASK)
static_key_slow_inc(&perf_sched_events.key);
if (event->attr.mmap || event->attr.mmap_data)
@@ -6461,17 +6489,12 @@ static void account_event(struct perf_event *event)
atomic_inc(&nr_comm_events);
if (event->attr.task)
atomic_inc(&nr_task_events);
- if (has_branch_stack(event)) {
+ if (has_branch_stack(event))
static_key_slow_inc(&perf_sched_events.key);
- if (!(event->attach_state & PERF_ATTACH_TASK))
- atomic_inc(&per_cpu(perf_branch_stack_events,
- event->cpu));
- }
-
- if (is_cgroup_event(event)) {
- atomic_inc(&per_cpu(perf_cgroup_events, event->cpu));
+ if (is_cgroup_event(event))
static_key_slow_inc(&perf_sched_events.key);
- }
+
+ account_event_cpu(event, event->cpu);
}
/*
next prev parent reply other threads:[~2013-07-31 8:57 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-23 0:30 [PATCH 0/8] perf: Finer grained full dynticks handling Frederic Weisbecker
2013-07-23 0:30 ` [PATCH 1/8] perf: Fix branch stack refcount leak on callchain init failure Frederic Weisbecker
2013-07-31 8:55 ` [tip:perf/core] " tip-bot for Frederic Weisbecker
2013-07-23 0:31 ` [PATCH 2/8] perf: Sanitize get_callchain_buffer() Frederic Weisbecker
2013-07-31 8:56 ` [tip:perf/core] " tip-bot for Frederic Weisbecker
2013-08-01 13:01 ` [PATCH 2/8] " Jiri Olsa
2013-08-01 13:28 ` Frederic Weisbecker
2013-08-01 13:32 ` Jiri Olsa
2013-08-01 13:49 ` Frederic Weisbecker
2013-08-01 13:54 ` Jiri Olsa
2013-08-01 13:57 ` Frederic Weisbecker
2013-08-01 13:29 ` Jiri Olsa
2013-08-01 13:42 ` Frederic Weisbecker
2013-08-01 13:51 ` Jiri Olsa
2013-08-01 14:30 ` Frederic Weisbecker
2013-07-23 0:31 ` [PATCH 3/8] perf: Gather event accounting code Frederic Weisbecker
2013-07-31 8:56 ` [tip:perf/core] perf: Factor out event accounting code to account_event()/__free_event() tip-bot for Frederic Weisbecker
2013-08-01 13:13 ` [PATCH 3/8] perf: Gather event accounting code Jiri Olsa
2013-08-01 13:30 ` Frederic Weisbecker
2013-07-23 0:31 ` [PATCH 4/8] perf: Split per cpu " Frederic Weisbecker
2013-07-31 8:56 ` tip-bot for Frederic Weisbecker [this message]
2013-07-23 0:31 ` [PATCH 5/8] perf: Migrate per cpu event accounting Frederic Weisbecker
2013-07-31 8:56 ` [tip:perf/core] " tip-bot for Frederic Weisbecker
2013-07-23 0:31 ` [PATCH 6/8] perf: Account freq events per cpu Frederic Weisbecker
2013-07-31 8:56 ` [tip:perf/core] " tip-bot for Frederic Weisbecker
2013-08-01 12:46 ` [PATCH 6/8] " Jiri Olsa
2013-08-01 12:48 ` Jiri Olsa
2013-08-01 13:31 ` Peter Zijlstra
2013-08-01 13:35 ` Peter Zijlstra
2013-08-01 13:39 ` Jiri Olsa
2013-08-01 13:56 ` Peter Zijlstra
2013-08-01 13:55 ` Frederic Weisbecker
2013-08-01 14:03 ` Peter Zijlstra
2013-08-01 14:06 ` Peter Zijlstra
2013-08-01 14:21 ` Frederic Weisbecker
2013-08-01 14:40 ` Peter Zijlstra
2013-08-02 16:25 ` Frederic Weisbecker
2013-08-01 14:19 ` Frederic Weisbecker
2013-07-23 0:31 ` [PATCH 7/8] perf: Finer grained full dynticks kick Frederic Weisbecker
2013-07-31 8:56 ` [tip:perf/core] perf: Implement finer " tip-bot for Frederic Weisbecker
2013-07-23 0:31 ` [PATCH 8/8] watchdog: Remove hack to make full dynticks working Frederic Weisbecker
2013-07-23 12:33 ` Don Zickus
2013-07-23 12:44 ` Frederic Weisbecker
2013-07-23 12:45 ` Peter Zijlstra
2013-07-31 8:57 ` [tip:perf/core] watchdog: Make it work under full dynticks tip-bot for Frederic Weisbecker
2013-07-25 9:59 ` [PATCH 0/8] perf: Finer grained full dynticks handling Peter Zijlstra
2013-07-25 14:02 ` Frederic Weisbecker
2013-07-25 16:29 ` Peter Zijlstra
2013-07-25 20:07 ` Frederic Weisbecker
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=tip-4beb31f3657348a8b702dd014d01c520e522012f@git.kernel.org \
--to=tipbot@zytor.com \
--cc=acme@redhat.com \
--cc=eranian@google.com \
--cc=fweisbec@gmail.com \
--cc=hpa@zytor.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
/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 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.