On 12/07/2016 16:34, Peter Lieven wrote: > Am 11.07.2016 um 12:37 schrieb Paolo Bonzini: >> >> 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? > > Of course, but please see my other comment. We still should consider mmap for > this cause we have close to 500 Physmaps about 70KB each which > are all allocted at the same time - I think due to RCU.
That I think is not material for 2.7, and also I want to take a look at creating nodes lazily. Paolo