diff options
-rw-r--r-- | Documentation/kernel-parameters.txt | 6 | ||||
-rw-r--r-- | mm/slab.c | 20 |
2 files changed, 23 insertions, 3 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index a0c5c5f4fce..b21093eabef 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -2362,6 +2362,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |||
2362 | 2362 | ||
2363 | slram= [HW,MTD] | 2363 | slram= [HW,MTD] |
2364 | 2364 | ||
2365 | slab_max_order= [MM, SLAB] | ||
2366 | Determines the maximum allowed order for slabs. | ||
2367 | A high setting may cause OOMs due to memory | ||
2368 | fragmentation. Defaults to 1 for systems with | ||
2369 | more than 32MB of RAM, 0 otherwise. | ||
2370 | |||
2365 | slub_debug[=options[,slabs]] [MM, SLUB] | 2371 | slub_debug[=options[,slabs]] [MM, SLUB] |
2366 | Enabling slub_debug allows one to determine the | 2372 | Enabling slub_debug allows one to determine the |
2367 | culprit if slab objects become corrupted. Enabling | 2373 | culprit if slab objects become corrupted. Enabling |
@@ -479,11 +479,13 @@ EXPORT_SYMBOL(slab_buffer_size); | |||
479 | #endif | 479 | #endif |
480 | 480 | ||
481 | /* | 481 | /* |
482 | * Do not go above this order unless 0 objects fit into the slab. | 482 | * Do not go above this order unless 0 objects fit into the slab or |
483 | * overridden on the command line. | ||
483 | */ | 484 | */ |
484 | #define SLAB_MAX_ORDER_HI 1 | 485 | #define SLAB_MAX_ORDER_HI 1 |
485 | #define SLAB_MAX_ORDER_LO 0 | 486 | #define SLAB_MAX_ORDER_LO 0 |
486 | static int slab_max_order = SLAB_MAX_ORDER_LO; | 487 | static int slab_max_order = SLAB_MAX_ORDER_LO; |
488 | static bool slab_max_order_set __initdata; | ||
487 | 489 | ||
488 | /* | 490 | /* |
489 | * Functions for storing/retrieving the cachep and or slab from the page | 491 | * Functions for storing/retrieving the cachep and or slab from the page |
@@ -851,6 +853,17 @@ static int __init noaliencache_setup(char *s) | |||
851 | } | 853 | } |
852 | __setup("noaliencache", noaliencache_setup); | 854 | __setup("noaliencache", noaliencache_setup); |
853 | 855 | ||
856 | static int __init slab_max_order_setup(char *str) | ||
857 | { | ||
858 | get_option(&str, &slab_max_order); | ||
859 | slab_max_order = slab_max_order < 0 ? 0 : | ||
860 | min(slab_max_order, MAX_ORDER - 1); | ||
861 | slab_max_order_set = true; | ||
862 | |||
863 | return 1; | ||
864 | } | ||
865 | __setup("slab_max_order=", slab_max_order_setup); | ||
866 | |||
854 | #ifdef CONFIG_NUMA | 867 | #ifdef CONFIG_NUMA |
855 | /* | 868 | /* |
856 | * Special reaping functions for NUMA systems called from cache_reap(). | 869 | * Special reaping functions for NUMA systems called from cache_reap(). |
@@ -1499,9 +1512,10 @@ void __init kmem_cache_init(void) | |||
1499 | 1512 | ||
1500 | /* | 1513 | /* |
1501 | * Fragmentation resistance on low memory - only use bigger | 1514 | * Fragmentation resistance on low memory - only use bigger |
1502 | * page orders on machines with more than 32MB of memory. | 1515 | * page orders on machines with more than 32MB of memory if |
1516 | * not overridden on the command line. | ||
1503 | */ | 1517 | */ |
1504 | if (totalram_pages > (32 << 20) >> PAGE_SHIFT) | 1518 | if (!slab_max_order_set && totalram_pages > (32 << 20) >> PAGE_SHIFT) |
1505 | slab_max_order = SLAB_MAX_ORDER_HI; | 1519 | slab_max_order = SLAB_MAX_ORDER_HI; |
1506 | 1520 | ||
1507 | /* Bootstrap is tricky, because several objects are allocated | 1521 | /* Bootstrap is tricky, because several objects are allocated |