Messages in this thread Patch in this message | | | Date | Mon, 3 Mar 2008 10:34:49 +0100 | From | Nick Piggin <> | Subject | [rfc][patch 1/3] slub: fix small HWCACHE_ALIGN alignment |
| |
SLUB should pack even small objects nicely into cachelines if that is what has been asked for. Use the same algorithm as SLAB for this.
Signed-off-by: Nick Piggin <npiggin@suse.de> --- Index: linux-2.6/mm/slub.c =================================================================== --- linux-2.6.orig/mm/slub.c +++ linux-2.6/mm/slub.c @@ -1896,12 +1896,15 @@ static unsigned long calculate_alignment * specified alignment though. If that is greater * then use it. */ - if ((flags & SLAB_HWCACHE_ALIGN) && - size > cache_line_size() / 2) - return max_t(unsigned long, align, cache_line_size()); + if (flags & SLAB_HWCACHE_ALIGN) { + unsigned long ralign = cache_line_size(); + while (size <= ralign / 2) + ralign /= 2; + align = max(align, ralign); + } if (align < ARCH_SLAB_MINALIGN) - return ARCH_SLAB_MINALIGN; + align = ARCH_SLAB_MINALIGN; return ALIGN(align, sizeof(void *)); }
| |