qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 11/15] qom: use mmap for bigger Objects


From: Daniel P. Berrange
Subject: Re: [Qemu-devel] [PATCH 11/15] qom: use mmap for bigger Objects
Date: Tue, 28 Jun 2016 11:08:03 +0100
User-agent: Mutt/1.6.1 (2016-04-27)

On Tue, Jun 28, 2016 at 11:01:35AM +0200, Peter Lieven wrote:
> Signed-off-by: Peter Lieven <address@hidden>
> ---
>  include/qom/object.h |  1 +
>  qom/object.c         | 20 +++++++++++++++++---
>  2 files changed, 18 insertions(+), 3 deletions(-)
> 
> diff --git a/include/qom/object.h b/include/qom/object.h
> index 2f8ac47..c612f3a 100644
> --- a/include/qom/object.h
> +++ b/include/qom/object.h
> @@ -400,6 +400,7 @@ struct Object
>      GHashTable *properties;
>      uint32_t ref;
>      Object *parent;
> +    size_t instance_size;

This is not required....

>  };
>  
>  /**
> diff --git a/qom/object.c b/qom/object.c
> index 9743ea4..203162b 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -15,6 +15,7 @@
>  #include "qom/object.h"
>  #include "qom/object_interfaces.h"
>  #include "qemu/cutils.h"
> +#include "qemu/mmap-alloc.h"
>  #include "qapi/visitor.h"
>  #include "qapi-visit.h"
>  #include "qapi/string-input-visitor.h"
> @@ -453,6 +454,12 @@ static void object_deinit(Object *obj, TypeImpl *type)
>      }
>  }
>  
> +static void object_munmap(void *opaque)
> +{
> +    Object *obj = opaque;
> +    qemu_anon_ram_munmap(obj, obj->instance_size);

...since you have an Object pointer, you can get the corresponding
Type,  obj->class->type, and thus directly access type->instance_size

> +}
> +
>  static void object_finalize(void *data)
>  {
>      Object *obj = data;
> @@ -467,16 +474,23 @@ static void object_finalize(void *data)
>      }
>  }
>  
> +#define OBJECT_MMAP_THRESH 4096
> +
>  Object *object_new_with_type(Type type)
>  {
>      Object *obj;
>  
>      g_assert(type != NULL);
>      type_initialize(type);
> -
> -    obj = g_malloc(type->instance_size);
> +    if (type->instance_size < OBJECT_MMAP_THRESH) {
> +        obj = g_malloc(type->instance_size);
> +        obj->free = g_free;
> +    } else {
> +        obj = qemu_anon_ram_mmap(type->instance_size);
> +        obj->free = object_munmap;
> +    }
> +    obj->instance_size = type->instance_size;
>      object_initialize_with_type(obj, type->instance_size, type);
> -    obj->free = g_free;
>  
>      return obj;


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]