Re: [PATCH 06/34] perf, kvm: Support the intx/intx_cp modifiers in KVM arch perfmon emulation v2

2012-10-23 Thread Andi Kleen
On Tue, Oct 23, 2012 at 03:35:27PM +0200, Andi Kleen wrote:
> > So I forgot how all this worked, but will the KVM emulation not pass
> > this straight down to the hardware?
> 
> Pass down to perf. 
> 
> > 
> > Don't we have a problem where we're emulating arch perfmon v1 on AMD
> > hardware? On AMD hardware those bits do have meaning.
> 
> Ah they do? I wasn't aware. I can add a cpuid check for Intel I suppose.

Ah now I remember: I wrote it for the original qualifiers which would
have worked fine for AMD too. It just broke with the raw events you
asked for.

Ok will do the cpuid check to work around this problem.

-Andi


-- 
a...@linux.intel.com -- Speaking for myself only.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 06/34] perf, kvm: Support the intx/intx_cp modifiers in KVM arch perfmon emulation v2

2012-10-23 Thread Andi Kleen
> So I forgot how all this worked, but will the KVM emulation not pass
> this straight down to the hardware?

Pass down to perf. 

> 
> Don't we have a problem where we're emulating arch perfmon v1 on AMD
> hardware? On AMD hardware those bits do have meaning.

Ah they do? I wasn't aware. I can add a cpuid check for Intel I suppose.

-andi

-- 
a...@linux.intel.com -- Speaking for myself only.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 06/34] perf, kvm: Support the intx/intx_cp modifiers in KVM arch perfmon emulation v2

2012-10-23 Thread Gleb Natapov
On Tue, Oct 23, 2012 at 02:36:05PM +0200, Peter Zijlstra wrote:
> On Thu, 2012-10-18 at 16:19 -0700, Andi Kleen wrote:
> > From: Andi Kleen 
> > 
> > This is not arch perfmon, but older CPUs will just ignore it. This makes
> > it possible to do at least some TSX measurements from a KVM guest
> 
> Please, always CC people who wrote the code as well, in this case that's
> Gleb.
> 
Yes, I missed the v2. Thanks Peter.

> > Cc: a...@redhat.com
> > v2: Various fixes to address review feedback
> > Signed-off-by: Andi Kleen 
> > ---
> >  arch/x86/kvm/pmu.c |   15 +++
> >  1 files changed, 11 insertions(+), 4 deletions(-)
> > 
> > diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c
> > index cfc258a..81c1632 100644
> > --- a/arch/x86/kvm/pmu.c
> > +++ b/arch/x86/kvm/pmu.c
> 
> > @@ -173,6 +173,11 @@ static void reprogram_counter(struct kvm_pmc *pmc, u32 
> > type,
> > .exclude_kernel = exclude_kernel,
> > .config = config,
> > };
> > +   /* Will be ignored on CPUs that don't support this. */
> > +   if (intx)
> > +   attr.config |= HSW_INTX;
> > +   if (intx_cp)
> > +   attr.config |= HSW_INTX_CHECKPOINTED;
> >  
> > attr.sample_period = (-pmc->counter) & pmc_bitmask(pmc);
> >  
> 
> So I forgot how all this worked, but will the KVM emulation not pass
> this straight down to the hardware?
KVM PMU emulation does not talk to HW directly. It creates perf_event to
emulate PMU counter. As far as I see those two will be dropped by
hsw_hw_config() if host HW does not support them.


> 
> Don't we have a problem where we're emulating arch perfmon v1 on AMD
> hardware? On AMD hardware those bits do have meaning.
PMU emulation does not support AMD yet.

--
Gleb.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 06/34] perf, kvm: Support the intx/intx_cp modifiers in KVM arch perfmon emulation v2

2012-10-23 Thread Peter Zijlstra
On Thu, 2012-10-18 at 16:19 -0700, Andi Kleen wrote:
> From: Andi Kleen 
> 
> This is not arch perfmon, but older CPUs will just ignore it. This makes
> it possible to do at least some TSX measurements from a KVM guest

Please, always CC people who wrote the code as well, in this case that's
Gleb.

> Cc: a...@redhat.com
> v2: Various fixes to address review feedback
> Signed-off-by: Andi Kleen 
> ---
>  arch/x86/kvm/pmu.c |   15 +++
>  1 files changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c
> index cfc258a..81c1632 100644
> --- a/arch/x86/kvm/pmu.c
> +++ b/arch/x86/kvm/pmu.c

> @@ -173,6 +173,11 @@ static void reprogram_counter(struct kvm_pmc *pmc, u32 
> type,
>   .exclude_kernel = exclude_kernel,
>   .config = config,
>   };
> + /* Will be ignored on CPUs that don't support this. */
> + if (intx)
> + attr.config |= HSW_INTX;
> + if (intx_cp)
> + attr.config |= HSW_INTX_CHECKPOINTED;
>  
>   attr.sample_period = (-pmc->counter) & pmc_bitmask(pmc);
>  

So I forgot how all this worked, but will the KVM emulation not pass
this straight down to the hardware?

Don't we have a problem where we're emulating arch perfmon v1 on AMD
hardware? On AMD hardware those bits do have meaning.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 06/34] perf, kvm: Support the intx/intx_cp modifiers in KVM arch perfmon emulation v2

2012-10-23 Thread Peter Zijlstra
On Thu, 2012-10-18 at 16:19 -0700, Andi Kleen wrote:
 From: Andi Kleen a...@linux.intel.com
 
 This is not arch perfmon, but older CPUs will just ignore it. This makes
 it possible to do at least some TSX measurements from a KVM guest

Please, always CC people who wrote the code as well, in this case that's
Gleb.

 Cc: a...@redhat.com
 v2: Various fixes to address review feedback
 Signed-off-by: Andi Kleen a...@linux.intel.com
 ---
  arch/x86/kvm/pmu.c |   15 +++
  1 files changed, 11 insertions(+), 4 deletions(-)
 
 diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c
 index cfc258a..81c1632 100644
 --- a/arch/x86/kvm/pmu.c
 +++ b/arch/x86/kvm/pmu.c

 @@ -173,6 +173,11 @@ static void reprogram_counter(struct kvm_pmc *pmc, u32 
 type,
   .exclude_kernel = exclude_kernel,
   .config = config,
   };
 + /* Will be ignored on CPUs that don't support this. */
 + if (intx)
 + attr.config |= HSW_INTX;
 + if (intx_cp)
 + attr.config |= HSW_INTX_CHECKPOINTED;
  
   attr.sample_period = (-pmc-counter)  pmc_bitmask(pmc);
  

So I forgot how all this worked, but will the KVM emulation not pass
this straight down to the hardware?

Don't we have a problem where we're emulating arch perfmon v1 on AMD
hardware? On AMD hardware those bits do have meaning.

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 06/34] perf, kvm: Support the intx/intx_cp modifiers in KVM arch perfmon emulation v2

2012-10-23 Thread Gleb Natapov
On Tue, Oct 23, 2012 at 02:36:05PM +0200, Peter Zijlstra wrote:
 On Thu, 2012-10-18 at 16:19 -0700, Andi Kleen wrote:
  From: Andi Kleen a...@linux.intel.com
  
  This is not arch perfmon, but older CPUs will just ignore it. This makes
  it possible to do at least some TSX measurements from a KVM guest
 
 Please, always CC people who wrote the code as well, in this case that's
 Gleb.
 
Yes, I missed the v2. Thanks Peter.

  Cc: a...@redhat.com
  v2: Various fixes to address review feedback
  Signed-off-by: Andi Kleen a...@linux.intel.com
  ---
   arch/x86/kvm/pmu.c |   15 +++
   1 files changed, 11 insertions(+), 4 deletions(-)
  
  diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c
  index cfc258a..81c1632 100644
  --- a/arch/x86/kvm/pmu.c
  +++ b/arch/x86/kvm/pmu.c
 
  @@ -173,6 +173,11 @@ static void reprogram_counter(struct kvm_pmc *pmc, u32 
  type,
  .exclude_kernel = exclude_kernel,
  .config = config,
  };
  +   /* Will be ignored on CPUs that don't support this. */
  +   if (intx)
  +   attr.config |= HSW_INTX;
  +   if (intx_cp)
  +   attr.config |= HSW_INTX_CHECKPOINTED;
   
  attr.sample_period = (-pmc-counter)  pmc_bitmask(pmc);
   
 
 So I forgot how all this worked, but will the KVM emulation not pass
 this straight down to the hardware?
