Re: [PATCH v1 8/8] perf/x86: Add event owner check when PEBS output to Intel PT

From: Peter Zijlstra
Date: Wed Oct 30 2019 - 05:54:17 EST


On Wed, Oct 30, 2019 at 04:07:31AM +0000, Kang, Luwei wrote:
> > > For PEBS output to Intel PT, a Intel PT event should be the group
> > > leader of an PEBS counter event in host. For Intel PT virtualization
> > > enabling in KVM guest, the PT facilities will be passthrough to guest
> > > and do not allocate PT event from host perf event framework. This is
> > > different with PMU virtualization.
> > >
> > > Intel new hardware feature that can make PEBS enabled in KVM guest by
> > > output PEBS records to Intel PT buffer. KVM need to allocate a event
> > > counter for this PEBS event without Intel PT event leader.
> > >
> > > This patch add event owner check for PEBS output to PT event that only
> > > non-kernel event need group leader(PT).
> > >
> > > Signed-off-by: Luwei Kang <luwei.kang@xxxxxxxxx>
> > > ---
> > > arch/x86/events/core.c | 3 ++-
> > > include/linux/perf_event.h | 1 +
> > > kernel/events/core.c | 2 +-
> > > 3 files changed, 4 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c index
> > > 7b21455..214041a 100644
> > > --- a/arch/x86/events/core.c
> > > +++ b/arch/x86/events/core.c
> > > @@ -1014,7 +1014,8 @@ static int collect_events(struct cpu_hw_events *cpuc, struct perf_event *leader,
> > > * away, the group was broken down and this singleton event
> > > * can't schedule any more.
> > > */
> > > - if (is_pebs_pt(leader) && !leader->aux_event)
> > > + if (is_pebs_pt(leader) && !leader->aux_event &&
> > > + !is_kernel_event(leader))
> >
> > indent fail, but also, I'm not sure I buy this.
> >
> > Surely pt-on-kvm has a perf event to claim PT for the vCPU context?
>
> Hi Peter,
> PT on KVM will not allocate perf events from host (this is different from performance counter). The guest PT MSRs value will be load to hardware directly before VM-entry.
> A PT event is needed by PEBS event as the event group leader in native. In virtualization, we can allocate a counter for PEBS but can't assign a PT event as the leader of this PEBS event.

Please, fix your MUA already.

Then how does KVM deal with the host using PT? You can't just steal PT.