On 05/24/2013 10:12 AM, Michael S. Tsirkin wrote: >>>>> >>>>> Event message contains the net client name, management might only want >>>>> to query the single net client. >>>> >>>> The client can do the filtering itself. >>> >> I'm not sure I buy the responsiveness argument. Sure, the fastest I/O >> is no I/O, but whether you read and parse 100 bytes or 1000 from a Unix >> domain socket once in a great while shouldn't make a difference. And the time spent malloc'ing the larger message to send from qemu, as well as the time spent malloc'ing the libvirt side that parses the qemu string into C code for use, and the time spent strcmp'ing every entry to find the right one... It really IS more efficient to filter as low down in the stack as possible, once it is determined that filtering is desirable. Whether filtering makes a difference in performance is a different question - you may be right that always returning the entire list and making libvirt do its own filtering will still not add any more noticeable delay compared to libvirt doing a filtered query, if the bottleneck lies elsewhere (such as libvirt telling macvtap its new configration). >> >> My main concern is to keep the external interface simple. I'm rather >> reluctant to have query commands grow options. >> >> In a case where we need the "give me everything" query anyway, the "give >> me this particular part" option is additional complexity. Needs >> justification, say arguments involving throughput, latency or client >> complexity. >> >> Perhaps cases exist where we never want to ask for everything. Then the >> "give me everything" query is useless, and the option should be >> mandatory. For this _particular_ interface, I'm not sure whether libvirt will ever use an unfiltered query - that is, the rx-filter query will probably always be invoked in response to an event, at which point libvirt only cares about the filter status of the nic named in the event. And ultimately libvirt knows what nics it passed to the guest, so even if there isn't a global query and I guessed wrong about libvirt never wanting all state at once, it would still be possible for libvirt to iterate over one query per nic. On the other hand, consistency with other query-* QMP commands says that most of them return as much information as possible all the time, and generally libvirt likes this - even the newly-added query-command-line-options has a filtering option, but current libvirt.git only uses it once in global mode rather than once-per-option in filtered mode. > > We need the query for macvtap devices. We don't need it > for tap devices. In that case you don't want tap device info. > > Maybe some libvirt guys can tell us whether they prefer > a per device query or a global one with info for all NICs? Libvirt can cope either way. I personally like the idea of allowing both global and filtered queries, without second-guessing what management apps will prefer to use, and don't think filtering adds that much complexity. But if you want to insist on avoiding filtering, I'd rather have a global query than a mandatory name argument, for consistency with other query-* commands, even if libvirt then ends up doing its own filtering. If we get introspection into qemu 1.6 at the same time as the new query for rx-filters, it really won't matter whether you start with global-only or mandatory name-only; either way, if we change our mind and add the other mode in qemu 1.7, libvirt will still be able to use introspection to determine whether the argument is present in one direction (going from global-only to optional filtering), or whether the argument has been made optionl in the other direction (going from mandatory name to optional global). > I think for HMP it's best to have nic optional. This is true, no matter what we decide for QMP. > Is it a good idea to make QMP match HMP closely? QMP has to provide enough information for HMP to do its job. How will HMP do global listing if QMP doesn't provide a way to get all the devices at once? Remember, libvirt knows what devices it told qemu to create, but I don't know that HMP has the same visibility into the list of possible devices that can be queried. So you may need a global mode to begin with. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list