qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Daniel P. Berrange" <berrange@redhat.com>
To: "Andreas Färber" <afaerber@suse.de>
Cc: qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>
Subject: Re: [Qemu-devel] [PATCH RFC 1/7] qom: allow properties to be registered against classes
Date: Thu, 3 Sep 2015 16:49:52 +0100	[thread overview]
Message-ID: <20150903154952.GK31547@redhat.com> (raw)
In-Reply-To: <55E72154.7070404@suse.de>

On Wed, Sep 02, 2015 at 06:18:28PM +0200, Andreas Färber wrote:
> Am 26.08.2015 um 14:03 schrieb Daniel P. Berrange:
> > When there are many instances of a given class, registering
> > properties against the instance is wasteful of resources. The
> > majority of objects have a statically defined list of possible
> > properties, so most of the properties are easily registerable
> > against the class. Only those properties which are conditionally
> > registered at runtime need be recorded against the klass.
> > 
> > Registering properties against classes also makes it possible
> > to provide static introspection of QOM - currently introspection
> > is only possible after creating an instance of a class, which
> > severely limits its usefulness.
> > 
> > This impl only supports simple scalar properties. It does not
> > attempt to allow child object / link object properties against
> > the class. There are ways to support those too, but it would
> > make this patch more complicated, so it is left as an exercise
> > for the future.
> > 
> > Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> > ---
> >  include/qom/object.h |  44 ++++++++++
> >  qom/object.c         | 233 +++++++++++++++++++++++++++++++++++++++++++++++++--
> >  2 files changed, 270 insertions(+), 7 deletions(-)
> > 
> > diff --git a/include/qom/object.h b/include/qom/object.h
> > index 807978e..068162e 100644
> > --- a/include/qom/object.h
> > +++ b/include/qom/object.h
> > @@ -383,6 +383,8 @@ struct ObjectClass
> >      const char *class_cast_cache[OBJECT_CLASS_CAST_CACHE];
> >  
> >      ObjectUnparent *unparent;
> > +
> > +    QTAILQ_HEAD(, ObjectProperty) properties;
> >  };
> >  
> >  /**
> [snip]
> 
> I had suggested exactly this looong time ago, but Anthony opposed it. I
> don't quite remember why...

It is a while back now so I don't remember all aspects of the discussion
either. The main thing I remember is that we could not simply use the
existing GObject model from glib, since that exclusively records properties
against the object class. In some cases, particularly the relationships
between objects, QEMU needed to be able to define properties on the fly
against object instances.

So that was a definite reason Anthony wanted to have the ability to have
properties against object instances. I don't remember reading anything
about *not* also having the option to define properties against the
object classes. So hopefully this proposal gets us the best of both
worlds - the flexibility of allowing per-instance properties when
needed, along with the reduced memory usage & static introspection
benefits of per-class properties where possible.

> Did you do any benchmarks on performance impact?

I've not done any measurements of impact on CPU time or memory usage.
As mentioned in the intro, I'd expect memory usage to decline significantly
in the case where there are many instances of the same class. Attribute
getter/setters probably have a small CPU hit, due to the need to consult
the linked lists in both the class and object structs. I think that will
be small overall though, and if it is a problem we would probably better
off switching in a hashtable in place of the linked list, so we have
O(1) lookup instead of O(n) lookups.

That all said, I'll try to create a test program to measure these
effects to get some clear numbers to consider.

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	other threads:[~2015-09-03 15:49 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-26 12:03 [Qemu-devel] [PATCH RFC 0/7] Making QOM introspectable Daniel P. Berrange
2015-08-26 12:03 ` [Qemu-devel] [PATCH RFC 1/7] qom: allow properties to be registered against classes Daniel P. Berrange
2015-09-02 16:18   ` Andreas Färber
2015-09-03 15:49     ` Daniel P. Berrange [this message]
2015-09-03 16:37       ` Markus Armbruster
2015-09-03 16:41         ` Andreas Färber
2015-09-03 17:02           ` Markus Armbruster
2015-09-03 17:09             ` Daniel P. Berrange
2015-09-03 17:21               ` Andreas Färber
2015-09-03 17:25                 ` Daniel P. Berrange
2015-09-04  6:56                   ` Markus Armbruster
2015-09-07 12:54                     ` Paolo Bonzini
2015-09-11 16:09     ` Daniel P. Berrange
2015-09-04 21:38   ` Marc-André Lureau
2015-09-07  8:46     ` Daniel P. Berrange
2015-09-07 13:11       ` Andreas Färber
2015-09-07 13:17         ` Daniel P. Berrange
2015-08-26 12:03 ` [Qemu-devel] [PATCH RFC 2/7] hostmem: register properties against the class instead of object Daniel P. Berrange
2015-08-26 12:03 ` [Qemu-devel] [PATCH RFC 3/7] rng: " Daniel P. Berrange
2015-08-26 12:03 ` [Qemu-devel] [PATCH RFC 4/7] tpm: " Daniel P. Berrange
2015-08-26 12:03 ` [Qemu-devel] [PATCH RFC 5/7] cpu: avoid using object instance state in property getter Daniel P. Berrange
2015-08-26 12:03 ` [Qemu-devel] [PATCH RFC 6/7] x86-cpu: register properties against the class instead of object Daniel P. Berrange
2015-08-26 12:03 ` [Qemu-devel] [PATCH RFC 7/7] machine: " Daniel P. Berrange
2015-09-02  9:05 ` [Qemu-devel] [PATCH RFC 0/7] Making QOM introspectable Daniel P. Berrange
2015-09-02 11:14   ` Markus Armbruster
2015-09-02 16:16   ` Andreas Färber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150903154952.GK31547@redhat.com \
    --to=berrange@redhat.com \
    --cc=afaerber@suse.de \
    --cc=armbru@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).