slab: resize the alien caches too
PATCH 1/1 slab: resize the alien caches too
Christoph,
While going through the slab code, I observed that alien caches are not getting resized, when user changes the slab tunables. Appended patch tries to fix this. Please review and let me know if I missed anything.
thanks,
suresh
---
Resize the alien caches too based on the slab tunables.
---
mm/slab.c +6 -5
@@ -3823,6 +3823,7 @@ static int alloc_kmemlist(struct kmem_cache *cachep) l3 = cachep->nodelists[node];if (l3) {struct array_cache *shared = l3->shared; +struct array_cache **alien = l3->alien;spin_lock_irq (&l3->list_lock);
@@ -3831,15 +3832,15 @@ static int alloc_kmemlist(struct kmem_cache *cachep) shared->avail, node); l3->shared = new_shared; -if (!l3->alien) { - l3->alien = new_alien; - new_alien =NULL ; - } + l3->alien = new_alien; l3->free_limit = (1 +nr_cpus_node (node)) * cachep->batchcount + cachep->num;spin_unlock_irq (&l3->list_lock);kfree (shared); -free_alien_cache (new_alien); +if (alien) { +drain_alien_cache (cachep, alien); +free_alien_cache (alien); + }continue ; } l3 =kmalloc_node (sizeof (struct kmem_list3 ),GFP_KERNEL , node);
Quoted 3 lines · Suresh B
While going through the slab code, I observed that alien caches are not getting resized, when user changes the slab tunables. Appended patch tries to fix this. Please review and let me know if I missed anything.
Let it be. We have not resized the alien caches ever and doing so may cause serious memory usage. Size is hardcoded to 12 anyways.
Quoted 8 lines · Christoph Lameter
Quoted 3 lines · Suresh B
While going through the slab code, I observed that alien caches are not getting resized, when user changes the slab tunables. Appended patch tries to fix this. Please review and let me know if I missed anything.
Let it be. We have not resized the alien caches ever and doing so may cause serious memory usage. Size is hardcoded to 12 anyways.
hmm.. I see.
Let me do some experiments and getback to you(with what I am looking exactly).
thanks,
suresh
Quoted 20 lines · Suresh B
Christoph,
While going through the slab code, I observed that alien caches are not getting resized, when user changes the slab tunables. Appended patch tries to fix this. Please review and let me know if I missed anything.
thanks,
suresh
---Resize the alien caches too based on the slab tunables.
Signed-off-by Suresh Siddha <[email protected]>---
mm/slab.c +0
-0
mm/slab.c static int alloc_kmemlist(struct kmem_cache *cachep) · line 3829
Quoted 7 lines
mm/slab.c +1
-0@@ -3823,6 +3823,7 @@ static int alloc_kmemlist(struct kmem_cache *cachep) l3 = cachep->nodelists[node];if (l3) {struct array_cache *shared = l3->shared; +struct array_cache **alien = l3->alien;spin_lock_irq (&l3->list_lock);
Christoph already rejected the patch, but I have one further comment : l3->alien should be fetched after spin_lock_irq() of course.
It's true that the :
if (limit > 1) limit = 12;
from alloc_alien_cache() is quite disturbing and could be cleaned up.