On Thu, Apr 05, 2012 at 03:27:18PM +0300, Avi Kivity wrote: > On 04/04/2012 01:29 PM, Gleb Natapov wrote: > > > > > > > ok. seems to be. will move over to perf as its working fine inside guest. > > > > > Good riddance IMO. I managed to run it on a guest (but not on my > > host!). The thing is buggy. It does not use global ctrl MSR to enable > > counters and kvm has all of them disabled by default. I didn't find what > > value this MSR should have after reset, so this may be either kvm bug or > > real BIOSes enable all counters in global ctrl MSR for PMUv1 > > compatibility. Doing "wrmsr 0x38f 0x70000000f" solves this problem. The > > second problem is that oprofile reprogram PMU counters without > > disabling them first and this is explicitly prohibited by Intel SDM. > > The patch below solve that, but oprofile is the one who should be fixed. > > Both should be fixed, there may be other profilers affected. > Global ctrl msr issue I need to investigate further, but second one is bug that should be fixed in oprofile. Intel spec clearly says: EN (Enable Counters) Flag (bit 22) — When set, performance counting is enabled in the corresponding performance-monitoring counter; when clear, the corresponding counter is disabled. The event logic unit for a UMASK must be disabled by setting IA32_PERFEVTSELx[bit 22] = 0, before writing to IA32_PMCx. I suspect that on real HW they got wrong result too. It simply subtly wrong, so it is not as noticeable as with kvm. > > > > diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c > > index a73f0c1..be05028 100644 > > --- a/arch/x86/kvm/pmu.c > > +++ b/arch/x86/kvm/pmu.c > > @@ -396,6 +396,7 @@ int kvm_pmu_set_msr(struct kvm_vcpu *vcpu, u32 index, u64 data) > > (pmc = get_fixed_pmc(pmu, index))) { > > data = (s64)(s32)data; > > pmc->counter += data - read_pmc(pmc); > > + reprogram_gp_counter(pmc, pmc->eventsel); > > return 0; > > } else if ((pmc = get_gp_pmc(pmu, index, MSR_P6_EVNTSEL0))) { > > if (data == pmc->eventsel) > > > > -- > error compiling committee.c: too many arguments to function -- Gleb. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html