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 <robert.baldyga@intel.com>
This commit is contained in:
Robert Baldyga 2022-10-04 17:32:17 +02:00
parent 3df37198ca
commit b00de9c940
2 changed files with 17 additions and 8 deletions

View File

@ -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

View File

@ -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)