[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 07/23] exec: avoid realloc in phys_map_node_reserve
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 07/23] exec: avoid realloc in phys_map_node_reserve |
Date: |
Mon, 18 Jul 2016 11:27:39 +0200 |
From: Peter Lieven <address@hidden>
this is the first step in reducing the brk heap fragmentation
created by the map->nodes memory allocation. Since the introduction
of RCU the freeing of the PhysPageMaps is delayed so that sometimes
several hundred are allocated at the same time.
Even worse the memory for map->nodes is allocated and shortly
afterwards reallocated. Since the number of nodes it grows
to in the end is the same for all PhysPageMaps remember this value
and at least avoid the reallocation.
The large number of simultaneous allocations (about 450 x 70kB in
my configuration) has to be addressed later.
Signed-off-by: Peter Lieven <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
exec.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/exec.c b/exec.c
index 011babd..60cf46a 100644
--- a/exec.c
+++ b/exec.c
@@ -187,10 +187,12 @@ struct CPUAddressSpace {
static void phys_map_node_reserve(PhysPageMap *map, unsigned nodes)
{
+ static unsigned alloc_hint = 16;
if (map->nodes_nb + nodes > map->nodes_nb_alloc) {
- map->nodes_nb_alloc = MAX(map->nodes_nb_alloc * 2, 16);
+ map->nodes_nb_alloc = MAX(map->nodes_nb_alloc, alloc_hint);
map->nodes_nb_alloc = MAX(map->nodes_nb_alloc, map->nodes_nb + nodes);
map->nodes = g_renew(Node, map->nodes, map->nodes_nb_alloc);
+ alloc_hint = map->nodes_nb_alloc;
}
}
--
2.7.4
- [Qemu-devel] [PULL 00/23] TCG and misc patches for 2.7 hard freeze from 2016-07-18, Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 01/23] use g_path_get_dirname instead of dirname, Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 04/23] compiler: never omit assertions if using a static analysis tool, Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 05/23] megasas: remove useless check for cmd->frame, Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 03/23] hw/i386: add device tree support, Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 02/23] Changed malloc to g_malloc, free to g_free in bsd-user/qemu.h, Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 06/23] checkpatch: consider git extended headers valid patches, Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 07/23] exec: avoid realloc in phys_map_node_reserve,
Paolo Bonzini <=
- [Qemu-devel] [PULL 08/23] cpu-exec: Move down some declarations in cpu_exec(), Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 09/23] util/qht: Document memory ordering assumptions, Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 10/23] tcg: Pass last_tb by value to tb_find_fast(), Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 12/23] tcg: Prepare safe access to tb_flushed out of tb_lock, Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 11/23] tcg: Prepare safe tb_jmp_cache lookup out of tb_lock, Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 13/23] target-i386: Remove redundant HF_SOFTMMU_MASK, Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 16/23] tcg: set up tb->page_addr before insertion, Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 14/23] tcg: Introduce tb_mark_invalid() and tb_is_invalid(), Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 15/23] tcg: Prepare TB invalidation for lockless TB lookup, Paolo Bonzini, 2016/07/18
- [Qemu-devel] [PULL 17/23] tcg: cpu-exec: remove tb_lock from the hot-path, Paolo Bonzini, 2016/07/18