[PATCH] docs: fix typo in domcaps host-model CPU description

Jiri Denemark jdenemar at redhat.com
Tue Mar 24 09:44:42 UTC 2020


On Mon, Mar 23, 2020 at 15:47:49 -0600, Jim Fehlig wrote:
> The domain capabilities documentation contains a small but confusing
> error in the host-model CPU description, referencing the element <mode>
> instead of <model>. Fix this small typo.
> 
> Signed-off-by: Jim Fehlig <jfehlig at suse.com>
> ---
> 
> I only found this small typo (well, I'm pretty sure it's a typo :-)) by
> tring to understand a more confusing observation. On a machine where
> capabilities reports CascaseLake-Server, domcapabilities reports
> 
>     <mode name='host-model' supported='yes'>
>       <model fallback='forbid'>Cascadelake-Server</model>
>       <vendor>Intel</vendor>
>       <feature policy='require' name='ss'/>
>       <feature policy='require' name='hypervisor'/>
>       <feature policy='require' name='tsc_adjust'/>
>       <feature policy='require' name='umip'/>
>       <feature policy='require' name='pku'/>
>       <feature policy='require' name='md-clear'/>
>       <feature policy='require' name='stibp'/>
>       <feature policy='require' name='arch-capabilities'/>
>       <feature policy='require' name='xsaves'/>
>       <feature policy='require' name='invtsc'/>
>     </mode>
>     <mode name='custom' supported='yes'>
>       ...
>       <model usable='no'>Cascadelake-Server</model>
>     </mode>
> 
> So using host-model will result in a CascadeLake-Server CPU, but it
> is not supported when specifying a custom CPU? Interestingly, I see
> something similar from domcapabilities on machine where capabilities
> reports Skylake-Server-IBRS
> 
>     <mode name='host-model' supported='yes'>
>       <model fallback='forbid'>Cascadelake-Server</model>
>       <vendor>Intel</vendor>
>       <feature policy='require' name='ss'/>
>       <feature policy='require' name='hypervisor'/>
>       <feature policy='require' name='tsc_adjust'/>
>       <feature policy='require' name='umip'/>
>       <feature policy='require' name='md-clear'/>
>       <feature policy='require' name='stibp'/>
>       <feature policy='require' name='arch-capabilities'/>
>       <feature policy='require' name='xsaves'/>
>       <feature policy='require' name='invtsc'/>
>       <feature policy='disable' name='pku'/>
>       <feature policy='disable' name='avx512vnni'/>
>     </mode>
>     <mode name='custom' supported='yes'>
>       ...
>       <model usable='no'>Skylake-Server-IBRS</model>
>       <model usable='no'>Skylake-Server</model>
>       <model usable='no'>Cascadelake-Server</model>
>     </mode>
> 
> This seems contradictory to me but perhaps I'm overlooking something?

The usable=yse|no attribute says whether a given CPU model can be
provided to a guest without any modification. That is whether you can
use
        <cpu mode='custom' match='exact'>
          <model fallback='forbid'>Cascadelake-Server</model>
        </cpu>

When usable='no', QEMU will need to disable some of the features that
are part of the Cascadelake-Server CPU model. In other words, the CPU
model is not usable as is.

On the other hand, the <mode name='host-model'> element in domain
capabilities describes the CPU used as a host-model CPU by adding or
removing some specific features. In other words, while using the simple
CPU definition mentioned above would cause QEMU to drop some features,
using a more verbose

      <cpu mode='custom' match='exact'>
        <model fallback='forbid'>Cascadelake-Server</model>
        <vendor>Intel</vendor>
        <feature policy='require' name='ss'/>
        <feature policy='require' name='hypervisor'/>
        <feature policy='require' name='tsc_adjust'/>
        <feature policy='require' name='umip'/>
        <feature policy='require' name='md-clear'/>
        <feature policy='require' name='stibp'/>
        <feature policy='require' name='arch-capabilities'/>
        <feature policy='require' name='xsaves'/>
        <feature policy='require' name='invtsc'/>
        <feature policy='disable' name='pku'/>
        <feature policy='disable' name='avx512vnni'/>
      </cpu>

explicitly asks QEMU to disable pku and avx512vnni features and thus
QEMU will not have to disable anything.

The situation on the first machine is a bit strange as there are no
features disabled in host-model CPU definition, which makes it unclear
why QEMU reports Cascadelake-Server as unusable (QEMU reports the
reason, but we don't do so yet).

Anyway, would you mind running the tests/cputestdata/cpu-gather.sh
script on both machines (make sure to install qemu, python3, and cpuid
packages first) and send us the output so that we can check the CPU
models are properly detected?

>  docs/formatdomaincaps.html.in | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/docs/formatdomaincaps.html.in b/docs/formatdomaincaps.html.in
> index 66e758501b..7fd1f91f73 100644
> --- a/docs/formatdomaincaps.html.in
> +++ b/docs/formatdomaincaps.html.in
> @@ -232,7 +232,7 @@
>        <dt><code>host-model</code></dt>
>        <dd>
>          If <code>host-model</code> is supported by the hypervisor, the
> -        <code>mode</code> describes the guest CPU which will be used when
> +        <code>model</code> describes the guest CPU which will be used when
>          starting a domain with <code>host-model</code> CPU. The hypervisor
>          specifics (such as unsupported CPU models or features, machine type,
>          etc.) may be accounted for in this guest CPU specification and thus

As strange as it seems, there's no typo. The <model> element describes
just a small part of the whole CPU. There are additional <vendor> and
<feature> elements which also belong to the CPU definition. All these
elements are children of the <mode> element and thus the <mode> element
describes the guest CPU. Yes, this is not the best design and having an
entire <cpu> element rather than its children in the
<mode name='host-model' supported='yes'> element would be better, but we
can't really do anything about it now.

Jirka




More information about the libvir-list mailing list