qemu-devel
[Top][All Lists]
Advanced

[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 :|



reply via email to

[Prev in Thread] Current Thread [Next in Thread]