lkml.org 
[lkml]   [2004]   [Apr]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: slab-alignment-rework.patch in -mc
Hi,

below is a patch that redefines align:

- align not zero: use the specified alignment. I think values smaller than
sizeof(void*) will work, even on archs with strict alignment requirement
(or at least: slab shouldn't crash. Obviously the user must handle the
alignment properly).

- align zero:
* debug on: align to sizeof(void*)
* debug off, SLAB_HWCACHE_ALIGN clear: align to sizeof(void*)
* debug off, SLAB_HWCACHE_ALIGN set: align to the smaller of
- cache_line_size()
- the object size, rounded up to the next power of two.
Slab never honored cache align for tiny objects: otherwise the 32-byte
kmalloc objects would use 128 byte objects.

The patch is against 2.6.6-rc2. What do you think?

There is one additional point: right now slab uses ints for the bufctls.
Using short would save two bytes for each object. Initially I had used
short, but davem objected. IIRC because some archs do not handle short
effeciently. Should I allow arch overrides for the bufctls? On i386,
saving two bytes might allow a few additional anon_vma objects in each
page.

--
Manfred

<<<
--- 2.6/mm/slab.c 2004-04-16 22:29:56.000000000 +0200
+++ build-2.6/mm/slab.c 2004-04-21 18:16:03.000000000 +0200
@@ -1150,14 +1150,22 @@
BUG();

if (align) {
- /* minimum supported alignment: */
- if (align < BYTES_PER_WORD)
- align = BYTES_PER_WORD;
-
/* combinations of forced alignment and advanced debugging is
* not yet implemented.
*/
flags &= ~(SLAB_RED_ZONE|SLAB_STORE_USER);
+ } else {
+ if (flags & SLAB_HWCACHE_ALIGN) {
+ /* Default alignment: as specified by the arch code.
+ * Except if an object is really small, then squeeze multiple
+ * into one cacheline.
+ */
+ align = cache_line_size();
+ while (size <= align/2)
+ align /= 2;
+ } else {
+ align = BYTES_PER_WORD;
+ }
}

/* Get cache's description obj. */
@@ -1210,15 +1218,6 @@
*/
flags |= CFLGS_OFF_SLAB;

- if (!align) {
- /* Default alignment: compile time specified l1 cache size.
- * Except if an object is really small, then squeeze multiple
- * into one cacheline.
- */
- align = cache_line_size();
- while (size <= align/2)
- align /= 2;
- }
size = ALIGN(size, align);

/* Cal size (in pages) of slabs, and the num of objs per slab.
<<<<
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:02    [W:0.044 / U:0.708 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site