Skip to content

Commit 0ecbcdb

Browse files
committed
Add inertia (hysteresis) for dirty ratio trigger
Signed-off-by: Daniel Madej <daniel.madej@huawei.com>
1 parent 0a6952c commit 0ecbcdb

File tree

4 files changed

+54
-23
lines changed

4 files changed

+54
-23
lines changed

casadm/argp.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Copyright(c) 2012-2021 Intel Corporation
3-
* Copyright(c) 2024 Huawei Technologies
3+
* Copyright(c) 2024-2025 Huawei Technologies
44
* SPDX-License-Identifier: BSD-3-Clause
55
*/
66

@@ -13,7 +13,7 @@
1313
#include <sys/stat.h>
1414

1515
#define PADDING " "
16-
#define MAX_OPT_HELP_LEN 30
16+
#define MAX_OPT_HELP_LEN 35
1717

1818
extern cas_printf_t cas_printf;
1919

@@ -154,10 +154,10 @@ void print_list_options(cli_option* options, int flag,
154154
options->long_name, options->arg);
155155
}
156156

157-
cas_printf(LOG_INFO, "%s%-4s%-32s%s\n", PADDING,
157+
cas_printf(LOG_INFO, "%s%-4s%-33s%s\n", PADDING,
158158
short_name, buf, desc);
159159
} else {
160-
cas_printf(LOG_INFO, "%s%-4s--%-30s%s\n", PADDING,
160+
cas_printf(LOG_INFO, "%s%-4s--%-31s%s\n", PADDING,
161161
short_name, options->long_name, desc);
162162
}
163163
}
@@ -207,10 +207,10 @@ static void print_options_help(cli_option *options)
207207
options[i].arg);
208208
}
209209

