Messages in this thread | | | Subject | Re: [PATCH] perf_event: Adjust frequency and unthrottle for non-group-leader events | From | Peter Zijlstra <> | Date | Wed, 14 Oct 2009 12:54:12 +0200 |
| |
On Wed, 2009-10-14 at 16:58 +1100, Paul Mackerras wrote: > The loop in perf_ctx_adjust_freq checks the frequency of sampling > event counters, and adjusts the event interval and unthrottles the > event if required, and resets the interrupt count for the event. > However, at present it only looks at group leaders. > > This means that a sampling event that is not a group leader will > eventually get throttled, once its interrupt count reaches > sysctl_perf_event_sample_rate/HZ --- and that is guaranteed to > happen, if the event is active for long enough, since the interrupt > count never gets reset. Once it is throttled it never gets > unthrottled, so it basically just stops working at that point. > > This fixes it by making perf_ctx_adjust_freq use ctx->event_list > rather than ctx->group_list. The existing spin_lock/spin_unlock > around the loop makes it unnecessary to put rcu_read_lock/ > rcu_read_unlock around the list_for_each_entry_rcu(). > > Reported-by: Mark W. Krentel <krentel@cs.rice.edu> > Signed-off-by: Paul Mackerras <paulus@samba.org>
Looks good, thanks Paul!
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> --- > Apparently this bug was only seen on powerpc, and not on x86. I have > no idea why.
Weird, should work the same way on both of them.
| |