On Tue, Jun 17, 2014 at 5:36 AM, George Dunlap <dunlapg@umich.edu> wrote:
On Thu, Jun 12, 2014 at 11:23 PM, Karl Johnson <karljohnson.it@gmail.com> wrote:
> Hello,
>
> I am running two dom0s, one on CentOS 5 with Xen 4.1.2 (from Gitco) and the
> other one on CentOS 6 with Xen 4.2.4 (from Xen4CentOS). I host one LVM based
> domU on both from the same template (CentOS 6 PV) with the same Xen config
> (see below). However, the domU on Xen 4.1 reports itself as Xen PV while the
> domU on Xen4CentOS reports itself as Xen HVM.
>
>
> == First domU ==
>
> virt-what and cPanel scripts report domU as: xenpv
>
> dom0: 2.6.18-371.6.1.el5xen Xen 4.1.2
>
> domU Config:
>
> bootloader = '/usr/bin/pygrub'
> extra      = ''
> memory     = 6144
> hostname   = 'web2.x.ca'
> cpu_weight = 256
> name       = 'vm115'
> vif        = ['ip=205.X.X.X, vifname=vifvm115.0, mac=00:16:3e:7a:X:X']
> vnc        = 0
> vcpus      = 6
> vncviewer  = 0
> serial     = 'pty'
> disk       = ['phy:/dev/xen/vm115_img,xvda1,w',
> 'phy:/dev/xen/vm115_swap,xvda2,w']
>
> domU kernel: 2.6.32-431.5.1.el6.x86_64
>
> root@web2 [~]# virt-what
> xen
> root@web2 [~]#
>
>
>
> == Second domU ==
>
> virt-what and cPanel scripts report domU as: xenhvm
>
> dom0: 3.10.32-11.el6.centos.alt.x86_64  Xen 4.2.4-29.el6
>
> domU Config:
>
> bootloader = '/usr/bin/pygrub'
> extra      = ''
> memory     = 6144
> hostname   = 'web3.x.ca'
> cpu_weight = 256
> name       = 'vm116'
> vif        = ['ip=205.X.X.X, vifname=vifvm116.0, mac=00:16:3e:cf:X:X']
> vnc        = 0
> vcpus      = 6
> vncviewer  = 0
> serial     = 'pty'
> disk       = ['phy:/dev/xen/vm116_img,xvda1,w',
> 'phy:/dev/xen/vm116_swap,xvda2,w']
>
> domU kernel: 2.6.32-431.5.1.el6.x86_64
>
> root@web3 [~]# virt-what
> xen
> xen-hvm
> root@web3 [~]#
>
> Any idea why?

A lot of these tools use quirks of the hypervisor to detect these
kinds of changes.  One such quirk in Xen PV is handling of the CPUID
instruction: normally there's no way to trap the CPUID instruction in
PV mode, so Xen introduced a special PV CPUID (which is just an
illegal instruction that Xen recognizes and emulates itself)  that the
kernel is supposed to use instead; but that's an opt-in thing -- you
can still execute the normal CPUID.  By executing the PV CPUID and the
normal CPUID and comparing the results, you can tell if you're in a PV
or an HVM VM.

However, on recent architectures Intel has introduced functionality to
allow trapping os CPUID even in non-HVM mode.  Support for this went
into 4.2.  Now, if you have the right hardware, and the right Xen
version, you'll get the same results whether you execute the PV CPUID
or the native one.

So virt-what's trick of comparing the two CPUID results to determine
if you're in a PV or an HVM domain doesn't work anymore.

 -George

Thanks for the reply George. Is there any other easy way in the domU to know if it's a pv or hvm with Xen 4.2+ and the right hardware?

Karl