KVM PMU emulation does not talk to HW directly. It creates perf_event to
emulate PMU counter. As far as I see those two will be dropped by
hsw_hw_config() if host HW does not support them.


 
 Don't we have a problem where we're emulating arch perfmon v1 on AMD
 hardware? On AMD hardware those bits do have meaning.
PMU emulation does not support AMD yet.

--
Gleb.
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 06/34] perf, kvm: Support the intx/intx_cp modifiers in KVM arch perfmon emulation v2

2012-10-23 Thread Andi Kleen
 So I forgot how all this worked, but will the KVM emulation not pass
 this straight down to the hardware?

Pass down to perf. 

 
 Don't we have a problem where we're emulating arch perfmon v1 on AMD
 hardware? On AMD hardware those bits do have meaning.

Ah they do? I wasn't aware. I can add a cpuid check for Intel I suppose.

-andi

-- 
a...@linux.intel.com -- Speaking for myself only.
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 06/34] perf, kvm: Support the intx/intx_cp modifiers in KVM arch perfmon emulation v2

2012-10-23 Thread Andi Kleen
On Tue, Oct 23, 2012 at 03:35:27PM +0200, Andi Kleen wrote:
  So I forgot how all this worked, but will the KVM emulation not pass
  this straight down to the hardware?
 
 Pass down to perf. 
 
  
  Don't we have a problem where we're emulating arch perfmon v1 on AMD
  hardware? On AMD hardware those bits do have meaning.
 
 Ah they do? I wasn't aware. I can add a cpuid check for Intel I suppose.

Ah now I remember: I wrote it for the original qualifiers which would
have worked fine for AMD too. It just broke with the raw events you
asked for.

Ok will do the cpuid check to work around this problem.

-Andi


-- 
a...@linux.intel.com -- Speaking for myself only.
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 06/34] perf, kvm: Support the intx/intx_cp modifiers in KVM arch perfmon emulation v2

2012-10-18 Thread Andi Kleen
From: Andi Kleen 

This is not arch perfmon, but older CPUs will just ignore it. This makes
it possible to do at least some TSX measurements from a KVM guest

Cc: a...@redhat.com
v2: Various fixes to address review feedback
Signed-off-by: Andi Kleen 
---
 arch/x86/kvm/pmu.c |   15 +++
 1 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c
index cfc258a..81c1632 100644
--- a/arch/x86/kvm/pmu.c
+++ b/arch/x86/kvm/pmu.c
@@ -160,7 +160,7 @@ static void stop_counter(struct kvm_pmc *pmc)
 
 static void reprogram_counter(struct kvm_pmc *pmc, u32 type,
unsigned config, bool exclude_user, bool exclude_kernel,
-   bool intr)
+   bool intr, bool intx, bool intx_cp)
 {
struct perf_event *event;
struct perf_event_attr attr = {
@@ -173,6 +173,11 @@ static void reprogram_counter(struct kvm_pmc *pmc, u32 
type,
.exclude_kernel = exclude_kernel,
.config = config,
};
+   /* Will be ignored on CPUs that don't support this. */
+   if (intx)
+   attr.config |= HSW_INTX;
+   if (intx_cp)
+   attr.config |= HSW_INTX_CHECKPOINTED;
 
attr.sample_period = (-pmc->counter) & pmc_bitmask(pmc);
 
@@ -239,7 +244,9 @@ static void reprogram_gp_counter(struct kvm_pmc *pmc, u64 
eventsel)
reprogram_counter(pmc, type, config,
!(eventsel & ARCH_PERFMON_EVENTSEL_USR),
!(eventsel & ARCH_PERFMON_EVENTSEL_OS),
-   eventsel & ARCH_PERFMON_EVENTSEL_INT);
+   eventsel & ARCH_PERFMON_EVENTSEL_INT,
+   (eventsel & HSW_INTX),
+   (eventsel & HSW_INTX_CHECKPOINTED));
 }
 
 static void reprogram_fixed_counter(struct kvm_pmc *pmc, u8 en_pmi, int idx)
