From 1cd91e4ffadca9877d25e0505def1f37a74ad806 Mon Sep 17 00:00:00 2001 From: obdev Date: Wed, 18 Sep 2024 08:36:44 +0000 Subject: [PATCH] fix adaptive memory_limit unexpected in K8s container --- deps/oblib/src/lib/utility/utility.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/deps/oblib/src/lib/utility/utility.h b/deps/oblib/src/lib/utility/utility.h index 6ffb187cf..6c6ed9ba0 100644 --- a/deps/oblib/src/lib/utility/utility.h +++ b/deps/oblib/src/lib/utility/utility.h @@ -498,12 +498,23 @@ inline int64_t get_cpu_id() // ethernet speed: byte / second. int get_ethernet_speed(const char *devname, int64_t &speed); int get_ethernet_speed(const ObString &devname, int64_t &speed); +inline int64_t get_cgroup_memory_limit() +{ + int64_t cgroup_memory_limit = INT64_MAX; + FILE *file = fopen("/sys/fs/cgroup/memory/memory.limit_in_bytes", "r"); + if (NULL != file) { + fscanf(file, "%ld", &cgroup_memory_limit); + fclose(file); + } + return cgroup_memory_limit; +} inline int64_t get_phy_mem_size() { static int64_t page_size = sysconf(_SC_PAGE_SIZE); static int64_t phys_pages = sysconf(_SC_PHYS_PAGES); - return page_size * phys_pages; + static int64_t cgroup_memory_limit = get_cgroup_memory_limit(); + return MIN(page_size * phys_pages, cgroup_memory_limit); } int64_t get_level1_dcache_size();