All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Rutland <mark.rutland@arm.com>
To: Kyle Huey <me@kylehuey.com>
Cc: "Jin, Yao" <yao.jin@linux.intel.com>,
	Ingo Molnar <mingo@kernel.org>,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>,
	stable@vger.kernel.org,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	Jiri Olsa <jolsa@redhat.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Stephane Eranian <eranian@google.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Vince Weaver <vincent.weaver@maine.edu>,
	acme@kernel.org, jolsa@kernel.org, kan.liang@intel.com,
	Will Deacon <will.deacon@arm.com>,
	gregkh@linuxfoundation.org,
	"Robert O'Callahan" <robert@ocallahan.org>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [REGRESSION] perf/core: PMU interrupts dropped if we entered the kernel in the "skid" region
Date: Wed, 28 Jun 2017 18:19:44 +0100	[thread overview]
Message-ID: <20170628171943.GF8252@leverpostej> (raw)
In-Reply-To: <CAP045AqMGwHKCiTTUQauX1ZivpnW-QW355rzCVLgdGn7HgOo3Q@mail.gmail.com>

On Wed, Jun 28, 2017 at 09:46:43AM -0700, Kyle Huey wrote:
> On Wed, Jun 28, 2017 at 3:12 AM, Mark Rutland <mark.rutland@arm.com> wrote:
> > On Tue, Jun 27, 2017 at 09:51:00PM -0700, Kyle Huey wrote:
> >> My understanding of the situation is as follows:
> >>
> >> There is some time, call it t_0, where the hardware counter overflows.
> >> The PMU triggers an interrupt, but this is not instantaneous.  Call
> >> the time when the interrupt is actually delivered t_1.  Then t_1 - t_0
> >> is the "skid".
> >>
> >> Note that if the counter is `exclude_kernel`, then at t_0 the CPU
> >> *must* be running a userspace program.  But by t_1, the CPU may be
> >> doing something else.  Your patch changed things so that if at t_1 the
> >> CPU is in the kernel, then the interrupt is discarded.  But rr has
> >> programmed the counter to deliver a signal on overflow (via F_SETSIG
> >> on the fd returned by perf_event_open).  This change results in the
> >> signal never being delivered, because the interrupt was ignored.
> >> (More accurately, the signal is delivered the *next* time the counter
> >> overflows, which is far past where we wanted to inject our
> >> asynchronous event into our tracee.
> >
> > Yes, this is a bug.
> >
> > As we're trying to avoid smapling state, I think we can move the check
> > into perf_prepare_sample() or __perf_event_output(), where that state is
> > actually sampled. I'll take a look at that momentarily.
> >
> > Just to clarify, you don't care about the sample state at all? i.e. you
> > don't need the user program counter?
> 
> Right. `sample_regs_user`, `sample_star_user`, `branch_sample_type`,
> etc are all 0.
> https://github.com/mozilla/rr/blob/cf594dd01f07d96a61409e9f41a29f78c8c51693/src/PerfCounters.cc#L194
> is what we do use.

Given that, I must be missing something.

In __perf_event_overflow(), we already bail out early if
!is_sampling_event(event), i.e. when the sample_period is 0.

Your attr has a sample_period of zero, so something must be initialising
that.

Do you always call PERF_EVENT_IOC_PERIOD, or is something in the core
fiddling with the sample period behind your back?

It seems odd that an event without any samples to take has a sample
period. I'm surprised that there's not *some* sample_type set.

> > Is that signal delivered to the tracee, or to a different process that
> > traces it? If the latter, what ensures that the task is stopped
> > sufficiently quickly?
> 
> It's delivered to the tracee (via an F_SETOWN_EX with the tracee tid).
> In practice we've found that on modern Intel hardware that the
> interrupt and resulting signal delivery delay is bounded by a
> relatively small number of counter events.

Ok.

Thanks,
Mark.

  reply	other threads:[~2017-06-28 17:20 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-28  0:38 [REGRESSION] perf/core: PMU interrupts dropped if we entered the kernel in the "skid" region Kyle Huey
2017-06-28  1:01 ` Kyle Huey
2017-06-28  2:09   ` Jin, Yao
2017-06-28  4:51     ` Kyle Huey
2017-06-28  5:35       ` Jin, Yao
2017-06-28  7:30         ` Kyle Huey
2017-06-28 10:12       ` Mark Rutland
2017-06-28 10:56         ` [PATCH] perf/core: generate overflow signal when samples are dropped (WAS: Re: [REGRESSION] perf/core: PMU interrupts dropped if we entered the kernel in the "skid" region) Mark Rutland
2017-06-28 12:40           ` Vince Weaver
2017-06-28 13:07             ` Mark Rutland
2017-06-29  8:13               ` Alexey Budankov
2017-06-29  8:25                 ` Alexey Budankov
2017-06-29  8:25                   ` Alexey Budankov
2017-06-28 16:48           ` Kyle Huey
2017-06-28 17:49             ` Mark Rutland
2017-06-28 22:55               ` Kyle Huey
2017-06-29  0:27                 ` Jin, Yao
2017-06-30 17:44                 ` Kyle Huey
2017-07-04  9:03                 ` Peter Zijlstra
2017-07-04  9:33                   ` Mark Rutland
2017-07-04  9:46                     ` Peter Zijlstra
2017-07-04 10:21                     ` Mark Rutland
2017-07-06  5:07                       ` Robert O'Callahan
2017-07-11  2:03                         ` Kyle Huey
2017-07-11  9:03                           ` Ingo Molnar
2017-07-11 13:07                             ` Jin, Yao
2017-07-12  7:57                               ` Ingo Molnar
2017-07-11 14:26                             ` Mark Rutland
2017-07-11 15:32                             ` Kyle Huey
2017-07-18  0:07                               ` Kyle Huey
2017-06-29  8:12               ` Ingo Molnar
2017-07-04  9:06                 ` Peter Zijlstra
2017-07-04 10:04                   ` Ingo Molnar
2017-07-11  9:03           ` [tip:perf/urgent] Revert "perf/core: Drop kernel samples even though :u is specified" tip-bot for Ingo Molnar
2017-06-28 16:46         ` [REGRESSION] perf/core: PMU interrupts dropped if we entered the kernel in the "skid" region Kyle Huey
2017-06-28 17:19           ` Mark Rutland [this message]
2017-06-28 17:36             ` Kyle Huey
2017-06-28 17:52               ` Mark Rutland
2017-06-28 17:48             ` Robert O'Callahan

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=20170628171943.GF8252@leverpostej \
    --to=mark.rutland@arm.com \
    --cc=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=eranian@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jolsa@kernel.org \
    --cc=jolsa@redhat.com \
    --cc=kan.liang@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=me@kylehuey.com \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=robert@ocallahan.org \
    --cc=stable@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --cc=vincent.weaver@maine.edu \
    --cc=will.deacon@arm.com \
    --cc=yao.jin@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: 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.