Messages in this thread | | | Date | Tue, 11 Mar 2008 09:14:10 +0100 | From | Ingo Molnar <> | Subject | Re: [PATCH] mm: make mem_map allocation continuous. |
| |
* Yinghai Lu <yhlu.kernel@gmail.com> wrote:
> [PATCH] mm: make mem_map allocation continuous. > > vmemmap allocation current got > [ffffe20000000000-ffffe200001fffff] PMD ->ffff810001400000 on node 0 > [ffffe20000200000-ffffe200003fffff] PMD ->ffff810001800000 on node 0 > [ffffe20000400000-ffffe200005fffff] PMD ->ffff810001c00000 on node 0 > [ffffe20000600000-ffffe200007fffff] PMD ->ffff810002000000 on node 0 > [ffffe20000800000-ffffe200009fffff] PMD ->ffff810002400000 on node 0 > ... > > there is 2M hole between them. > > the rootcause is that usemap (24 bytes) will be allocated after every 2M > mem_map. and it will push next vmemmap (2M) to next align (2M). > > solution: > try to allocate mem_map continously. > > after patch, will get > [ffffe20000000000-ffffe200001fffff] PMD ->ffff810001400000 on node 0 > [ffffe20000200000-ffffe200003fffff] PMD ->ffff810001600000 on node 0 > [ffffe20000400000-ffffe200005fffff] PMD ->ffff810001800000 on node 0 > [ffffe20000600000-ffffe200007fffff] PMD ->ffff810001a00000 on node 0 > [ffffe20000800000-ffffe200009fffff] PMD ->ffff810001c00000 on node 0 > ... > and usemap will share in page because of they are allocated continuously too. > sparse_early_usemap_alloc: usemap = ffff810024e00000 size = 24 > sparse_early_usemap_alloc: usemap = ffff810024e00080 size = 24 > sparse_early_usemap_alloc: usemap = ffff810024e00100 size = 24 > sparse_early_usemap_alloc: usemap = ffff810024e00180 size = 24 > ... > > so we make the bootmem allocation more compact and use less memory for usemap. > > Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
very nice fix!
i suspect this patch should go via -mm.
> usemap = alloc_bootmem_node(NODE_DATA(nid), usemap_size()); > + printk(KERN_INFO "sparse_early_usemap_alloc: usemap = %p size = %ld\n", usemap, usemap_size());
this should be in a separate patch.
Ingo
| |