On 11/07/2016 11:31, Peter Lieven wrote: > Am 28.06.2016 um 12:43 schrieb Paolo Bonzini: >> >> On 28/06/2016 11:01, Peter Lieven wrote: >>> this was causing serious framentation in conjunction with the >>> subpages since RCU was introduced. The node space was allocated >>> at approx 32kB then reallocted to approx 75kB and this a few hundred >>> times at startup. And thanks to RCU the freeing was delayed. >>> >>> Signed-off-by: Peter Lieven <p...@kamp.de> >> The size of the node from the previous as->dispatch could be used as a >> hint for the new one perhaps, avoiding the reallocation? > > This here seems also to work: > > diff --git a/exec.c b/exec.c > index 0122ef7..2691c0a 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; > } > } > > > Question is still, mmap for this?
Nice! Can you submit a patch for this? Paolo