Re: [PATCH 06/34] perf, kvm: Support the intx/intx_cp modifiers in KVM arch perfmon emulation v2
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
> 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
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
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
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
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
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
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
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
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/