Dan Smith wrote:
AL> Processor revision is an artificial restriction. Just
because
AL> you're going from an AMD rev F to a rev 10 doesn't mean that your
AL> application will stop working. In this particular case, it's
AL> actually pretty unlikely that it would stop working.
What I really meant was something along the lines of the "flags" field
in cpuinfo.
Okay, flags is a subset of the common cpuid features. This is not by
any means exhaustive of the features supported by a particular CPU but
it is a reasonable starting point.
Certainly you can say that it's not safe to migrate to
a processor that doesn't support a superset of the flags from the
source, right?
No, it may be safe. Consider the case where you're migrating from a
core duo to a core solo. This is the same chip with a few things
disabled including VT which will manifest as a lack of the "vmx" flag.
In this case, it's 100% safe to do the migration because a PV guest
cannot use that CPU feature.
Something a bit more tricky is the sse2 flag. Do most VMs really use
sse2? If no application in your VM is using sse2, then you should be
able to migrate from across CPUs that do not support sse2 right?
IMHO, this is not a decision you want to take away from an
administrator. Guiding them and helping them make an informed decision
is not a bad idea but just having a blind boolean isn't going to be all
that helpful.
AL> Further, there are certainly cases where an application could
not
AL> just depend on a feature present in a family but in a particular
AL> model. An obvious example would be the presence of VT on core
AL> duos vs core solos (although that wouldn't be an issue for
AL> guests..).
Are you suggesting that comparing the flags would yield a false
positive?
Yes.
AL> I think it makes sense to separate hard compatibility where
there
AL> *will* be an issue (Xen guests can't migrate to a KVM host)
Right, which could be enforced categorically, without increasing the
"matrix" of possibilities.
AL> and soft compatibility where there *may* be an issue (going from
AL> AMD => Intel). It would probably make sense to make soft
AL> compatibility some sort of threshold too. For instance, it's much
AL> more risky to go from an AMD rev F to a P3 than going from an AMD
AL> rev 10 to a rev F.
Wouldn't a comparison of the flags solve this though? Especially if
each driver can implement its own check... I expect native qemu quests
(i.e. not using kvm) could survive a migration across processor
families, but Xen paravirt guests certainly could not.
KVM guests all (in theory) expose a least-common subset of processor
features unless explicitly told to expose something that's specific to a
processor. Because of this, you can migrate not just across processor
families but from Intel to AMD and vice versa.
In certain circumstances, I do think a Xen PV guest could survive
migrations even across architectures.
AL> Better yet, just ignore soft compatibility altogether and let
AL> higher level tools make that decision :-)
I think the goal is to eliminate the need for every libvirt consumer
to implement the same type of checks and have each implementation be
slightly different. While it certainly won't cover all cases, it
seems like a reasonable thing to do, as long as it's not required to
perform a migration :)
Something that compared systems, and provided specific information about
potential incompatibilities would be useful. Then a higher level piece
of software could pick and choose what it cared about. A boolean
interface is only going to have one happy consumer and that's going to
be whoever decides what the policy should be :-)
Regards,
Anthony Liguori