On Fri, Apr 11, 2025 at 15:58:54 +0200, Cornelia Huck wrote:
> On Fri, Apr 11 2025, Jiri Denemark <jdene...@redhat.com> wrote:
> 
> > On Fri, Apr 11, 2025 at 13:43:39 +0200, Markus Armbruster wrote:
> >> Daniel P. Berrangé <berra...@redhat.com> writes:
> >> > On Fri, Apr 11, 2025 at 12:40:46PM +0200, Markus Armbruster wrote:
> >> >> Daniel P. Berrangé <berra...@redhat.com> writes:
> >> >> > Considering the bigger picture QMP design, when libvirt is trying to
> >> >> > understand QEMU's CPU feature flag expansion, I would ask why we don't
> >> >> > have something like a "query-cpu" command to tell us the current CPU
> >> >> > expansion, avoiding the need for poking at QOM properties directly.
> >> >> 
> >> >> How do the existing query-cpu-FOO fall short of what management
> >> >> applications such as libvirt needs?
> >> >
> >> > It has been along while since I looked at them, but IIRC they were
> >> > returning static info about CPU models, whereas libvirt wanted info
> >> > on the currently requested '-cpu ARGS'
> >> 
> >> Libvirt developers, please work with us on design of new commands or
> >> improvements to existing ones to better meet libvirt's needs in this
> >> area.
> >
> > The existing commands (query-cpu-definitions, query-cpu-model-expansion)
> > are useful for probing before starting a domain. But what we use qom-get
> > for is to get a view of the currently instantiated virtual CPU created
> > by QEMU according to -cpu when we're starting a domain. In other words,
> > we start QEMU with -S and before starting vCPUs we need to know exactly
> > what features were enabled and if any feature we requested was disabled
> > by QEMU. Currently we query QOM for CPU properties as that's what we
> > were advised to use ages ago.
> >
> > The reason behind querying such info is ensuring stable guest ABI during
> > migration. Asking QEMU for a specific CPU model and features does not
> > mean we'll get exactly what we asked for (this is not a bug) so we need
> > to record the differences so that we can start QEMU for incoming
> > migration with a CPU matching exactly the one provided on the source.
> >
> > As Peter said, the current way is terribly inefficient as it requires
> > several hundreds of QMP commands so the goal is to have a single QMP
> > command that would tell us all we need to know about the virtual CPU.
> > That is all enabled features and all features that could not be enabled
> > even though we asked for them.
> 
> Wandering in here from the still-very-much-in-progress Arm perspective
> (current but not yet posted QEMU code at
> https://gitlab.com/cohuck/qemu/-/tree/arm-cpu-model-rfcv3?ref_type=heads):
> 
> We're currently operating at the "writable ID register fields" level
> with the idea of providing features (FEAT_xxx) as an extra layer on top
> (as they model a subset of what we actually need) and have yet to come
> up with a good way to do named models for KVM. The
> query-cpu-model-expansion command will yield a list of all writable ID
> register fields and their values (as for now, for the 'host' model.) IIUC
> you want to query (a) what is actually available for configuration
> (before starting a domain) and (b) what you actually got (when starting
> a domain).

I guess it will be possible for QEMU to actually set something different
from what we tell it to do (for example dependency of a specific
settings on something else which was not set, etc)? If so, we indeed
need both (a) and (b).

> Would a dump of the current state of the ID register fields before
> starting the vcpus work for (b)?

I guess so. Originally for x86_64 we got a dump of CPUID data, but that
changed when some features started to be described by MSRs.

> Or is that too different from what other archs need/want?

Each arch has some specifics in CPU configuration and the way we talk
with QEMU about it. So having the same QMP interface is not a
requirement. It depends how well the existing interface maps to details
that need to be expressed. That said a common interface is better if it
makes sense.

Jirka

Reply via email to