On Thu, Apr 05, 2012 at 04:28:48PM +0300, Avi Kivity wrote: > On 04/05/2012 04:26 PM, Gleb Natapov wrote: > > On Thu, Apr 05, 2012 at 03:48:51PM +0300, Avi Kivity wrote: > > > On 04/05/2012 03:37 PM, Gleb Natapov wrote: > > > > 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. > > > > > > > > > > First, there is the standard Linus rant to never break userspace (and > > We broke nothing. Oprofile is broken and never could have worked > > according to Intel spec. (It didn't manage to get any result from it on > > real CPU, but may be this is unrelated). > > But it did work sometime in the past, I've used it. > May be it used NMI based profiling. We should ask oprofile developers. As I said I am almost sure my inability to run it on a host is probably PEBKAC, although I ran the same script exactly on the host and the guest (the script is from the first email of this thread) > > > for us a guest kernel is userspace). Second, the Intel rule may have > > > been added later (as preparation for a change in behaviour), so it may > > > actually work correctly on older hardware. > > > > > May be (the rule is specified for MPUv1 BTW), but we emulate newer HW, > > the one that spec describes and we report this in cpuid leaf 10. I > > highly doubt Intel would change CPU in a way that may make old software > > to work incorrectly on newer cpus. > > The non-architectural PMU is version specific, so they could have made > this change before arch PMU was introduced. > So Table 18-11 section 18.4.4.3 Writing a PEBS Interrupt Service Routine has: For Processors based on Intel Core microarchitecture "Counters MUST be stopped before writing". "Must" is written in all caps in the spec. For NetBurst this is optional. Really, I fail to see how this is not oprofile bug. -- 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