All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: Heiko Carstens <heiko.carstens@de.ibm.com>,
	Karel Zak <kzak@redhat.com>, Paul Mackerras <paulus@au1.ibm.com>
Cc: Ruediger Meier <sweet_f_a@gmx.de>,
	util-linux@vger.kernel.org, Stanislav Brabec <sbrabec@suse.cz>,
	Petr Uzel <petr.uzel@suse.cz>,
	Ben Herrenschmidt <benh@kernel.crashing.org>
Subject: Re: [PATCH 3/5] lscpu: detect OS/400 and pHyp hypervisors
Date: Thu, 22 May 2014 11:30:09 +0200	[thread overview]
Message-ID: <537DC3A1.6000401@suse.de> (raw)
In-Reply-To: <20140522090824.GC4430@osiris>


On 22.05.14 11:08, Heiko Carstens wrote:
> Hi Karel,
>
> I think Alexander Graf (who is kvm on powerpc maintainer) should answer
> how he would like to have it classified.
>
> [full quote below]
>
> On Thu, May 22, 2014 at 10:48:20AM +0200, Karel Zak wrote:
>>   Heiko, can you help us to classify pSeries and iSeries virtualization?
>>   See below. Is it FULL or PARA virtualization? Thanks!
>>
>>      Karel
>>
>> On Thu, May 22, 2014 at 01:03:43AM +0200, Ruediger Meier wrote:
>>>> +	[HYPER_OS400]	= "OS/400",
>>>> +	[HYPER_PHYP]	= "pHyp"
>>>>   };
>>>>   
>>>>   const int hv_vendor_pci[] = {
>>>> @@ -574,6 +577,51 @@ read_hypervisor_cpuid(struct lscpu_desc *desc)
>>>>   static void
>>>>   read_hypervisor_cpuid(struct lscpu_desc *desc __attribute__((__unused__)))
>>>>   {
>>>> +#ifdef __powerpc__
>>>> +	/* powerpc:
>>>> +	 * IBM iSeries: legacy, if /proc/iSeries exists, its para-virtualized on top of OS/400
>>> According to this comment ...
>>>
>>>> +	 * IBM pSeries: always has a hypervisor
>>>> +	 *              if partition-name is "full", its kind of "bare-metal": full-system-partition
>>>> +	 *              otherwise its some partition created by Hardware Management Console
>>>> +	 *              in any case, its always some sort of HVM
>>>> +	 * KVM: "linux,kvm" in /hypervisor/compatible indicates a KVM guest
>>>> +	 * Xen: not in use, not detected
>>>> +	 */
>>>> +	if (path_exist("/proc/iSeries")) {
>>>> +		desc->hyper = HYPER_OS400;
>>>> +		desc->virtype = VIRT_FULL;
>>> ... shouldn't this be VIRT_PARA? Somebody who knows this may correct this.

iSeries is PV, yes. Among others it's also dead :). But I'll let Ben 
comment.

>>>
>>>> +	} else if (path_exist(_PATH_PROC_DEVICETREE "/ibm,partition-name")) {
>>>> +		FILE *fd;
>>>> +		desc->hyper = HYPER_PHYP;
>>>> +		desc->virtype = VIRT_FULL;
>>> Maybe more obvious here for pSeries where p seems to stand for para
>>> http://www.ibm.com/developerworks/aix/library/au-syspvirtualization/index.html?S_TACT=105AGX99&S_CMP=CP

This is slightly more complicated. The ibm,partition-name device tree 
property is defined in sPAPR which is a specification that both pHyp and 
QEMU implement. Right now QEMU does not expose the ibm,partition-name 
property, but there's no reason it will stay that way.

There are a few ways we could try to distinguish QEMU's implementation 
of the pSeries machine and pHyp's implementation of it.

   /proc/device-tree/hmc-managed?

I don't think QEMU will ever implement this property, but at least my 
pHyp reference VM does. If it's there we can use it as a definite marker 
that we are in fact running on pHyp.

   /proc/device-tree/chosen/qemu,graphic-width

Only QEMU puts qemu, properties in the chosen directory. At least the 
current code always sets the graphic-* properties, so if we find one we 
can safely assume we're running on QEMU. We do not know whether we're 
running on KVM yet.

Checking on KVM is slightly more tricky. I think we have 2 options:

   1) Check if /proc/device-tree/cpus/*@0/timebase-frequency is 1000000000.

      If it is, we're emulated (no KVM). If it's not, we're running with 
a native CPU (KVM).

   2) Check whether /proc/device-tree/hypervisor/compatible == "linux,kvm"

     I have a patch in my queue to make the sPAPR compliant pSeries 
machine type in QEMU also ePAPR compliant and expose a /hypervisor node. 
Current versions of QEMU don't do this though, so this would not catch 
QEMU versions < 2.1.

     The nice thing about the ePAPR compliant check is that we'd catch 
non-pSeries machine types as well. We expose this node on all emulated 
Mac machines and on FSL e500 style machines.


Alex

  reply	other threads:[~2014-05-22  9:30 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-20 15:42 [PATCH 0/5] lscpu: improve hypervisor detection Ruediger Meier
2014-05-20 15:42 ` [PATCH 1/5] lscpu: minor cleanup and " Ruediger Meier
2014-05-20 15:42 ` [PATCH 2/5] tests: add vbox lscpu dump Ruediger Meier
2014-05-20 15:42 ` [PATCH 3/5] lscpu: detect OS/400 and pHyp hypervisors Ruediger Meier
2014-05-21  7:37   ` Karel Zak
2014-05-21  9:43     ` Ruediger Meier
2014-05-21 12:41       ` Karel Zak
2014-05-21 23:03   ` Ruediger Meier
2014-05-22  8:48     ` Karel Zak
2014-05-22  9:08       ` Heiko Carstens
2014-05-22  9:30         ` Alexander Graf [this message]
2014-05-28 21:54           ` Ruediger Meier
2014-05-28 22:29             ` Alexander Graf
2014-05-20 15:42 ` [PATCH 4/5] lscpu: improve vmware detection Ruediger Meier
2014-05-20 18:40   ` Ruediger Meier
2014-05-20 15:42 ` [PATCH 5/5] lscpu: avoid compiler warnings Ruediger Meier
2014-05-21  8:10   ` Karel Zak
2014-05-20 16:34 ` [PATCH 0/5] lscpu: improve hypervisor detection Stanislav Brabec
2014-05-20 18:13   ` Ruediger Meier
2014-05-21  8:24   ` Karel Zak
2014-05-21 22:29 ` Ruediger Meier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=537DC3A1.6000401@suse.de \
    --to=agraf@suse.de \
    --cc=benh@kernel.crashing.org \
    --cc=heiko.carstens@de.ibm.com \
    --cc=kzak@redhat.com \
    --cc=paulus@au1.ibm.com \
    --cc=petr.uzel@suse.cz \
    --cc=sbrabec@suse.cz \
    --cc=sweet_f_a@gmx.de \
    --cc=util-linux@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.