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

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

 



On Tue, Jun 26, 2012 at 09:04:21AM +0200, Michal Hocko wrote:
>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/.
>

Thanks for the confirm, Michal. Let me remove it in next revision :-)

Thanks,
Gavin

>> 
>> 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]