Re: Questing regarding KVM Guest PMU

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Apr 04, 2012 at 03:49:42PM +0530, shashank rachamalla wrote:
> tatus: RO
> Content-Length: 2989
> Lines: 79
> 
> On Wed, Apr 4, 2012 at 12:34 PM, Gleb Natapov <gleb@xxxxxxxxxx> wrote:
> > On Wed, Apr 04, 2012 at 12:24:17AM +0530, shashank rachamalla wrote:
> >> On Wed, Apr 4, 2012 at 12:13 AM, shashank rachamalla
> >> <shashank.rachamalla@xxxxxxxxx> wrote:
> >> > On Tue, Apr 3, 2012 at 10:28 PM, Gleb Natapov <gleb@xxxxxxxxxx> wrote:
> >> >> On Tue, Apr 03, 2012 at 07:20:04PM +0530, shashank rachamalla wrote:
> >> >>> On Mon, Mar 19, 2012 at 12:37 PM, Gleb Natapov <gleb@xxxxxxxxxx> wrote:
> >> >>> > On Mon, Mar 19, 2012 at 12:20:30PM +0530, shashank rachamalla wrote:
> >> >>> >> On Sun, Mar 18, 2012 at 10:21 PM, Gleb Natapov <gleb@xxxxxxxxxx> wrote:
> >> >>> >> > On Sun, Mar 18, 2012 at 09:47:55PM +0530, shashank rachamalla wrote:
> >> >>> >> >> >> I guess things are working fine with perf. But why not with oprofile ?
> >> >>> >> >> >>
> >> >>> >> >> > Looks like it. I never tried oprofile. Will try to reproduce your
> >> >>> >> >> > problem and see what oprofile is doing.
> >> >>> >> >>
> >> >>> >> >> I am using ubuntu 10.04 with 2.6.32-21-generic kernel as guest and
> >> >>> >> >> oprofile 0.9.6.
> >> >>> >> >> Also, I have tried to capture kvm-events ( perf patch ) in host while
> >> >>> >> >> running oprofile and perf in guest.
> >> >>> >> >> Please see the attachment. I have run the tests in three cases for the
> >> >>> >> >> around 5 secs.
> >> >>> >> >>
> >> >>> >> >> There are more number of MSR reads and writes in case of perf which I
> >> >>> >> >> think is normal. However, there are very few MSR reads and writes with
> >> >>> >> >> oprofile. Also, the number of NMI exceptions are too high in case of
> >> >>> >> >> oprofile.
> >> >>> >> >>
> >> >>> >> > Which host kernel are you using? Try latest kvm.git and check if you see
> >> >>> >> > something unusual in dmesg.
> >> >>> >>
> >> >>> >> Currenly running 3.3.0-rc5. will try with the latest source from kvm
> >> >>> >> git and let you know.
> >> >>> >>
> >> >>> >>
> >> >>> > Thanks, there were some fixes that didn't make it into 3.3. rdpmc
> >> >>> > instruction emulation fix is one of them. If oprofile uses it this can
> >> >>> > explain the problem.
> >> >>> >
> >> >>> I have tried with latest kvm source from git and also with 3.0 guest
> >> >>> kernel but oprofile fails to collect any samples on guest. I am using
> >> >>> a core2duo processor which is considered by oprofile as pentium pro
> >> >>> model.
> >> >>>
> >> >> core2duo on the host or the guest? What is your qemu command line?
> >> >>
> >> > both. qemu command line below.
> >> > sudo /usr/local/bin/qemu-system-x86_64 -drive
> >> > file=vdisk1.img,if=virtio -cpu host -m 2000 -net nic,model=virtio -net
> >> > user
> >> >
> >>
> >> please find more info ( /proc/cpuinfo and uname of both host and guest
> >> ) in attached files.
> >>
> > oprofile does not work for me even on the host. After trying to use it I can
> > see why perf was written in the first place.
> >
> 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.

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)

--
			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


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux