All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: eranian@google.com
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu, paulus@samba.org,
	davem@davemloft.net, fweisbec@gmail.com,
	perfmon2-devel@lists.sf.net, eranian@gmail.com,
	robert.richter@amd.com
Subject: Re: [PATCH] perf_events: fix transaction recovery in group_sched_in()
Date: Fri, 15 Oct 2010 19:29:57 +0200	[thread overview]
Message-ID: <1287163797.1998.107.camel@laptop> (raw)
In-Reply-To: <4cb86b4c.41e9d80a.44e9.3e19@mx.google.com>

On Fri, 2010-10-15 at 16:54 +0200, Stephane Eranian wrote:
> The group_sched_in() function uses a transactional approach to schedule
> a group of events. In a group, either all events can be scheduled or
> none are. To schedule each event in, the function calls event_sched_in().
> In case of error, event_sched_out() is called on each event in the group.
> 
> The problem is that event_sched_out() does not completely cancel the
> effects of event_sched_in(). Furthermore event_sched_out() changes the
> state of the event as if it had run which is not true is this particular
> case.
> 
> Those inconsistencies impact time tracking fields and may lead to events
> in a group not all reporting the same time_enabled and time_running values.
> This is demonstrated with the example below:
> 
> $ task -eunhalted_core_cycles,baclears,baclears -e unhalted_core_cycles,baclears,baclears sleep 5
> 1946101 unhalted_core_cycles (32.85% scaling, ena=829181, run=556827)
>   11423 baclears (32.85% scaling, ena=829181, run=556827)
>    7671 baclears (0.00% scaling, ena=556827, run=556827)
> 
> 2250443 unhalted_core_cycles (57.83% scaling, ena=962822, run=405995)
>   11705 baclears (57.83% scaling, ena=962822, run=405995)
>   11705 baclears (57.83% scaling, ena=962822, run=405995)
> 
> Notice that in the first group, the last baclears event does not
> report the same timings as its siblings.
> 
> This issue comes from the fact that tstamp_stopped is updated
> by event_sched_out() as if the event had actually run.
> 
> To solve the issue, we must ensure that, in case of error, there is
> no change in the event state whatsoever. That means timings must
> remain as they were when entering group_sched_in().
> 
> To do this we defer updating tstamp_running until we know the
> transaction succeeded. Therefore, we have split event_sched_in()
> in two parts separating the update to tstamp_running.
> 
> Similarly, in case of error, we do not want to update tstamp_stopped.
> Therefore, we have split event_sched_out() in two parts separating
> the update to tstamp_stopped. 
> 
> With this patch, we now get the following output:
> 
> $ task -eunhalted_core_cycles,baclears,baclears -e unhalted_core_cycles,baclears,baclears sleep 5
> 2492050 unhalted_core_cycles (71.75% scaling, ena=1093330, run=308841)
>   11243 baclears (71.75% scaling, ena=1093330, run=308841)
>   11243 baclears (71.75% scaling, ena=1093330, run=308841)
> 
> 1852746 unhalted_core_cycles (0.00% scaling, ena=784489, run=784489)
>    9253 baclears (0.00% scaling, ena=784489, run=784489)
>    9253 baclears (0.00% scaling, ena=784489, run=784489)
> 
> Note that the uneven timing between groups is a side effect of
> the process spending most of its time sleeping, i.e., not enough
> event rotations (but that's a separate issue).
> 
> Signed-off-by: Stephane Eranian <eranian@google.com>

Yes, makes sense.. I'm a bit hesitant to slap a -stable tag on it due to
its size,.. Ingo, Paulus?



  reply	other threads:[~2010-10-15 17:30 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-15 14:54 [PATCH] perf_events: fix transaction recovery in group_sched_in() Stephane Eranian
2010-10-15 17:29 ` Peter Zijlstra [this message]
2010-10-15 17:34   ` Stephane Eranian
2010-10-15 17:39     ` Peter Zijlstra
2010-10-18 19:18 ` [tip:perf/core] perf_events: Fix " tip-bot for Stephane Eranian

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=1287163797.1998.107.camel@laptop \
    --to=peterz@infradead.org \
    --cc=davem@davemloft.net \
    --cc=eranian@gmail.com \
    --cc=eranian@google.com \
    --cc=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=paulus@samba.org \
    --cc=perfmon2-devel@lists.sf.net \
    --cc=robert.richter@amd.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: 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.