On Tue, Dec 16, 2014 at 02:47:24PM +0000, Daniel P. Berrange wrote:
On Tue, Dec 16, 2014 at 03:37:06PM +0100, Guido Günther wrote:
> On Tue, Dec 16, 2014 at 12:40:26PM +0000, Daniel P. Berrange wrote:
> > On Tue, Dec 16, 2014 at 01:33:15PM +0100, Guido Günther wrote:
> > > The intel-microcode 3.20140913.1 update disables TSX-NI (transactional
> > > memory instructions). When a server running libvirt is rebooted with
> > > this update, libvirt no longer considers the machine to have a Haswell
> > > CPU:
> > >
> > > # virsh capabilities | grep -A1 '<arch>x86_64'
> > > <arch>x86_64</arch>
> > > <model>SandyBridge</model>
> > >
> > > Since Intel disables the feature on their CPUs we shouldn't check for
it
> > > as well to keep VMs using Haswell working.
> > >
> > > This was debugged and reported by Chris Boot at
> > >
http://bugs.debian.org/773189
> > > ---
> > > src/cpu/cpu_map.xml | 1 -
> > > 1 file changed, 1 deletion(-)
> > >
> > > diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml
> > > index bd9b056..f41dbce 100644
> > > --- a/src/cpu/cpu_map.xml
> > > +++ b/src/cpu/cpu_map.xml
> > > @@ -507,7 +507,6 @@
> > > <feature name='movbe'/>
> > > <feature name='fsgsbase'/>
> > > <feature name='bmi1'/>
> > > - <feature name='hle'/>
> > > <feature name='avx2'/>
> > > <feature name='smep'/>
> > > <feature name='bmi2'/>
> >
> > NACK. We can not change existing models in cpu_map.xml because that
> > results in a guest ABI change.
>
> But Intel changed the ABI as well by removing hle so what would we do
> to move forward? Introduce another model? This would still break
> systems with the microcode update.
Simply do nothing. There is no requirement that guest CPU model names
match the host CPU you are running on. A guest CPU model name is simply
a synonym for a collection of features. If libvirt reports 'SandyBridge'
for the host CPU model, when it is in fact 'Hasmere' that's not a serious
problem, because the key fact is that the feature bits are correctly
detected regardless of what name is reported.
But this means that VMs that have e.g.
<cpu mode='custom' match='exact'>
<model fallback='forbid'>Haswell</model>
<vendor>Intel</vendor>
...
</cpu>
refuse to start after the microcode upgrade like
error: Failed to start domain foo
error: unsupported configuration: guest and host CPU are not compatible: Host CPU does
not provide required features: hle
Following your argument this makes a lot of sense since the feature
isn't in the set of supported features anymore. From a users
perspective it's confusing since they have a Haswell CPU built in
still. So should we define a Haswell2 cpu type without hle so users
can select it in case they don't want to use 'host-model'?
Cheers,
-- Guido