mm, slub: don't create kmalloc-rcl caches with CONFIG_SLUB_TINY
authorVlastimil Babka <vbabka@suse.cz>
Tue, 15 Nov 2022 17:19:28 +0000 (18:19 +0100)
committerVlastimil Babka <vbabka@suse.cz>
Sun, 27 Nov 2022 22:39:02 +0000 (23:39 +0100)
Distinguishing kmalloc(__GFP_RECLAIMABLE) can help against fragmentation
by grouping pages by mobility, but on tiny systems the extra memory
overhead of separate set of kmalloc-rcl caches will probably be worse,
and mobility grouping likely disabled anyway.

Thus with CONFIG_SLUB_TINY, don't create kmalloc-rcl caches and use the
regular ones.

Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Acked-by: Mike Rapoport <rppt@linux.ibm.com>
Reviewed-by: Christoph Lameter <cl@linux.com>
include/linux/slab.h
mm/slab_common.c

index 45efc6c..ae2d19e 100644 (file)
@@ -336,13 +336,18 @@ enum kmalloc_cache_type {
 #endif
 #ifndef CONFIG_MEMCG_KMEM
        KMALLOC_CGROUP = KMALLOC_NORMAL,
-#else
-       KMALLOC_CGROUP,
 #endif
+#ifdef CONFIG_SLUB_TINY
+       KMALLOC_RECLAIM = KMALLOC_NORMAL,
+#else
        KMALLOC_RECLAIM,
+#endif
 #ifdef CONFIG_ZONE_DMA
        KMALLOC_DMA,
 #endif
+#ifdef CONFIG_MEMCG_KMEM
+       KMALLOC_CGROUP,
+#endif
        NR_KMALLOC_TYPES
 };
 
index af0f370..012fc75 100644 (file)
@@ -773,10 +773,16 @@ EXPORT_SYMBOL(kmalloc_size_roundup);
 #define KMALLOC_CGROUP_NAME(sz)
 #endif
 
+#ifndef CONFIG_SLUB_TINY
+#define KMALLOC_RCL_NAME(sz)   .name[KMALLOC_RECLAIM] = "kmalloc-rcl-" #sz,
+#else
+#define KMALLOC_RCL_NAME(sz)
+#endif
+
 #define INIT_KMALLOC_INFO(__size, __short_size)                        \
 {                                                              \
        .name[KMALLOC_NORMAL]  = "kmalloc-" #__short_size,      \
-       .name[KMALLOC_RECLAIM] = "kmalloc-rcl-" #__short_size,  \
+       KMALLOC_RCL_NAME(__short_size)                          \
        KMALLOC_CGROUP_NAME(__short_size)                       \
        KMALLOC_DMA_NAME(__short_size)                          \
        .size = __size,                                         \
@@ -862,7 +868,7 @@ void __init setup_kmalloc_cache_index_table(void)
 static void __init
 new_kmalloc_cache(int idx, enum kmalloc_cache_type type, slab_flags_t flags)
 {
-       if (type == KMALLOC_RECLAIM) {
+       if ((KMALLOC_RECLAIM != KMALLOC_NORMAL) && (type == KMALLOC_RECLAIM)) {
                flags |= SLAB_RECLAIM_ACCOUNT;
        } else if (IS_ENABLED(CONFIG_MEMCG_KMEM) && (type == KMALLOC_CGROUP)) {
                if (mem_cgroup_kmem_disabled()) {