[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH RFC 0/7] Making QOM introspectable
From: |
Daniel P. Berrange |
Subject: |
Re: [Qemu-devel] [PATCH RFC 0/7] Making QOM introspectable |
Date: |
Wed, 2 Sep 2015 10:05:39 +0100 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
Ping, any thoughts on this....
On Wed, Aug 26, 2015 at 01:03:07PM +0100, Daniel P. Berrange wrote:
> There are many problems in QEMU related to introspection
> of features, which Markus has been attacking/slaying for
> a while. One of the remaining elephants in the corner of
> the room which I've not seen work on is QOM.
>
> QOM has a nice class/object framework, kind of like GLib's
> GObject, but with the difference that properties are
> registered against objects rather than classes. IIRC the
> rationale for this is that in some cases the properties
> registered are going to be dynamically decided at runtime,
> so it isn't possible to statically define them against
> classes. Now this may well be true of some properties,
> but there are equally plenty of cases where the properties
> /are/ invariant and could be registered against classes.
>
> There are two core problems with registering properties
> against object instances:
>
> - It is wasteful of memory to duplicate the allocation
> of ObjectProperty structs against each object
> instance. When you have N object instances, you
> have O(N) memory usage, instead of O(1). This is not
> a problem for objects which are mostly singletons,
> but there are cases in QEMU where you instantiate
> many instances of the same class and/or have many
> properties.
>
> - It prevents static introspection. Since the property
> is only registered in the object initializer, there
> is no way to programmatically query what properties
> an object supports without first instantiating it.
> Taking machine types as an example, if you want to
> introspect every machine type supported by a QEMU
> binary you thus have to launch QEMU many times,
> passing a different -M argument each time. As the
> number of different machine types & objects
> increases this quickly becomes impractical.
>
> This series thus extends QOM to make it possible to register
> properties against the classes, in addition to against object
> instances. When looking up a property, a search will be done
> starting at the base class, then each subclass in turn, and
> finally against the object. Names are enforced to be unique
> across the parent classes for sanity.
>
> This only currently supports simple scalar properties where
> the actual property value storage is managed by the object
> instance. The object child and object link properties use
> implicit storage in the ObjectProperty struct's 'opaque'
> field, so we can't allow those against the class. Solving
> this is doable, but more work, so is left as an exercise
> for the future.
>
> The first patch adds the neccessary QOM functionality. The
> following 6 patches then illustrate the fairly trivial
> conversions of a bunch of objects.
>
> The eventual goal ought to be that everything is registered
> against the class, leaving only the (hopefully few) cases
> where per-instance properties are truely needed unconverted.
>
> This series doesn't attempt to implement introspection
> either - this would require a new QMP command such as
> 'qom-list-type-props' to query the properties against
> classes.
>
> I'm not really planning to spend much more time on this
> myself. I'm just using this series to illustrate how I
> believe the introspection problem in QOM can be fairly
> easily addressed. Hopefully this will stimulate some
> discussion & interest in doing the full job....
>
> Daniel P. Berrange (7):
> qom: allow properties to be registered against classes
> hostmem: register properties against the class instead of object
> rng: register properties against the class instead of object
> tpm: register properties against the class instead of object
> cpu: avoid using object instance state in property getter
> x86-cpu: register properties against the class instead of object
> machine: register properties against the class instead of object
>
> backends/hostmem-file.c | 26 +++---
> backends/hostmem.c | 41 ++++-----
> backends/rng-egd.c | 12 +--
> backends/rng-random.c | 10 +--
> backends/rng.c | 14 ++-
> backends/tpm.c | 12 +--
> hw/core/machine.c | 193 +++++++++++++++++++--------------------
> include/qom/object.h | 44 +++++++++
> qom/object.c | 233
> ++++++++++++++++++++++++++++++++++++++++++++++--
> target-i386/cpu.c | 88 +++++++++++-------
> 10 files changed, 476 insertions(+), 197 deletions(-)
>
> --
> 2.4.3
>
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
- Re: [Qemu-devel] [PATCH RFC 0/7] Making QOM introspectable,
Daniel P. Berrange <=