diff options
author | Andrea Arcangeli <aarcange@redhat.com> | 2011-01-13 18:47:07 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-13 20:32:45 -0500 |
commit | 13ece886d99cd668483113f7238e419d5331af26 (patch) | |
tree | 44a1c65870ba4463316f943f52d898bb3763ab81 /mm | |
parent | ce83d2174ea9c3d72d5821cf3ebc974e36391bf7 (diff) |
thp: transparent hugepage config choice
Allow to choose between the always|madvise default for page faults and
khugepaged at config time. madvise guarantees zero risk of higher memory
footprint for applications (applications using madvise(MADV_HUGEPAGE)
won't risk to use any more memory by backing their virtual regions with
hugepages).
Initially set the default to N and don't depend on EMBEDDED.
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/Kconfig | 27 | ||||
-rw-r--r-- | mm/huge_memory.c | 5 |
2 files changed, 30 insertions, 2 deletions
diff --git a/mm/Kconfig b/mm/Kconfig index d774f77538ce..3e81687263b5 100644 --- a/mm/Kconfig +++ b/mm/Kconfig | |||
@@ -303,9 +303,8 @@ config NOMMU_INITIAL_TRIM_EXCESS | |||
303 | See Documentation/nommu-mmap.txt for more information. | 303 | See Documentation/nommu-mmap.txt for more information. |
304 | 304 | ||
305 | config TRANSPARENT_HUGEPAGE | 305 | config TRANSPARENT_HUGEPAGE |
306 | bool "Transparent Hugepage Support" if EMBEDDED | 306 | bool "Transparent Hugepage Support" |
307 | depends on X86 && MMU | 307 | depends on X86 && MMU |
308 | default y | ||
309 | help | 308 | help |
310 | Transparent Hugepages allows the kernel to use huge pages and | 309 | Transparent Hugepages allows the kernel to use huge pages and |
311 | huge tlb transparently to the applications whenever possible. | 310 | huge tlb transparently to the applications whenever possible. |
@@ -316,6 +315,30 @@ config TRANSPARENT_HUGEPAGE | |||
316 | 315 | ||
317 | If memory constrained on embedded, you may want to say N. | 316 | If memory constrained on embedded, you may want to say N. |
318 | 317 | ||
318 | choice | ||
319 | prompt "Transparent Hugepage Support sysfs defaults" | ||
320 | depends on TRANSPARENT_HUGEPAGE | ||
321 | default TRANSPARENT_HUGEPAGE_ALWAYS | ||
322 | help | ||
323 | Selects the sysfs defaults for Transparent Hugepage Support. | ||
324 | |||
325 | config TRANSPARENT_HUGEPAGE_ALWAYS | ||
326 | bool "always" | ||
327 | help | ||
328 | Enabling Transparent Hugepage always, can increase the | ||
329 | memory footprint of applications without a guaranteed | ||
330 | benefit but it will work automatically for all applications. | ||
331 | |||
332 | config TRANSPARENT_HUGEPAGE_MADVISE | ||
333 | bool "madvise" | ||
334 | help | ||
335 | Enabling Transparent Hugepage madvise, will only provide a | ||
336 | performance improvement benefit to the applications using | ||
337 | madvise(MADV_HUGEPAGE) but it won't risk to increase the | ||
338 | memory footprint of applications without a guaranteed | ||
339 | benefit. | ||
340 | endchoice | ||
341 | |||
319 | # | 342 | # |
320 | # UP and nommu archs use km based percpu allocator | 343 | # UP and nommu archs use km based percpu allocator |
321 | # | 344 | # |
diff --git a/mm/huge_memory.c b/mm/huge_memory.c index bce6e12140e2..30c3cec82023 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c | |||
@@ -27,7 +27,12 @@ | |||
27 | * allocations. | 27 | * allocations. |
28 | */ | 28 | */ |
29 | unsigned long transparent_hugepage_flags __read_mostly = | 29 | unsigned long transparent_hugepage_flags __read_mostly = |
30 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS | ||
30 | (1<<TRANSPARENT_HUGEPAGE_FLAG)| | 31 | (1<<TRANSPARENT_HUGEPAGE_FLAG)| |
32 | #endif | ||
33 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE_MADVISE | ||
34 | (1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG)| | ||
35 | #endif | ||
31 | (1<<TRANSPARENT_HUGEPAGE_DEFRAG_FLAG)| | 36 | (1<<TRANSPARENT_HUGEPAGE_DEFRAG_FLAG)| |
32 | (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG); | 37 | (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG); |
33 | 38 | ||