diff options
author | Joonsoo Kim <iamjoonsoo.kim@lge.com> | 2013-12-02 03:49:41 -0500 |
---|---|---|
committer | Pekka Enberg <penberg@kernel.org> | 2014-02-08 05:12:06 -0500 |
commit | f315e3fa1cf5b3317fc948708645fff889ce1e63 (patch) | |
tree | 2c7e3db6b372504ca115c5dcd2b23a8996e4a06a /include | |
parent | e5c58dfdcbd36f6b4c4c92c31cf6753d22da630a (diff) |
slab: restrict the number of objects in a slab
To prepare to implement byte sized index for managing the freelist
of a slab, we should restrict the number of objects in a slab to be less
or equal to 256, since byte only represent 256 different values.
Setting the size of object to value equal or more than newly introduced
SLAB_OBJ_MIN_SIZE ensures that the number of objects in a slab is less or
equal to 256 for a slab with 1 page.
If page size is rather larger than 4096, above assumption would be wrong.
In this case, we would fall back on 2 bytes sized index.
If minimum size of kmalloc is less than 16, we use it as minimum object
size and give up this optimization.
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/slab.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/slab.h b/include/linux/slab.h index 9260abdd67df..d015dec02bf3 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
@@ -201,6 +201,17 @@ struct kmem_cache { | |||
201 | #ifndef KMALLOC_SHIFT_LOW | 201 | #ifndef KMALLOC_SHIFT_LOW |
202 | #define KMALLOC_SHIFT_LOW 5 | 202 | #define KMALLOC_SHIFT_LOW 5 |
203 | #endif | 203 | #endif |
204 | |||
205 | /* | ||
206 | * This restriction comes from byte sized index implementation. | ||
207 | * Page size is normally 2^12 bytes and, in this case, if we want to use | ||
208 | * byte sized index which can represent 2^8 entries, the size of the object | ||
209 | * should be equal or greater to 2^12 / 2^8 = 2^4 = 16. | ||
210 | * If minimum size of kmalloc is less than 16, we use it as minimum object | ||
211 | * size and give up to use byte sized index. | ||
212 | */ | ||
213 | #define SLAB_OBJ_MIN_SIZE (KMALLOC_SHIFT_LOW < 4 ? \ | ||
214 | (1 << KMALLOC_SHIFT_LOW) : 16) | ||
204 | #endif | 215 | #endif |
205 | 216 | ||
206 | #ifdef CONFIG_SLUB | 217 | #ifdef CONFIG_SLUB |