messageID:590760007802
author:gregkh
title:patch perf events dont report side band event
This is a note to let you know that we have just queued up the patch titled Subject: perf events: Dont report side-band events on each cpu for per-task-per-cpu events to the 2.6.32-stable tree. Its filename is perf-events-dont-report-side-band-events-on-each-cpu-for-per-task-per-cpu-events.patch A git repo of this tree can be found at rel="nofollow" www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary From 5d27c23df09b702868d9a3bff86ec6abd22963ac Mon Sep 17 00:00:00 2001 From: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx Date: Thu, 17 Dec 2009 13:16:32 +0100 Subject: perf events: Dont report side-band events on each cpu for per-task-per-cpu events From: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx commit 5d27c23df09b702868d9a3bff86ec6abd22963ac upstream. Acme noticed that his FORK/MMAP numbers were inflated by about the same factor as his cpu-count. This led to the discovery of a few more sites that need to respect the event- cpu filter. Reported-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxxxxxxxxxx Signed-off-by: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx Cc: Paul Mackerras <paulus@xxxxxxxxx LKML-Reference: <20091217121830.215333434@xxxxxxxxx Signed-off-by: Ingo Molnar <mingo@xxxxxxx Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx --- kernel/perf_event.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) --- a/kernel/perf_event.c +++ b/kernel/perf_event.c @@ -1359,6 +1359,9 @@ static void perf_ctx_adjust_freq(struct if (event- state != PERF_EVENT_STATE_ACTIVE) continue; + if (event- cpu != -1 && event- cpu != smp_processor_id()) + continue; + hwc = &event- hw; interrupts = hwc- interrupts; @@ -3226,6 +3229,9 @@ static void perf_event_task_output(struc static int perf_event_task_match(struct perf_event *event) { + if (event- cpu != -1 && event- cpu != smp_processor_id()) + return 0; + if (event- attr.comm || event- attr.mmap || event- attr.task) return 1; @@ -3262,6 +3268,7 @@ static void perf_event_task_event(struct ctx = rcu_dereference(task_event- task- perf_event_ctxp); if (ctx) perf_event_task_ctx(ctx, task_event); + put_cpu_var(perf_cpu_context); rcu_read_unlock(); } @@ -3338,6 +3345,9 @@ static void perf_event_comm_output(struc static int perf_event_comm_match(struct perf_event *event) { + if (event- cpu != -1 && event- cpu != smp_processor_id()) + return 0; + if (event- attr.comm) return 1; @@ -3378,7 +3388,6 @@ static void perf_event_comm_event(struct cpuctx = &get_cpu_var(perf_cpu_context); perf_event_comm_ctx(&cpuctx- ctx, comm_event); - put_cpu_var(perf_cpu_context); rcu_read_lock(); /* @@ -3388,6 +3397,7 @@ static void perf_event_comm_event(struct ctx = rcu_dereference(current- perf_event_ctxp); if (ctx) perf_event_comm_ctx(ctx, comm_event); + put_cpu_var(perf_cpu_context); rcu_read_unlock(); } @@ -3462,6 +3472,9 @@ static void perf_event_mmap_output(struc static int perf_event_mmap_match(struct perf_event *event, struct perf_mmap_event *mmap_event) { + if (event- cpu != -1 && event- cpu != smp_processor_id()) + return 0; + if (event- attr.mmap) return 1; @@ -3539,7 +3552,6 @@ got_name: cpuctx = &get_cpu_var(perf_cpu_context); perf_event_mmap_ctx(&cpuctx- ctx, mmap_event); - put_cpu_var(perf_cpu_context); rcu_read_lock(); /* @@ -3549,6 +3561,7 @@ got_name: ctx = rcu_dereference(current- perf_event_ctxp); if (ctx) perf_event_mmap_ctx(ctx, mmap_event); + put_cpu_var(perf_cpu_context); rcu_read_unlock(); kfree(buf); @@ -3811,6 +3824,9 @@ static int perf_swevent_match(struct per enum perf_type_id type, u32 event_id, struct pt_regs *regs) { + if (event- cpu != -1 && event- cpu != smp_processor_id()) + return 0; + if (!perf_swevent_is_counting(event)) return 0; Patches currently in stable-queue which might be from a.p.zijlstra@xxxxxxxxx are queue-2.6.32/perf-honour-event-state-for-aux-stream-data.patch queue-2.6.32/perf-timechart-use-tid-not-pid-for-comm-change.patch queue-2.6.32/perf-events-dont-report-side-band-events-on-each-cpu-for-per-task-per-cpu-events.patch -- To unsubscribe from this list: send the line "unsubscribe stable-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at rel="nofollow" vger.kernel.org/majordomo-info.html vger.kernel.org/majordomo-info.html
Index