From bafe540d86df4e07d9ae7e940c2e4aabb0070290 Mon Sep 17 00:00:00 2001 From: Masamichi Takagi Date: Fri, 10 Jul 2020 14:52:57 +0900 Subject: [PATCH] mmap: allow unlimited overcommit Change-Id: Iba07b5c504b4a202cd163ce682f3fc72a31284a0 --- NEWS.md | 3 +++ kernel/include/mman.h | 7 +++++++ kernel/include/rusage_private.h | 4 ++++ kernel/mem.c | 1 + 4 files changed, 15 insertions(+) diff --git a/NEWS.md b/NEWS.md index 96befbda..d4d6f73e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -535,3 +535,6 @@ Restrictions on McKernel 25. The behaviors of madvise and mbind are changed to do nothing and report success as a workaround for Fugaku. + +26. mmap() allows unlimited overcommit. Note that it corresponds to + setting sysctl ``vm.overcommit_memory`` to 1. diff --git a/kernel/include/mman.h b/kernel/include/mman.h index 09f771ec..a618040f 100644 --- a/kernel/include/mman.h +++ b/kernel/include/mman.h @@ -72,4 +72,11 @@ #define MS_INVALIDATE 0x02 #define MS_SYNC 0x04 +/* include/uapi/linux/mman.h */ +#define OVERCOMMIT_GUESS 0 +#define OVERCOMMIT_ALWAYS 1 +#define OVERCOMMIT_NEVER 2 + +extern int sysctl_overcommit_memory; + #endif /* HEADER_MMAN_H */ diff --git a/kernel/include/rusage_private.h b/kernel/include/rusage_private.h index 70235eda..844e36cd 100644 --- a/kernel/include/rusage_private.h +++ b/kernel/include/rusage_private.h @@ -11,6 +11,7 @@ #include #include #include +#include #ifdef ENABLE_RUSAGE @@ -311,6 +312,9 @@ rusage_check_overmap(size_t len, int pgshift) { int npages = 0, remain_pages = 0; + if (sysctl_overcommit_memory == OVERCOMMIT_ALWAYS) + return 0; + npages = (len + (1UL << pgshift) - 1) >> pgshift; remain_pages = (rusage.total_memory - rusage.total_memory_usage) >> pgshift; diff --git a/kernel/mem.c b/kernel/mem.c index 97f9adc2..e8facbf4 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -62,6 +62,7 @@ extern int interrupt_from_user(void *); struct tlb_flush_entry tlb_flush_vector[IHK_TLB_FLUSH_IRQ_VECTOR_SIZE]; int anon_on_demand = 0; +int sysctl_overcommit_memory = OVERCOMMIT_ALWAYS; static struct ihk_mc_pa_ops *pa_ops;