210-
cas_printf(LOG_INFO, "%s%-4s%-32s%s\n", PADDING,
210+
cas_printf(LOG_INFO, "%s%-4s%-33s%s\n", PADDING,
211211
short_name, buf, desc);
212212
} else {
213-
cas_printf(LOG_INFO, "%s%-4s--%-30s%s\n", PADDING,
213+
cas_printf(LOG_INFO, "%s%-4s--%-31s%s\n", PADDING,
214214
short_name, options[i].long_name,
215215
desc);
216216
}

casadm/cas_main.c

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -731,8 +731,11 @@ static struct cas_param cas_cache_params[] = {
731731
[cache_param_cleaning_alru_activity_threshold] = {
732732
.name = "Activity threshold [ms]" ,
733733
},
734-
[cache_param_cleaning_alru_max_dirty_ratio] = {
735-
.name = "Maximum dirty ratio [percent]",
734+
[cache_param_cleaning_alru_dirty_ratio_threshold] = {
735+
.name = "Dirty ratio trigger threshold [%]",
736+
},
737+
[cache_param_cleaning_alru_dirty_ratio_inertia] = {
738+
.name = "Dirty ratio trigger inertia [%]",
736739
},
737740

738741
/* Cleaning policy ACP params */
@@ -778,8 +781,10 @@ static struct cas_param cas_cache_params[] = {
778781
" <%d-%d> (default: %d)"
779782
#define CLEANING_ALRU_ACTIVITY_THRESHOLD_DESC "Cache idle time before flushing thread can start <%d-%d>[ms]" \
780783
" (default: %d ms)"
781-
#define CLEANING_ALRU_MAX_DIRTY_RATIO_DESC "Maximum dirty ratio of the cache device" \
782-
" <%d-%d> (default: %d)"
784+
#define CLEANING_ALRU_DIRTY_RATIO_THRESHOLD_DESC "Dirty ratio of the cache device at which cleaning will be triggered" \
785+
" <%d-%d>[%] (default: %d%)"
786+
#define CLEANING_ALRU_DIRTY_RATIO_INERTIA_DESC "Inertia for dirty ratio triggered cleaning - the trigger will be disabled" \
787+
" after dirty ratio falls to (trigger - inertia)% <%d-%d>[%] (default: %d%)"
783788

784789
#define CLEANING_ACP_WAKE_UP_DESC "Time between ACP cleaning thread iterations <%d-%d>[ms] (default: %d ms)"
785790
#define CLEANING_ACP_MAX_BUFFERS_DESC "Number of cache lines flushed in single ACP cleaning thread iteration" \
@@ -840,10 +845,14 @@ static cli_namespace set_param_namespace = {
840845
CLI_OPTION_RANGE_INT | CLI_OPTION_DEFAULT_INT,
841846
OCF_ALRU_MIN_ACTIVITY_THRESHOLD, OCF_ALRU_MAX_ACTIVITY_THRESHOLD,
842847
OCF_ALRU_DEFAULT_ACTIVITY_THRESHOLD},
843-
{'d', "max-dirty-ratio", CLEANING_ALRU_MAX_DIRTY_RATIO_DESC, 1, "NUMBER",
848+
{'d', "dirty-ratio-threshold", CLEANING_ALRU_DIRTY_RATIO_THRESHOLD_DESC, 1, "NUMBER",
844849
CLI_OPTION_RANGE_INT | CLI_OPTION_DEFAULT_INT,
845-
OCF_ALRU_MIN_MAX_DIRTY_RATIO, OCF_ALRU_MAX_MAX_DIRTY_RATIO,
846-
OCF_ALRU_DEFAULT_MAX_DIRTY_RATIO},
850+
OCF_ALRU_MIN_DIRTY_RATIO_THRESHOLD, OCF_ALRU_MAX_DIRTY_RATIO_THRESHOLD,
851+
OCF_ALRU_DEFAULT_DIRTY_RATIO_THRESHOLD},
852+
{0, "dirty-ratio-inertia", CLEANING_ALRU_DIRTY_RATIO_INERTIA_DESC, 1, "NUMBER",
853+
CLI_OPTION_RANGE_INT | CLI_OPTION_DEFAULT_INT,
854+
OCF_ALRU_MIN_DIRTY_RATIO_INERTIA, OCF_ALRU_MAX_DIRTY_RATIO_INERTIA,
855+
OCF_ALRU_DEFAULT_DIRTY_RATIO_INERTIA},
847856
CACHE_PARAMS_NS_END()
848857

849858
CACHE_PARAMS_NS_BEGIN("cleaning-acp", "Cleaning policy ACP parameters")
@@ -955,13 +964,21 @@ int set_param_cleaning_alru_handle_option(char *opt, const char **arg)
955964

956965
SET_CACHE_PARAM(cache_param_cleaning_alru_activity_threshold,
957966
strtoul(arg[0], NULL, 10));
958-
} else if (!strcmp(opt, "max-dirty-ratio")) {
959-
if (validate_str_num(arg[0], "max dirty ratio",
960-
OCF_ALRU_MIN_MAX_DIRTY_RATIO, OCF_ALRU_MAX_MAX_DIRTY_RATIO)) {
967+
} else if (!strcmp(opt, "dirty-ratio-threshold")) {
968+
if (validate_str_num(arg[0], "dirty ratio trigger threshold",
969+
OCF_ALRU_MIN_DIRTY_RATIO_THRESHOLD, OCF_ALRU_MAX_DIRTY_RATIO_THRESHOLD)) {
970+
return FAILURE;
971+
}
972+
973+
SET_CACHE_PARAM(cache_param_cleaning_alru_dirty_ratio_threshold,
974+
strtoul(arg[0], NULL, 10));
975+
} else if (!strcmp(opt, "dirty-ratio-inertia")) {
976+
if (validate_str_num(arg[0], "dirty ratio trigger inertia",
977+
OCF_ALRU_MIN_DIRTY_RATIO_INERTIA, OCF_ALRU_MAX_DIRTY_RATIO_INERTIA)) {
961978
return FAILURE;
962979
}
963980

964-
SET_CACHE_PARAM(cache_param_cleaning_alru_max_dirty_ratio,
981+
SET_CACHE_PARAM(cache_param_cleaning_alru_dirty_ratio_inertia,
965982
strtoul(arg[0], NULL, 10));
966983
} else {
967984
return FAILURE;
@@ -1143,7 +1160,8 @@ int get_param_namespace_handle_option(char *namespace, char *opt, const char **a
11431160
SELECT_CACHE_PARAM(cache_param_cleaning_alru_stale_buffer_time);
11441161
SELECT_CACHE_PARAM(cache_param_cleaning_alru_flush_max_buffers);
11451162
SELECT_CACHE_PARAM(cache_param_cleaning_alru_activity_threshold);
1146-
SELECT_CACHE_PARAM(cache_param_cleaning_alru_max_dirty_ratio);
1163+
SELECT_CACHE_PARAM(cache_param_cleaning_alru_dirty_ratio_threshold);
1164+
SELECT_CACHE_PARAM(cache_param_cleaning_alru_dirty_ratio_inertia);
11471165
return cache_param_handle_option_generic(opt, arg,
11481166
get_param_handle_option);
11491167
} else if (!strcmp(namespace, "cleaning-acp")) {

modules/cas_cache/layer_cache_management.c

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3639,9 +3639,15 @@ int cache_mngt_set_cache_params(struct kcas_set_cache_param *info)
36393639
ocf_cleaning_alru, ocf_alru_activity_threshold,
36403640
info->param_value);
36413641
break;
3642-
case cache_param_cleaning_alru_max_dirty_ratio:
3642+
case cache_param_cleaning_alru_dirty_ratio_threshold:
36433643
result = cache_mngt_set_cleaning_param(cache,
3644-
ocf_cleaning_alru, ocf_alru_max_dirty_ratio,
3644+
ocf_cleaning_alru,
3645+
ocf_alru_dirty_ratio_threshold,
3646+
info->param_value);
3647+
break;
3648+
case cache_param_cleaning_alru_dirty_ratio_inertia:
3649+
result = cache_mngt_set_cleaning_param(cache,
3650+
ocf_cleaning_alru, ocf_alru_dirty_ratio_inertia,
36453651
info->param_value);
36463652
break;
36473653

@@ -3708,9 +3714,15 @@ int cache_mngt_get_cache_params(struct kcas_get_cache_param *info)
37083714
ocf_cleaning_alru, ocf_alru_activity_threshold,
37093715
&info->param_value);
37103716
break;
3711-
case cache_param_cleaning_alru_max_dirty_ratio:
3717+
case cache_param_cleaning_alru_dirty_ratio_threshold:
3718+
result = cache_mngt_get_cleaning_param(cache,
3719+
ocf_cleaning_alru,
3720+
ocf_alru_dirty_ratio_threshold,
3721+
&info->param_value);
3722+
break;
3723+
case cache_param_cleaning_alru_dirty_ratio_inertia:
37123724
result = cache_mngt_get_cleaning_param(cache,
3713-
ocf_cleaning_alru, ocf_alru_max_dirty_ratio,
3725+
ocf_cleaning_alru, ocf_alru_dirty_ratio_inertia,
37143726
&info->param_value);
37153727
break;
37163728

modules/include/cas_ioctl_codes.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,8 @@ enum kcas_cache_param_id {
326326
cache_param_cleaning_alru_stale_buffer_time,
327327
cache_param_cleaning_alru_flush_max_buffers,
328328
cache_param_cleaning_alru_activity_threshold,
329-
cache_param_cleaning_alru_max_dirty_ratio,
329+
cache_param_cleaning_alru_dirty_ratio_threshold,
330+
cache_param_cleaning_alru_dirty_ratio_inertia,
330331
cache_param_cleaning_acp_wake_up_time,
331332
cache_param_cleaning_acp_flush_max_buffers,
332333
cache_param_promotion_policy_type,

0 commit comments

Comments
 (0)