[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 11/15] qom: use mmap for bigger Objects
From: |
Peter Lieven |
Subject: |
[Qemu-devel] [PATCH 11/15] qom: use mmap for bigger Objects |
Date: |
Tue, 28 Jun 2016 11:01:35 +0200 |
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;
};
/**
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);
+}
+
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;
}
--
1.9.1
- Re: [Qemu-devel] [PATCH 03/15] coroutine-ucontext: reduce stack size to 64kB, (continued)
- [Qemu-devel] [PATCH 02/15] coroutine-ucontext: add a switch to monitor maximum stack size, Peter Lieven, 2016/06/28
- [Qemu-devel] [PATCH 15/15] vnc: use mmap for VncState, Peter Lieven, 2016/06/28
- [Qemu-devel] [PATCH 14/15] vnc-tight: make the encoding palette static, Peter Lieven, 2016/06/28
- [Qemu-devel] [PATCH 13/15] exec: use mmap for PhysPageMap->nodes, Peter Lieven, 2016/06/28
- [Qemu-devel] [PATCH 08/15] virtio: use mmap for VirtQueue, Peter Lieven, 2016/06/28
- [Qemu-devel] [PATCH 11/15] qom: use mmap for bigger Objects,
Peter Lieven <=
- [Qemu-devel] [PATCH 12/15] util: add a function to realloc mmapped memory, Peter Lieven, 2016/06/28
- [Qemu-devel] [PATCH 09/15] loader: use mmap for ROMs, Peter Lieven, 2016/06/28