Re: [S+Q Cleanup 3/6] slub: Remove static kmem_cache_cpu array for boot

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

 



On 08/18/2010 01:58 AM, David Rientjes wrote:
> On Tue, 17 Aug 2010, Christoph Lameter wrote:
> 
>> Index: linux-2.6/mm/slub.c
>> ===================================================================
>> --- linux-2.6.orig/mm/slub.c	2010-08-13 10:32:45.000000000 -0500
>> +++ linux-2.6/mm/slub.c	2010-08-13 10:32:50.000000000 -0500
>> @@ -2062,23 +2062,14 @@ init_kmem_cache_node(struct kmem_cache_n
>>  #endif
>>  }
>>  
>> -static DEFINE_PER_CPU(struct kmem_cache_cpu, kmalloc_percpu[KMALLOC_CACHES]);
>> -
>>  static inline int alloc_kmem_cache_cpus(struct kmem_cache *s)
>>  {
>> -	if (s < kmalloc_caches + KMALLOC_CACHES && s >= kmalloc_caches)
>> -		/*
>> -		 * Boot time creation of the kmalloc array. Use static per cpu data
>> -		 * since the per cpu allocator is not available yet.
>> -		 */
>> -		s->cpu_slab = kmalloc_percpu + (s - kmalloc_caches);
>> -	else
>> -		s->cpu_slab =  alloc_percpu(struct kmem_cache_cpu);
>> +	BUILD_BUG_ON(PERCPU_DYNAMIC_EARLY_SIZE <
>> +			SLUB_PAGE_SHIFT * sizeof(struct kmem_cache));
> 
> This fails with CONFIG_NODES_SHIFT=10 on x86_64, which means it will fail 
> the ia64 defconfig as well.  struct kmem_cache stores nodemask pointers up 
> to MAX_NUMNODES, which makes the conditional fail.
> 
> struct kmem_cache is 8376 bytes with that config (and CONFIG_SLUB_DEBUG), 
> so it looks like PERCPU_DYNAMIC_EARLY_SIZE will need to be at least 117264 
> for this not to fail (four orders larger than it currently is, or
> 12 << 14).  Tejun?

Heh, if it gets that high, probably the right thing to do is to define
SLUB_PERCPU_EARLY_SIZE and define PERCPU_DYNAMIC_EARLY_SIZE in terms
of it.

Thaks.

-- 
tejun

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxxx  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]