aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRik van Riel <riel@redhat.com>2011-01-13 18:47:12 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-13 20:32:46 -0500
commit97562cd243298acf573620c764a1037bd545c9bc (patch)
tree79af6409724ae185e07bce4d9eaedef034bc83f8
parentc5a73c3d55be1faadba35b41a862e036a3b12ddb (diff)
thp: disable transparent hugepages by default on small systems
On small systems, the extra memory used by the anti-fragmentation memory reserve and simply because huge pages are smaller than large pages can easily outweigh the benefits of less TLB misses. A less obvious concern is if run on a NUMA machine with asymmetric node sizes and one of them is very small. The reserve could make the node unusable. In case of the crashdump kernel, OOMs have been observed due to the anti-fragmentation memory reserve taking up a large fraction of the crashdump image. This patch disables transparent hugepages on systems with less than 1GB of RAM, but the hugepage subsystem is fully initialized so administrators can enable THP through /sys if desired. Signed-off-by: Rik van Riel <riel@redhat.com> Acked-by: Avi Kiviti <avi@redhat.com> Signed-off-by: Andrea Arcangeli <aarcange@redhat.com> Acked-by: Mel Gorman <mel@csn.ul.ie> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--mm/huge_memory.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index 45b6d53bcfbc..892d8a17a7e5 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -527,6 +527,14 @@ static int __init hugepage_init(void)
527 goto out; 527 goto out;
528 } 528 }
529 529
530 /*
531 * By default disable transparent hugepages on smaller systems,
532 * where the extra memory used could hurt more than TLB overhead
533 * is likely to save. The admin can still enable it through /sys.
534 */
535 if (totalram_pages < (512 << (20 - PAGE_SHIFT)))
536 transparent_hugepage_flags = 0;
537
530 start_khugepaged(); 538 start_khugepaged();
531 539
532 set_recommended_min_free_kbytes(); 540 set_recommended_min_free_kbytes();