From b00de9c9407f8ca8c47ae8217dc70ade6b16dbcd Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Tue, 4 Oct 2022 17:32:17 +0200 Subject: [PATCH] Use available memory statistic when possible Update function returning size of free memory to use available statistic if that's supported by given kernel. This function is used to check whether there is enough memory to start cache, and available statistic is preferred for this check over free statistic, as it does include size of page cache allocations which can be easily reclaimed by the system. Signed-off-by: Robert Baldyga --- ...page_state.conf => 1_get_free_memory.conf} | 21 +++++++++++++------ modules/cas_cache/ocf_env.h | 4 ++-- 2 files changed, 17 insertions(+), 8 deletions(-) rename configure.d/{1_global_page_state.conf => 1_get_free_memory.conf} (50%) diff --git a/configure.d/1_global_page_state.conf b/configure.d/1_get_free_memory.conf similarity index 50% rename from configure.d/1_global_page_state.conf rename to configure.d/1_get_free_memory.conf index 1584e34..89acc10 100644 --- a/configure.d/1_global_page_state.conf +++ b/configure.d/1_get_free_memory.conf @@ -9,12 +9,15 @@ check() { cur_name=$(basename $2) config_file_path=$1 - if compile_module $cur_name "global_zone_page_state(1);" "linux/mm.h" + if compile_module $cur_name "si_mem_available();" "linux/mm.h" then echo $cur_name "1" >> $config_file_path - elif compile_module $cur_name "global_page_state(1);" "linux/mm.h" + elif compile_module $cur_name "global_zone_page_state(1);" "linux/mm.h" then echo $cur_name "2" >> $config_file_path + elif compile_module $cur_name "global_page_state(1);" "linux/mm.h" + then + echo $cur_name "3" >> $config_file_path else echo $cur_name "X" >> $config_file_path fi @@ -24,15 +27,21 @@ apply() { case "$1" in "1") add_function " - static inline unsigned long cas_global_zone_page_state(enum zone_stat_item item) + static inline unsigned long cas_get_free_memory(void) { - return global_zone_page_state(item); + return si_mem_available() << PAGE_SHIFT; }" ;; "2") add_function " - static inline unsigned long cas_global_zone_page_state(enum zone_stat_item item) + static inline unsigned long cas_get_free_memory(void) { - return global_page_state(item); + return global_zone_page_state(NR_FREE_PAGES) << PAGE_SHIFT; + }" ;; + "3") + add_function " + static inline unsigned long cas_get_free_memory(void) + { + return global_page_state(NR_FREE_PAGES) << PAGE_SHIFT; }" ;; *) exit 1 diff --git a/modules/cas_cache/ocf_env.h b/modules/cas_cache/ocf_env.h index 5040085..a532a3f 100644 --- a/modules/cas_cache/ocf_env.h +++ b/modules/cas_cache/ocf_env.h @@ -1,5 +1,5 @@ /* -* Copyright(c) 2012-2021 Intel Corporation +* Copyright(c) 2012-2022 Intel Corporation * SPDX-License-Identifier: BSD-3-Clause */ @@ -22,7 +22,7 @@ static inline uint64_t env_get_free_memory(void) { - return cas_global_zone_page_state(NR_FREE_PAGES) << PAGE_SHIFT; + return cas_get_free_memory(); } static inline void *env_malloc(size_t size, int flags)