[libvirt] [PATCH 1/3] qemu: add capability for vhost-net busy polling

Eduardo Habkost ehabkost at redhat.com
Sun Jun 18 03:15:16 UTC 2017

(CCing qemu-devel and the QAPI maintainers.  I have a question
about introspection below.)

On Sat, Jun 17, 2017 at 11:48:10AM -0400, Laine Stump wrote:
> > +    /* Support for busy polling on vhost-net devices ("-netdev
> > +     * tap,...,poll-us=n") */
> > +    if (qemuCaps->version >= 2007000)
> > +        virQEMUCapsSet(qemuCaps, QEMU_CAPS_VHOST_NET_POLL_US);
> > +
> Enabling a capability based purely on the qemu binary version is
> something that's only done as a last resort if it can't be determined by
> QMP probes. This is because the version number is an inaccurate
> indicator - it often happens that a new capability is added to upstream
> in qemu version "Y", but then that feature is backported to qemu version
> "X" in some downstream distro package; if we based the capability on
> version number, then libvirt wouldn't take advantage of the feature even
> though qemu had it.
> What *should* get us the info we need is to add a table entry to
> virQEMUCapsCommandLine to check whether or not the poll-us option exists
> in the current qemu binary. Something like this:
> static struct virQEMUCapsCommandLineProps virQEMUCapsCommandLine[] = {
>     ...
>     { "netdev", "poll-us", QEMU_CAPS_NETDEV_POLL_US },
> Unfortunately when I add that and regenerate the .replies file for qemu
> 2.9.0 (with the command "tests/qemucapsprobe
> /usr/bin/qemu-system-x86_64"), this is the info it finds for netdev:
>     {
>       "parameters": [
>       ],
>       "option": "netdev"
>     },
> My understanding was that the possible parameters to the netdev
> commandline option should be listed, but instead the parameters list is
> empty :-/.
> Maybe Eduardo can help me understand why the parameters are empty, and
> (more importantly) what needs to be done to get the supported parameters
> for -netdev - basically we need to know what are the available
> parameters to "-netdev tap,...". I hope we don't end up needing to base
> the check purely on qemu version.

query-command-line-options is incomplete and useless on many
cases (including but not limited to -device, -object, and
-netdev).  It is not capable to model cases where the set of
accepted options depends on a discriminator option (e.g. a
"driver" or "type" option).

Fortunately, netdev options are modelled in the QAPI schema as
union Netdev.  However, 'query-qmp-schema' doesn't seem to
include union Netdev because it is not referenced by any QMP
command or event.

Markus, Eric, Michael: is there any way libvirt can query the
definition of union Netdev from the schema with current QEMU?


More information about the libvir-list mailing list