qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Lieven <pl@kamp.de>
Subject: [Qemu-devel] [PULL 07/23] exec: avoid realloc in phys_map_node_reserve
Date: Mon, 18 Jul 2016 11:27:39 +0200	[thread overview]
Message-ID: <1468834075-25669-8-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1468834075-25669-1-git-send-email-pbonzini@redhat.com>

From: Peter Lieven <pl@kamp.de>

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 <pl@kamp.de>
Message-Id: <1468577030-21097-1-git-send-email-pl@kamp.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 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

  parent reply	other threads:[~2016-07-18  9:28 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-18  9:27 [Qemu-devel] [PULL 00/23] TCG and misc patches for 2.7 hard freeze from 2016-07-18 Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 01/23] use g_path_get_dirname instead of dirname Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 02/23] Changed malloc to g_malloc, free to g_free in bsd-user/qemu.h Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 03/23] hw/i386: add device tree support Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 04/23] compiler: never omit assertions if using a static analysis tool Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 05/23] megasas: remove useless check for cmd->frame Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 06/23] checkpatch: consider git extended headers valid patches Paolo Bonzini
2016-07-18  9:27 ` Paolo Bonzini [this message]
2016-07-18  9:27 ` [Qemu-devel] [PULL 08/23] cpu-exec: Move down some declarations in cpu_exec() Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 09/23] util/qht: Document memory ordering assumptions Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 10/23] tcg: Pass last_tb by value to tb_find_fast() Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 11/23] tcg: Prepare safe tb_jmp_cache lookup out of tb_lock Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 12/23] tcg: Prepare safe access to tb_flushed " Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 13/23] target-i386: Remove redundant HF_SOFTMMU_MASK Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 14/23] tcg: Introduce tb_mark_invalid() and tb_is_invalid() Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 15/23] tcg: Prepare TB invalidation for lockless TB lookup Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 16/23] tcg: set up tb->page_addr before insertion Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 17/23] tcg: cpu-exec: remove tb_lock from the hot-path Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 18/23] tcg: Avoid bouncing tb_lock between tb_gen_code() and tb_add_jump() Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 19/23] tcg: Merge tb_find_slow() and tb_find_fast() Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 20/23] tcg: rename tb_find_physical() Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 21/23] Move README to markdown Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 22/23] block/iscsi: fix rounding in iscsi_allocationmap_set Paolo Bonzini
2016-07-18  9:27 ` [Qemu-devel] [PULL 23/23] block/iscsi: allow caching of the allocation map Paolo Bonzini
2016-07-18 11:51 ` [Qemu-devel] [PULL 00/23] TCG and misc patches for 2.7 hard freeze from 2016-07-18 Peter Maydell
2016-07-18 11:54   ` Paolo Bonzini
2016-07-18 11:57     ` Peter Maydell
2016-07-18 11:59       ` Paolo Bonzini
2016-07-18 12:50         ` Peter Maydell
2016-07-18 13:22           ` Paolo Bonzini
2016-07-18 13:41             ` Peter Maydell
2016-07-18 13:59               ` Paolo Bonzini

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=1468834075-25669-8-git-send-email-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=pl@kamp.de \
    --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).