Re: [PATCH 2/5] mm/sparse: optimize sparse_index_alloc

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue 26-06-12 14:07:35, Gavin Shan wrote:
> >> With CONFIG_SPARSEMEM_EXTREME, the two level of memory section
> >> descriptors are allocated from slab or bootmem. When allocating
> >> from slab, let slab allocator to clear the memory chunk. However,
> >> the memory chunk from bootmem allocator, we have to clear that
> >> explicitly.
> >
> >I am sorry but I do not see how this optimize the current code. What is
> >the difference between slab doing memset and doing it explicitly for all
> >cases?
> >
> 
> Yeah, I do agree it won't do much optimization here. However, I'm wandering
> if I can remove the whole peice of code doing memset(setion, 0, array_size)
> since it seems that alloc_bootmem_node() also clears the allocated memory
> chunk :-)

Yes, alloc_bootem_node clears the memory (strange, I thought it doesn't
do that), so the memset is really not necessary after s/kmalloc/kzalloc/.

> 
> Please correct me if I'm wrong about alloc_bootmem_node() :-)
> 
> Thanks,
> Gavin
> 
> >> 
> >> Signed-off-by: Gavin Shan <shangw@xxxxxxxxxxxxxxxxxx>
> >> ---
> >>  mm/sparse.c |   12 ++++++------
> >>  1 file changed, 6 insertions(+), 6 deletions(-)
> >> 
> >> diff --git a/mm/sparse.c b/mm/sparse.c
> >> index afd0998..ce50c8b 100644
> >> --- a/mm/sparse.c
> >> +++ b/mm/sparse.c
> >> @@ -74,14 +74,14 @@ static struct mem_section noinline __init_refok *sparse_index_alloc(int nid)
> >>  
> >>  	if (slab_is_available()) {
> >>  		if (node_state(nid, N_HIGH_MEMORY))
> >> -			section = kmalloc_node(array_size, GFP_KERNEL, nid);
> >> +			section = kzalloc_node(array_size, GFP_KERNEL, nid);
> >>  		else
> >> -			section = kmalloc(array_size, GFP_KERNEL);
> >> -	} else
> >> +			section = kzalloc(array_size, GFP_KERNEL);
> >> +	} else {
> >>  		section = alloc_bootmem_node(NODE_DATA(nid), array_size);
> >> -
> >> -	if (section)
> >> -		memset(section, 0, array_size);
> >> +		if (section)
> >> +			memset(section, 0, array_size);
> >> +	}
> >>  
> >>  	return section;
> >>  }
> >> -- 
> >> 1.7.9.5
> >> 
> >> --
> >> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> >> the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
> >> see: http://www.linux-mm.org/ .
> >> Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>
> >
> >-- 
> >Michal Hocko
> >SUSE Labs
> >SUSE LINUX s.r.o.
> >Lihovarska 1060/12
> >190 00 Praha 9    
> >Czech Republic
> >
> >--
> >To unsubscribe, send a message with 'unsubscribe linux-mm' in
> >the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
> >see: http://www.linux-mm.org/ .
> >Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>
> >
> 

-- 
Michal Hocko
SUSE Labs
SUSE LINUX s.r.o.
Lihovarska 1060/12
190 00 Praha 9    
Czech Republic

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]