@@ -256,7 +263,7 @@ static void reprogram_fixed_counter(struct kvm_pmc *pmc, u8 
en_pmi, int idx)
arch_events[fixed_pmc_events[idx]].event_type,
!(en & 0x2), /* exclude user */
!(en & 0x1), /* exclude kernel */
-   pmi);
+   pmi, false, false);
 }
 
 static inline u8 fixed_en_pmi(u64 ctrl, int idx)
@@ -400,7 +407,7 @@ int kvm_pmu_set_msr(struct kvm_vcpu *vcpu, u32 index, u64 
data)
} else if ((pmc = get_gp_pmc(pmu, index, MSR_P6_EVNTSEL0))) {
if (data == pmc->eventsel)
return 0;
-   if (!(data & 0x0020ull)) {
+   if (!(data & 0xfffc0020ull)) {
reprogram_gp_counter(pmc, data);
return 0;
}
-- 
1.7.7.6

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 06/34] perf, kvm: Support the intx/intx_cp modifiers in KVM arch perfmon emulation v2

2012-10-18 Thread Andi Kleen
From: Andi Kleen a...@linux.intel.com

This is not arch perfmon, but older CPUs will just ignore it. This makes
it possible to do at least some TSX measurements from a KVM guest

Cc: a...@redhat.com
v2: Various fixes to address review feedback
Signed-off-by: Andi Kleen a...@linux.intel.com
---
 arch/x86/kvm/pmu.c |   15 +++
 1 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c
index cfc258a..81c1632 100644
--- a/arch/x86/kvm/pmu.c
+++ b/arch/x86/kvm/pmu.c
@@ -160,7 +160,7 @@ static void stop_counter(struct kvm_pmc *pmc)
 
 static void reprogram_counter(struct kvm_pmc *pmc, u32 type,
unsigned config, bool exclude_user, bool exclude_kernel,
-   bool intr)
+   bool intr, bool intx, bool intx_cp)
 {
struct perf_event *event;
struct perf_event_attr attr = {
@@ -173,6 +173,11 @@ static void reprogram_counter(struct kvm_pmc *pmc, u32 
type,
.exclude_kernel = exclude_kernel,
.config = config,
};
+   /* Will be ignored on CPUs that don't support this. */
+   if (intx)
+   attr.config |= HSW_INTX;
+   if (intx_cp)
+   attr.config |= HSW_INTX_CHECKPOINTED;
 
attr.sample_period = (-pmc-counter)  pmc_bitmask(pmc);
 
@@ -239,7 +244,9 @@ static void reprogram_gp_counter(struct kvm_pmc *pmc, u64 
eventsel)
reprogram_counter(pmc, type, config,
!(eventsel  ARCH_PERFMON_EVENTSEL_USR),
!(eventsel  ARCH_PERFMON_EVENTSEL_OS),
-   eventsel  ARCH_PERFMON_EVENTSEL_INT);
+   eventsel  ARCH_PERFMON_EVENTSEL_INT,
+   (eventsel  HSW_INTX),
+   (eventsel  HSW_INTX_CHECKPOINTED));
 }
 
 static void reprogram_fixed_counter(struct kvm_pmc *pmc, u8 en_pmi, int idx)
@@ -256,7 +263,7 @@ static void reprogram_fixed_counter(struct kvm_pmc *pmc, u8 
en_pmi, int idx)
arch_events[fixed_pmc_events[idx]].event_type,
!(en  0x2), /* exclude user */
!(en  0x1), /* exclude kernel */
-   pmi);
+   pmi, false, false);
 }
 
 static inline u8 fixed_en_pmi(u64 ctrl, int idx)
@@ -400,7 +407,7 @@ int kvm_pmu_set_msr(struct kvm_vcpu *vcpu, u32 index, u64 
data)
} else if ((pmc = get_gp_pmc(pmu, index, MSR_P6_EVNTSEL0))) {
if (data == pmc-eventsel)
return 0;
-   if (!(data  0x0020ull)) {
+   if (!(data  0xfffc0020ull)) {
reprogram_gp_counter(pmc, data);
return 0;
}
-- 
1.7.7.6

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/