* Michal Privoznik (mprivozn@xxxxxxxxxx) wrote: > On 3/4/19 3:24 PM, Daniel P. Berrangé wrote: > > On Mon, Mar 04, 2019 at 03:16:41PM +0100, Igor Mammedov wrote: > > > On Mon, 4 Mar 2019 12:39:08 +0000 > > > Daniel P. Berrangé <berrange@xxxxxxxxxx> wrote: > > > > > > > On Mon, Mar 04, 2019 at 01:25:07PM +0100, Igor Mammedov wrote: > > > > > On Mon, 04 Mar 2019 08:13:53 +0100 > > > > > Markus Armbruster <armbru@xxxxxxxxxx> wrote: > > > > > > Daniel P. Berrangé <berrange@xxxxxxxxxx> writes: > > > > > > > On Fri, Mar 01, 2019 at 06:33:28PM +0100, Igor Mammedov wrote: > > > > > > > > On Fri, 1 Mar 2019 15:49:47 +0000 > > > > > > > > Daniel P. Berrangé <berrange@xxxxxxxxxx> wrote: > > > > > > > > > On Fri, Mar 01, 2019 at 04:42:15PM +0100, Igor Mammedov wrote: > > > > > > > > > > The parameter allows to configure fake NUMA topology where guest > > > > > > > > > > VM simulates NUMA topology but not actually getting a performance > > > > > > > > > > benefits from it. The same or better results could be achieved > > > > > > > > > > using 'memdev' parameter. In light of that any VM that uses NUMA > > > > > > > > > > to get its benefits should use 'memdev' and to allow transition > > > > > > > > > > initial RAM to device based model, deprecate 'mem' parameter as > > > > > > > > > > its ad-hoc partitioning of initial RAM MemoryRegion can't be > > > > > > > > > > translated to memdev based backend transparently to users and in > > > > > > > > > > compatible manner (migration wise). > > > > > > > > > > > > > > > > > > > > That will also allow to clean up a bit our numa code, leaving only > > > > > > > > > > 'memdev' impl. in place and several boards that use node_mem > > > > > > > > > > to generate FDT/ACPI description from it. > > > > > > > > > > > > > > > > > > Can you confirm that the 'mem' and 'memdev' parameters to -numa > > > > > > > > > are 100% live migration compatible in both directions ? Libvirt > > > > > > > > > would need this to be the case in order to use the 'memdev' syntax > > > > > > > > > instead. > > > > > > > > Unfortunately they are not migration compatible in any direction, > > > > > > > > if it where possible to translate them to each other I'd alias 'mem' > > > > > > > > to 'memdev' without deprecation. The former sends over only one > > > > > > > > MemoryRegion to target, while the later sends over several (one per > > > > > > > > memdev). > > > > > > > > > > > > > > If we can't migration from one to the other, then we can not deprecate > > > > > > > the existing 'mem' syntax. Even if libvirt were to provide a config > > > > > > > option to let apps opt-in to the new syntax, we need to be able to > > > > > > > support live migration of existing running VMs indefinitely. Effectively > > > > > > > this means we need the to keep 'mem' support forever, or at least such > > > > > > > a long time that it effectively means forever. > > > > > > > > > > > > > > So I think this patch has to be dropped & replaced with one that > > > > > > > simply documents that memdev syntax is preferred. > > > > > > > > > > > > We have this habit of postulating absolutes like "can not deprecate" > > > > > > instead of engaging with the tradeoffs. We need to kick it. > > > > > > > > > > > > So let's have an actual look at the tradeoffs. > > > > > > > > > > > > We don't actually "support live migration of existing running VMs > > > > > > indefinitely". > > > > > > > > > > > > We support live migration to any newer version of QEMU that still > > > > > > supports the machine type. > > > > > > > > > > > > We support live migration to any older version of QEMU that already > > > > > > supports the machine type and all the devices the machine uses. > > > > > > > > > > > > Aside: "support" is really an honest best effort here. If you rely on > > > > > > it, use a downstream that puts in the (substantial!) QA work real > > > > > > support takes. > > > > > > > > > > > > Feature deprecation is not a contract to drop the feature after two > > > > > > releases, or even five. It's a formal notice that users of the feature > > > > > > should transition to its replacement in an orderly manner. > > > > > > > > > > > > If I understand Igor correctly, all users should transition away from > > > > > > outdated NUMA configurations at least for new VMs in an orderly manner. > > > > > Yes, we can postpone removing options until there are machines type > > > > > versions that were capable to use it (unfortunate but probably > > > > > unavoidable unless there is a migration trick to make transition > > > > > transparent) but that should not stop us from disabling broken > > > > > options on new machine types at least. > > > > > > > > > > This series can serve as formal notice with follow up disabling of > > > > > deprecated options for new machine types. (As Thomas noted, just warnings > > > > > do not work and users continue to use broken features regardless whether > > > > > they are don't know about issues or aware of it [*]) > > > > > > > > > > Hence suggested deprecation approach and enforced rejection of legacy > > > > > numa options for new machine types in 2 releases so users would stop > > > > > using them eventually. > > > > > > > > When we deprecate something, we need to have a way for apps to use the > > > > new alternative approach *at the same time*. So even if we only want to > > > > deprecate for new machine types, we still have to first solve the problem > > > > of how mgmt apps will introspect QEMU to learn which machine types expect > > > > the new options. > > > I'm not aware any mechanism to introspect machine type options (existing > > > or something being developed). Are/were there any ideas about it that were > > > discussed in the past? > > > > > > Aside from developing a new mechanism what are alternative approaches? > > > I mean when we delete deprecated CLI option, how it's solved on libvirt > > > side currently? > > > > > > For example I don't see anything introspection related when we have been > > > removing deprecated options recently. > > > > Right, with other stuff we deprecate we've had a simpler time, as it > > either didn't affect migration at all, or the new replacement stuff > > was fully compatible with the migration data stream. IOW, libvirt > > could unconditionally use the new feature as soon as it saw that it > > exists in QEMU. We didn't have any machine type dependancy to deal > > with before now. > > We couldn't have done that. How we would migrate from older qemu? > > Anyway, now that I look into this (esp. git log) I came accross: > > commit f309db1f4d51009bad0d32e12efc75530b66836b > Author: Michal Privoznik <mprivozn@xxxxxxxxxx> > AuthorDate: Thu Dec 18 12:36:48 2014 +0100 > Commit: Michal Privoznik <mprivozn@xxxxxxxxxx> > CommitDate: Fri Dec 19 07:44:44 2014 +0100 > > qemu: Create memory-backend-{ram,file} iff needed > > Or this 7832fac84741d65e851dbdbfaf474785cbfdcf3c. We did try to generated > newer cmd line but then for various reasong (e.g. avoiding triggering a qemu > bug) we turned it off and make libvirt default to older (now deprecated) cmd > line. > > Frankly, I don't know how to proceed. Unless qemu is fixed to allow > migration from deprecated to new cmd line (unlikely, if not impossible, > right?) then I guess the only approach we can have is that: > > 1) whenever so called cold booting a new machine (fresh, brand new start of > a new domain) libvirt would default to modern cmd line, > > 2) on migration, libvirt would record in the migration stream (or status XML > or wherever) that modern cmd line was generated and thus it'll make the > destination generate modern cmd line too. > > This solution still suffers a couple of problems: > a) migration to older libvirt will fail as older libvirt won't recognize the > flag set in 2) and therefore would default to deprecated cmd line > b) migrating from one host to another won't modernize the cmd line > > But I guess we have to draw a line somewhere (if we are not willing to write > those migration patches). What's interesting here is that this problem isn't really machine-type related; so providing introspection on the machine type doesn't immediately help. What we're actually trying to do here is (mis)use a machine type as a proxy for knowing that both sides are new enough to handle the new command line. That's an OK thing to do, and if we did have introspection we could add a fudge flag to say it's allowed now. Dave > Michal -- Dr. David Alan Gilbert / dgilbert@xxxxxxxxxx / Manchester, UK -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list