Messages in this thread | | | Date | Fri, 21 Nov 2008 23:47:38 +0100 | From | "stephane eranian" <> | Subject | Re: debugctl msr |
| |
Markus,
Perfmon does allocate its own buffer for PEBS. That buffer contains: a perfmon header + PEBS buffer
Keep in mind that the PEBS buffer is actually remapped to user space to avoid copying records around.
With the current code base, ds.c can accept a pre-allocated buffer. However, it does some adjustments for alignment and size (multiple of PEBS record size). That means that the start and end of the buffer could be different from the area passed to ds_request_pebs().
To parse the buffer, a monitoring tools needs a start position and the number of samples. The start position can be expressed as an offset from the beginning of the perfmon buffer. The ds.c interface currently only returns indexes for current position, threshold, and end. Those indexes are good enough to derived the number of samples. But I would need one call to return the byte offset from the original buffer, or the actual address (which perfmon could then convert back to an offset from its buffer).
Thanks.
On Fri, Nov 21, 2008 at 5:33 PM, stephane eranian <eranian@googlemail.com> wrote: > On Fri, Nov 21, 2008 at 5:10 PM, Metzger, Markus T > <markus.t.metzger@intel.com> wrote: >>>-----Original Message----- >>>From: stephane eranian [mailto:eranian@googlemail.com] >>>Sent: Freitag, 21. November 2008 16:27 >>>To: Metzger, Markus T >>>Cc: Markus Metzger; Ingo Molnar; Andi Kleen; Andrew Morton; >>>linux-kernel@vger.kernel.org >>>Subject: Re: debugctl msr >> >>>The absolute maximum MUST be at buffer+size+1 but the >>>threshold can be anywhere >>>between the start of the buffer and buffer+size. You had it set past >>>the end of the buffer (at +1), >>>therefore PEBS was not generating any interrupts. >> >> The default is cyclic mode, which requires the interrupt threshold >> to be outside of the buffer. >> > That's not what I need. > >> A request for interrupt mode should have got you -EOPNOTSUPP. > > I did not try that. > >> >> Absolute max should be one byte beyond the buffer, which >> is base + size. >> > My bad ;-< >
| |