Merge pull request #104 from imjfckm/pp-in-casadm
Promotion Policy in OCL
This commit is contained in:
commit
ad98c52350
@ -265,6 +265,12 @@ static struct name_to_val_mapping cleaning_policy_names[] = {
|
|||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct name_to_val_mapping promotion_policy_names[] = {
|
||||||
|
{ .short_name = "always", .value = ocf_promotion_always },
|
||||||
|
{ .short_name = "nhit", .value = ocf_promotion_nhit },
|
||||||
|
{ NULL}
|
||||||
|
};
|
||||||
|
|
||||||
static struct name_to_val_mapping metadata_mode_names[] = {
|
static struct name_to_val_mapping metadata_mode_names[] = {
|
||||||
{ .short_name = "normal", .value = CAS_METADATA_MODE_NORMAL },
|
{ .short_name = "normal", .value = CAS_METADATA_MODE_NORMAL },
|
||||||
{ .short_name = "atomic", .value = CAS_METADATA_MODE_ATOMIC },
|
{ .short_name = "atomic", .value = CAS_METADATA_MODE_ATOMIC },
|
||||||
@ -434,6 +440,16 @@ inline const char *cleaning_policy_to_name(uint8_t policy)
|
|||||||
return val_to_short_name(policy, cleaning_policy_names, "Unknown");
|
return val_to_short_name(policy, cleaning_policy_names, "Unknown");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline int validate_str_promotion_policy(const char *s)
|
||||||
|
{
|
||||||
|
return validate_str_val_mapping(s, promotion_policy_names, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline const char *promotion_policy_to_name(uint8_t policy)
|
||||||
|
{
|
||||||
|
return val_to_short_name(policy, promotion_policy_names, "Unknown");
|
||||||
|
}
|
||||||
|
|
||||||
const char *metadata_mode_to_name(uint8_t metadata_mode)
|
const char *metadata_mode_to_name(uint8_t metadata_mode)
|
||||||
{
|
{
|
||||||
return val_to_short_name(metadata_mode, metadata_mode_names, "Invalid");
|
return val_to_short_name(metadata_mode, metadata_mode_names, "Invalid");
|
||||||
@ -707,6 +723,7 @@ struct cache_device *get_cache_device(const struct kcas_cache_info *info)
|
|||||||
cache->flushed = info->info.flushed;
|
cache->flushed = info->info.flushed;
|
||||||
cache->eviction_policy = info->info.eviction_policy;
|
cache->eviction_policy = info->info.eviction_policy;
|
||||||
cache->cleaning_policy = info->info.cleaning_policy;
|
cache->cleaning_policy = info->info.cleaning_policy;
|
||||||
|
cache->promotion_policy = info->info.promotion_policy;
|
||||||
cache->size = info->info.cache_line_size;
|
cache->size = info->info.cache_line_size;
|
||||||
|
|
||||||
if ((info->info.state & (1 << ocf_cache_state_running)) == 0) {
|
if ((info->info.state & (1 << ocf_cache_state_running)) == 0) {
|
||||||
|
@ -44,6 +44,7 @@ struct cache_device {
|
|||||||
int mode;
|
int mode;
|
||||||
int eviction_policy;
|
int eviction_policy;
|
||||||
int cleaning_policy;
|
int cleaning_policy;
|
||||||
|
int promotion_policy;
|
||||||
int dirty;
|
int dirty;
|
||||||
int flushed;
|
int flushed;
|
||||||
unsigned size;
|
unsigned size;
|
||||||
@ -92,6 +93,7 @@ enum metadata_mode_t {
|
|||||||
|
|
||||||
const char *eviction_policy_to_name(uint8_t policy);
|
const char *eviction_policy_to_name(uint8_t policy);
|
||||||
const char *cleaning_policy_to_name(uint8_t policy);
|
const char *cleaning_policy_to_name(uint8_t policy);
|
||||||
|
const char *promotion_policy_to_name(uint8_t policy);
|
||||||
const char *cache_mode_to_name(uint8_t cache_mode);
|
const char *cache_mode_to_name(uint8_t cache_mode);
|
||||||
const char *get_cache_state_name(int cache_state);
|
const char *get_cache_state_name(int cache_state);
|
||||||
const char *get_core_state_name(int core_state);
|
const char *get_core_state_name(int core_state);
|
||||||
@ -256,6 +258,7 @@ int validate_path(const char *path, int exist);
|
|||||||
int validate_str_cache_mode(const char *s);
|
int validate_str_cache_mode(const char *s);
|
||||||
int validate_str_ev_policy(const char *s);
|
int validate_str_ev_policy(const char *s);
|
||||||
int validate_str_cln_policy(const char *s);
|
int validate_str_cln_policy(const char *s);
|
||||||
|
int validate_str_promotion_policy(const char *s);
|
||||||
int validate_str_meta_variant(const char *s);
|
int validate_str_meta_variant(const char *s);
|
||||||
int validate_str_stats_filters(const char* s);
|
int validate_str_stats_filters(const char* s);
|
||||||
int validate_str_output_format(const char* s);
|
int validate_str_output_format(const char* s);
|
||||||
|
@ -50,6 +50,7 @@ struct command_args{
|
|||||||
int cache_state_flush;
|
int cache_state_flush;
|
||||||
int flush_data;
|
int flush_data;
|
||||||
int cleaning_policy_type;
|
int cleaning_policy_type;
|
||||||
|
int promotion_policy_type;
|
||||||
int script_subcmd;
|
int script_subcmd;
|
||||||
int try_add;
|
int try_add;
|
||||||
int update_path;
|
int update_path;
|
||||||
@ -75,6 +76,7 @@ static struct command_args command_args_values = {
|
|||||||
.cache_state_flush = UNDEFINED, /* three state logic: YES NO UNDEFINED */
|
.cache_state_flush = UNDEFINED, /* three state logic: YES NO UNDEFINED */
|
||||||
.flush_data = 1,
|
.flush_data = 1,
|
||||||
.cleaning_policy_type = 0,
|
.cleaning_policy_type = 0,
|
||||||
|
.promotion_policy_type = 0,
|
||||||
.script_subcmd = -1,
|
.script_subcmd = -1,
|
||||||
.try_add = false,
|
.try_add = false,
|
||||||
.update_path = false,
|
.update_path = false,
|
||||||
@ -560,6 +562,12 @@ static char *cleaning_policy_type_values[] = {
|
|||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static char *promotion_policy_type_values[] = {
|
||||||
|
[ocf_promotion_always] = "always",
|
||||||
|
[ocf_promotion_nhit] = "nhit",
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
static struct cas_param cas_cache_params[] = {
|
static struct cas_param cas_cache_params[] = {
|
||||||
/* Cleaning policy type */
|
/* Cleaning policy type */
|
||||||
[cache_param_cleaning_policy_type] = {
|
[cache_param_cleaning_policy_type] = {
|
||||||
@ -588,6 +596,20 @@ static struct cas_param cas_cache_params[] = {
|
|||||||
[cache_param_cleaning_acp_flush_max_buffers] = {
|
[cache_param_cleaning_acp_flush_max_buffers] = {
|
||||||
.name = "Flush max buffers" ,
|
.name = "Flush max buffers" ,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/* Promotion policy type */
|
||||||
|
[cache_param_promotion_policy_type] = {
|
||||||
|
.name = "Promotion policy type",
|
||||||
|
.value_names = promotion_policy_type_values,
|
||||||
|
},
|
||||||
|
|
||||||
|
/*Promotion policy NHIT params */
|
||||||
|
[cache_param_promotion_nhit_insertion_threshold] = {
|
||||||
|
.name = "Insertion threshold",
|
||||||
|
},
|
||||||
|
[cache_param_promotion_nhit_trigger_threshold] = {
|
||||||
|
.name = "Policy trigger [%]",
|
||||||
|
},
|
||||||
{0},
|
{0},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -614,6 +636,15 @@ static struct cas_param cas_cache_params[] = {
|
|||||||
#define CLEANING_ACP_MAX_BUFFERS_DESC "Number of cache lines flushed in single ACP cleaning thread iteration" \
|
#define CLEANING_ACP_MAX_BUFFERS_DESC "Number of cache lines flushed in single ACP cleaning thread iteration" \
|
||||||
" <%d-%d> (default: %d)"
|
" <%d-%d> (default: %d)"
|
||||||
|
|
||||||
|
#define PROMOTION_POLICY_TYPE_DESC "Promotion policy type. "\
|
||||||
|
"Available policy types: {always|nhit}"
|
||||||
|
|
||||||
|
#define PROMOTION_NHIT_TRIGGER_DESC "Cache occupancy value over which NHIT promotion is active " \
|
||||||
|
"<%d-%d>[%] (default: %d%)"
|
||||||
|
|
||||||
|
#define PROMOTION_NHIT_THRESHOLD_DESC "Number of requests for given core line " \
|
||||||
|
"after which NHIT policy allows insertion into cache <%d-%d> (default: %d)"
|
||||||
|
|
||||||
static cli_namespace set_param_namespace = {
|
static cli_namespace set_param_namespace = {
|
||||||
.short_name = 'n',
|
.short_name = 'n',
|
||||||
.long_name = "name",
|
.long_name = "name",
|
||||||
@ -627,6 +658,21 @@ static cli_namespace set_param_namespace = {
|
|||||||
{'p', "policy", CLEANING_POLICY_TYPE_DESC, 1, "POLICY", 0},
|
{'p', "policy", CLEANING_POLICY_TYPE_DESC, 1, "POLICY", 0},
|
||||||
CACHE_PARAMS_NS_END()
|
CACHE_PARAMS_NS_END()
|
||||||
|
|
||||||
|
CACHE_PARAMS_NS_BEGIN("promotion", "Promotion policy parameters")
|
||||||
|
{'p', "policy", PROMOTION_POLICY_TYPE_DESC, 1, "POLICY", 0},
|
||||||
|
CACHE_PARAMS_NS_END()
|
||||||
|
|
||||||
|
CACHE_PARAMS_NS_BEGIN("promotion-nhit", "Promotion policy NHIT parameters")
|
||||||
|
{'t', "threshold", PROMOTION_NHIT_THRESHOLD_DESC, 1, "NUMBER",
|
||||||
|
CLI_OPTION_RANGE_INT | CLI_OPTION_DEFAULT_INT,
|
||||||
|
OCF_NHIT_MIN_THRESHOLD, OCF_NHIT_MAX_THRESHOLD,
|
||||||
|
OCF_NHIT_THRESHOLD_DEFAULT},
|
||||||
|
{'o', "trigger", PROMOTION_NHIT_TRIGGER_DESC, 1, "NUMBER",
|
||||||
|
CLI_OPTION_RANGE_INT | CLI_OPTION_DEFAULT_INT,
|
||||||
|
OCF_NHIT_MIN_TRIGGER, OCF_NHIT_MAX_TRIGGER,
|
||||||
|
OCF_NHIT_TRIGGER_DEFAULT},
|
||||||
|
CACHE_PARAMS_NS_END()
|
||||||
|
|
||||||
CACHE_PARAMS_NS_BEGIN("cleaning-alru", "Cleaning policy ALRU parameters")
|
CACHE_PARAMS_NS_BEGIN("cleaning-alru", "Cleaning policy ALRU parameters")
|
||||||
{'w', "wake-up", CLEANING_ALRU_WAKE_UP_DESC, 1, "NUMBER",
|
{'w', "wake-up", CLEANING_ALRU_WAKE_UP_DESC, 1, "NUMBER",
|
||||||
CLI_OPTION_RANGE_INT | CLI_OPTION_DEFAULT_INT,
|
CLI_OPTION_RANGE_INT | CLI_OPTION_DEFAULT_INT,
|
||||||
@ -772,6 +818,49 @@ int set_param_cleaning_acp_handle_option(char *opt, const char **arg)
|
|||||||
|
|
||||||
SET_CACHE_PARAM(cache_param_cleaning_acp_flush_max_buffers,
|
SET_CACHE_PARAM(cache_param_cleaning_acp_flush_max_buffers,
|
||||||
strtoul(arg[0], NULL, 10));
|
strtoul(arg[0], NULL, 10));
|
||||||
|
}
|
||||||
|
|
||||||
|
return FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int set_param_promotion_handle_option(char *opt, const char **arg)
|
||||||
|
{
|
||||||
|
if (!strcmp(opt, "policy")) {
|
||||||
|
if (!strcmp("always", arg[0])) {
|
||||||
|
SET_CACHE_PARAM(cache_param_promotion_policy_type,
|
||||||
|
ocf_promotion_always);
|
||||||
|
} else if (!strcmp("nhit", arg[0])) {
|
||||||
|
SET_CACHE_PARAM(cache_param_promotion_policy_type,
|
||||||
|
ocf_promotion_nhit);
|
||||||
|
} else {
|
||||||
|
cas_printf(LOG_ERR, "Error: Invalid policy name.\n");
|
||||||
|
return FAILURE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int set_param_promotion_nhit_handle_option(char *opt, const char **arg)
|
||||||
|
{
|
||||||
|
if (!strcmp(opt, "threshold")) {
|
||||||
|
if (validate_str_num(arg[0], "threshold",
|
||||||
|
OCF_NHIT_MIN_THRESHOLD, OCF_NHIT_MAX_THRESHOLD)) {
|
||||||
|
return FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
SET_CACHE_PARAM(cache_param_promotion_nhit_insertion_threshold,
|
||||||
|
strtoul(arg[0], NULL, 10));
|
||||||
|
} else if (!strcmp(opt, "trigger")) {
|
||||||
|
if (validate_str_num(arg[0], "trigger",
|
||||||
|
OCF_NHIT_MIN_TRIGGER, OCF_NHIT_MAX_THRESHOLD)) {
|
||||||
|
return FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
SET_CACHE_PARAM(cache_param_promotion_nhit_trigger_threshold,
|
||||||
|
strtoul(arg[0], NULL, 10));
|
||||||
} else {
|
} else {
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
}
|
}
|
||||||
@ -793,6 +882,12 @@ int set_param_namespace_handle_option(char *namespace, char *opt, const char **a
|
|||||||
} else if (!strcmp(namespace, "cleaning-acp")) {
|
} else if (!strcmp(namespace, "cleaning-acp")) {
|
||||||
return cache_param_handle_option_generic(opt, arg,
|
return cache_param_handle_option_generic(opt, arg,
|
||||||
set_param_cleaning_acp_handle_option);
|
set_param_cleaning_acp_handle_option);
|
||||||
|
} else if (!strcmp(namespace, "promotion")) {
|
||||||
|
return cache_param_handle_option_generic(opt, arg,
|
||||||
|
set_param_promotion_handle_option);
|
||||||
|
} else if (!strcmp(namespace, "promotion-nhit")) {
|
||||||
|
return cache_param_handle_option_generic(opt, arg,
|
||||||
|
set_param_promotion_nhit_handle_option);
|
||||||
} else {
|
} else {
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
}
|
}
|
||||||
@ -831,6 +926,8 @@ static cli_namespace get_param_namespace = {
|
|||||||
GET_CACHE_PARAMS_NS("cleaning", "Cleaning policy parameters")
|
GET_CACHE_PARAMS_NS("cleaning", "Cleaning policy parameters")
|
||||||
GET_CACHE_PARAMS_NS("cleaning-alru", "Cleaning policy ALRU parameters")
|
GET_CACHE_PARAMS_NS("cleaning-alru", "Cleaning policy ALRU parameters")
|
||||||
GET_CACHE_PARAMS_NS("cleaning-acp", "Cleaning policy ACP parameters")
|
GET_CACHE_PARAMS_NS("cleaning-acp", "Cleaning policy ACP parameters")
|
||||||
|
GET_CACHE_PARAMS_NS("promotion", "Promotion policy parameters")
|
||||||
|
GET_CACHE_PARAMS_NS("promotion-nhit", "Promotion policy NHIT parameters")
|
||||||
|
|
||||||
{0},
|
{0},
|
||||||
},
|
},
|
||||||
@ -872,6 +969,15 @@ int get_param_namespace_handle_option(char *namespace, char *opt, const char **a
|
|||||||
SELECT_CACHE_PARAM(cache_param_cleaning_acp_flush_max_buffers);
|
SELECT_CACHE_PARAM(cache_param_cleaning_acp_flush_max_buffers);
|
||||||
return cache_param_handle_option_generic(opt, arg,
|
return cache_param_handle_option_generic(opt, arg,
|
||||||
get_param_handle_option);
|
get_param_handle_option);
|
||||||
|
} else if (!strcmp(namespace, "promotion")) {
|
||||||
|
SELECT_CACHE_PARAM(cache_param_promotion_policy_type);
|
||||||
|
return cache_param_handle_option_generic(opt, arg,
|
||||||
|
get_param_handle_option);
|
||||||
|
} else if (!strcmp(namespace, "promotion-nhit")) {
|
||||||
|
SELECT_CACHE_PARAM(cache_param_promotion_nhit_insertion_threshold);
|
||||||
|
SELECT_CACHE_PARAM(cache_param_promotion_nhit_trigger_threshold);
|
||||||
|
return cache_param_handle_option_generic(opt, arg,
|
||||||
|
get_param_handle_option);
|
||||||
} else {
|
} else {
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -548,6 +548,8 @@ int cache_stats_conf(int ctrl_fd, const struct kcas_cache_info *cache_info,
|
|||||||
eviction_policy_to_name(cache_info->info.eviction_policy));
|
eviction_policy_to_name(cache_info->info.eviction_policy));
|
||||||
print_kv_pair(outfile, "Cleaning Policy", "%s",
|
print_kv_pair(outfile, "Cleaning Policy", "%s",
|
||||||
cleaning_policy_to_name(cache_info->info.cleaning_policy));
|
cleaning_policy_to_name(cache_info->info.cleaning_policy));
|
||||||
|
print_kv_pair(outfile, "Promotion Policy", "%s",
|
||||||
|
promotion_policy_to_name(cache_info->info.promotion_policy));
|
||||||
print_kv_pair(outfile, "Cache line size", "%llu, [KiB]",
|
print_kv_pair(outfile, "Cache line size", "%llu, [KiB]",
|
||||||
cache_info->info.cache_line_size / KiB);
|
cache_info->info.cache_line_size / KiB);
|
||||||
|
|
||||||
|
@ -348,6 +348,73 @@ int cache_mngt_get_cleaning_param(ocf_cache_t cache, ocf_cleaning_t type,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cache_mngt_set_promotion_policy(ocf_cache_t cache, uint32_t type)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = _cache_mngt_lock_sync(cache);
|
||||||
|
if (result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = ocf_mngt_cache_promotion_set_policy(cache, type);
|
||||||
|
if (result)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
result = _cache_mngt_save_sync(cache);
|
||||||
|
|
||||||
|
out:
|
||||||
|
ocf_mngt_cache_unlock(cache);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cache_mngt_get_promotion_policy(ocf_cache_t cache, uint32_t *type)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = _cache_mngt_read_lock_sync(cache);
|
||||||
|
if (result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
*type = ocf_mngt_cache_promotion_get_policy(cache);
|
||||||
|
|
||||||
|
ocf_mngt_cache_read_unlock(cache);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cache_mngt_set_promotion_param(ocf_cache_t cache, uint32_t param_id,
|
||||||
|
uint32_t param_value)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = _cache_mngt_lock_sync(cache);
|
||||||
|
if (result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = ocf_mngt_cache_promotion_set_param(cache, param_id, param_value);
|
||||||
|
|
||||||
|
ocf_mngt_cache_unlock(cache);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cache_mngt_get_promotion_param(ocf_cache_t cache, uint32_t param_id,
|
||||||
|
uint32_t *param_value)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = _cache_mngt_read_lock_sync(cache);
|
||||||
|
if (result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = ocf_mngt_cache_promotion_get_param(cache, param_id, param_value);
|
||||||
|
|
||||||
|
ocf_mngt_cache_read_unlock(cache);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
struct get_paths_ctx {
|
struct get_paths_ctx {
|
||||||
char *core_path_name_tab;
|
char *core_path_name_tab;
|
||||||
int max_count;
|
int max_count;
|
||||||
@ -1064,6 +1131,7 @@ int cache_mngt_prepare_cache_cfg(struct ocf_mngt_cache_config *cfg,
|
|||||||
cfg->cache_mode = cmd->caching_mode;
|
cfg->cache_mode = cmd->caching_mode;
|
||||||
cfg->cache_line_size = cmd->line_size;
|
cfg->cache_line_size = cmd->line_size;
|
||||||
cfg->eviction_policy = cmd->eviction_policy;
|
cfg->eviction_policy = cmd->eviction_policy;
|
||||||
|
cfg->promotion_policy = ocf_promotion_default;
|
||||||
cfg->cache_line_size = cmd->line_size;
|
cfg->cache_line_size = cmd->line_size;
|
||||||
cfg->pt_unaligned_io = !unaligned_io;
|
cfg->pt_unaligned_io = !unaligned_io;
|
||||||
cfg->use_submit_io_fast = !use_io_scheduler;
|
cfg->use_submit_io_fast = !use_io_scheduler;
|
||||||
@ -2055,6 +2123,17 @@ int cache_mngt_set_cache_params(struct kcas_set_cache_param *info)
|
|||||||
ocf_cleaning_acp, ocf_acp_flush_max_buffers,
|
ocf_cleaning_acp, ocf_acp_flush_max_buffers,
|
||||||
info->param_value);
|
info->param_value);
|
||||||
break;
|
break;
|
||||||
|
case cache_param_promotion_policy_type:
|
||||||
|
result = cache_mngt_set_promotion_policy(cache, info->param_value);
|
||||||
|
break;
|
||||||
|
case cache_param_promotion_nhit_insertion_threshold:
|
||||||
|
result = cache_mngt_set_promotion_param(cache,
|
||||||
|
ocf_nhit_insertion_threshold, info->param_value);
|
||||||
|
break;
|
||||||
|
case cache_param_promotion_nhit_trigger_threshold:
|
||||||
|
result = cache_mngt_set_promotion_param(cache,
|
||||||
|
ocf_nhit_trigger_threshold, info->param_value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
result = -EINVAL;
|
result = -EINVAL;
|
||||||
}
|
}
|
||||||
@ -2109,6 +2188,19 @@ int cache_mngt_get_cache_params(struct kcas_get_cache_param *info)
|
|||||||
ocf_cleaning_acp, ocf_acp_flush_max_buffers,
|
ocf_cleaning_acp, ocf_acp_flush_max_buffers,
|
||||||
&info->param_value);
|
&info->param_value);
|
||||||
break;
|
break;
|
||||||
|
case cache_param_promotion_policy_type:
|
||||||
|
result = cache_mngt_get_promotion_policy(cache, &info->param_value);
|
||||||
|
break;
|
||||||
|
case cache_param_promotion_nhit_insertion_threshold:
|
||||||
|
result = cache_mngt_get_promotion_param(cache,
|
||||||
|
ocf_nhit_insertion_threshold,
|
||||||
|
&info->param_value);
|
||||||
|
break;
|
||||||
|
case cache_param_promotion_nhit_trigger_threshold:
|
||||||
|
result = cache_mngt_get_promotion_param(cache,
|
||||||
|
ocf_nhit_trigger_threshold,
|
||||||
|
&info->param_value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
result = -EINVAL;
|
result = -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,16 @@ int cache_mngt_set_cleaning_param(ocf_cache_t cache, ocf_cleaning_t type,
|
|||||||
int cache_mngt_get_cleaning_param(ocf_cache_t cache, ocf_cleaning_t type,
|
int cache_mngt_get_cleaning_param(ocf_cache_t cache, ocf_cleaning_t type,
|
||||||
uint32_t param_id, uint32_t *param_value);
|
uint32_t param_id, uint32_t *param_value);
|
||||||
|
|
||||||
|
int cache_mngt_set_promotion_policy(ocf_cache_t cache, uint32_t type);
|
||||||
|
|
||||||
|
int cache_mngt_get_promotion_policy(ocf_cache_t cache, uint32_t *type);
|
||||||
|
|
||||||
|
int cache_mngt_set_promotion_param(ocf_cache_t cache, uint32_t param_id,
|
||||||
|
uint32_t param_value);
|
||||||
|
|
||||||
|
int cache_mngt_get_promotion_param(ocf_cache_t cache, uint32_t param_id,
|
||||||
|
uint32_t *param_value);
|
||||||
|
|
||||||
int cache_mngt_add_core_to_cache(const char *cache_name,
|
int cache_mngt_add_core_to_cache(const char *cache_name,
|
||||||
struct ocf_mngt_core_config *cfg,
|
struct ocf_mngt_core_config *cfg,
|
||||||
struct kcas_insert_core *cmd_info);
|
struct kcas_insert_core *cmd_info);
|
||||||
|
@ -66,6 +66,10 @@ bool cas_upgrade_is_in_upgrade(void)
|
|||||||
* |core | core_X_path | string |
|
* |core | core_X_path | string |
|
||||||
* |core | core_X_type | uint |
|
* |core | core_X_type | uint |
|
||||||
* |------------|-------------------------------|---------------|
|
* |------------|-------------------------------|---------------|
|
||||||
|
* |promotion | promotion_policy | uint |
|
||||||
|
* |promotion | nhit_insertion_threshold| uint |
|
||||||
|
* |promotion | nhit_insertion_trigger | uint |
|
||||||
|
* |------------|-------------------------------|---------------|
|
||||||
* |flush | flush_cleaning_policy | uint |
|
* |flush | flush_cleaning_policy | uint |
|
||||||
* |flush | flush_wake_up_time | uint |
|
* |flush | flush_wake_up_time | uint |
|
||||||
* |flush | flush_staleness_time | uint |
|
* |flush | flush_staleness_time | uint |
|
||||||
@ -99,6 +103,10 @@ bool cas_upgrade_is_in_upgrade(void)
|
|||||||
#define CORE_SEQ_CUTOFF_THRESHOLD_STR "core_%lu_seq_cutoff_thresh"
|
#define CORE_SEQ_CUTOFF_THRESHOLD_STR "core_%lu_seq_cutoff_thresh"
|
||||||
#define CORE_SEQ_CUTOFF_POLICY_STR "core_%lu_seq_cutoff_policy"
|
#define CORE_SEQ_CUTOFF_POLICY_STR "core_%lu_seq_cutoff_policy"
|
||||||
|
|
||||||
|
#define PROMOTION_POLICY_STR "promotion_policy"
|
||||||
|
#define PROMOTION_NHIT_INSERTION_STR "nhit_insertion_threshold"
|
||||||
|
#define PROMOTION_NHIT_TRIGGER_STR "nhit_trigger_threshold"
|
||||||
|
|
||||||
#define CLEANING_POLICY_STR "flush_cleaning_policy"
|
#define CLEANING_POLICY_STR "flush_cleaning_policy"
|
||||||
#define CLEANING_ALRU_WAKEUP_TIME_STR "flush_wakeup_time"
|
#define CLEANING_ALRU_WAKEUP_TIME_STR "flush_wakeup_time"
|
||||||
#define CLEANING_ALRU_STALENESS_TIME_STR "flush_staleness_time"
|
#define CLEANING_ALRU_STALENESS_TIME_STR "flush_staleness_time"
|
||||||
@ -116,7 +124,8 @@ bool cas_upgrade_is_in_upgrade(void)
|
|||||||
#define IO_CLASS_CACHE_MODE_STR "io_class_%lu_cache_mode"
|
#define IO_CLASS_CACHE_MODE_STR "io_class_%lu_cache_mode"
|
||||||
|
|
||||||
#define CAS_UPGRADE_IFACE_VERSION_19_03_00 190300
|
#define CAS_UPGRADE_IFACE_VERSION_19_03_00 190300
|
||||||
#define CAS_UPGRADE_IFACE_CURRENT_VERSION CAS_UPGRADE_IFACE_VERSION_19_03_00
|
#define CAS_UPGRADE_IFACE_VERSION_19_09_00 190900
|
||||||
|
#define CAS_UPGRADE_IFACE_CURRENT_VERSION CAS_UPGRADE_IFACE_VERSION_19_09_00
|
||||||
|
|
||||||
static int _cas_upgrade_dump_cache_conf_main(ocf_cache_t cache,
|
static int _cas_upgrade_dump_cache_conf_main(ocf_cache_t cache,
|
||||||
struct cas_properties *cache_props)
|
struct cas_properties *cache_props)
|
||||||
@ -305,6 +314,72 @@ err:
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _cas_upgrade_dump_cache_conf_promotion(ocf_cache_t cache,
|
||||||
|
struct cas_properties *cache_props)
|
||||||
|
{
|
||||||
|
uint32_t promotion_type = ocf_promotion_default;
|
||||||
|
uint32_t nhit_insertion_threshold;
|
||||||
|
uint32_t nhit_trigger_threshold;
|
||||||
|
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
result = cache_mngt_get_promotion_policy(cache, &promotion_type);
|
||||||
|
if (result) {
|
||||||
|
printk(KERN_ERR OCF_PREFIX_SHORT
|
||||||
|
"Unable to get promotion policy type\n");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (promotion_type == ocf_promotion_nhit) {
|
||||||
|
result |= cache_mngt_get_promotion_param(cache,
|
||||||
|
ocf_nhit_insertion_threshold,
|
||||||
|
&nhit_insertion_threshold);
|
||||||
|
result |= cache_mngt_get_promotion_param(cache,
|
||||||
|
ocf_nhit_trigger_threshold,
|
||||||
|
&nhit_trigger_threshold);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result) {
|
||||||
|
printk(KERN_ERR OCF_PREFIX_SHORT
|
||||||
|
"Unable to get promotion policy params\n");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = cas_properties_add_uint(cache_props, PROMOTION_POLICY_STR,
|
||||||
|
promotion_type, CAS_PROPERTIES_CONST);
|
||||||
|
if (result) {
|
||||||
|
printk(KERN_ERR OCF_PREFIX_SHORT
|
||||||
|
"Error during adding promotion policy type\n");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (promotion_type == ocf_promotion_nhit) {
|
||||||
|
result = cas_properties_add_uint(cache_props,
|
||||||
|
PROMOTION_NHIT_INSERTION_STR,
|
||||||
|
nhit_insertion_threshold,
|
||||||
|
CAS_PROPERTIES_CONST);
|
||||||
|
if (result) {
|
||||||
|
printk(KERN_ERR OCF_PREFIX_SHORT
|
||||||
|
"Error during adding nhit insertion "
|
||||||
|
"threshold\n");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = cas_properties_add_uint(cache_props,
|
||||||
|
PROMOTION_NHIT_TRIGGER_STR,
|
||||||
|
nhit_trigger_threshold,
|
||||||
|
CAS_PROPERTIES_CONST);
|
||||||
|
if (result) {
|
||||||
|
printk(KERN_ERR OCF_PREFIX_SHORT
|
||||||
|
"Error during adding nhit trigger "
|
||||||
|
"threshold\n");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static int _cas_upgrade_dump_cache_conf_flush(ocf_cache_t cache,
|
static int _cas_upgrade_dump_cache_conf_flush(ocf_cache_t cache,
|
||||||
struct cas_properties *cache_props)
|
struct cas_properties *cache_props)
|
||||||
{
|
{
|
||||||
@ -315,6 +390,7 @@ static int _cas_upgrade_dump_cache_conf_flush(ocf_cache_t cache,
|
|||||||
uint32_t alru_activity_threshold;
|
uint32_t alru_activity_threshold;
|
||||||
uint32_t acp_thread_wakeup_time;
|
uint32_t acp_thread_wakeup_time;
|
||||||
uint32_t acp_flush_max_buffers;
|
uint32_t acp_flush_max_buffers;
|
||||||
|
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
CAS_DEBUG_TRACE();
|
CAS_DEBUG_TRACE();
|
||||||
@ -586,6 +662,10 @@ static int _cas_upgrade_dump_cache_conf(ocf_cache_t device,
|
|||||||
if (result)
|
if (result)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
result = _cas_upgrade_dump_cache_conf_promotion(device, cache_props);
|
||||||
|
if (result)
|
||||||
|
return result;
|
||||||
|
|
||||||
result = _cas_upgrade_dump_cache_conf_io_class(device, cache_props);
|
result = _cas_upgrade_dump_cache_conf_io_class(device, cache_props);
|
||||||
if (result)
|
if (result)
|
||||||
return result;
|
return result;
|
||||||
@ -1078,6 +1158,68 @@ static int _cas_upgrade_restore_conf_flush(struct cas_properties *cache_props,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _cas_upgrade_restore_conf_promotion(struct cas_properties *cache_props,
|
||||||
|
ocf_cache_t cache)
|
||||||
|
{
|
||||||
|
uint64_t promotion_type;
|
||||||
|
uint64_t nhit_insertion_threshold;
|
||||||
|
uint64_t nhit_trigger_threshold;
|
||||||
|
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
result = cas_properties_get_uint(cache_props, PROMOTION_POLICY_STR,
|
||||||
|
&promotion_type);
|
||||||
|
if (result) {
|
||||||
|
printk(KERN_ERR OCF_PREFIX_SHORT "Couldn't retrieve promotion "
|
||||||
|
"policy type \n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = cache_mngt_set_promotion_policy(cache, promotion_type);
|
||||||
|
if (result) {
|
||||||
|
printk(KERN_ERR OCF_PREFIX_SHORT "Couldn't set promotion policy\n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (promotion_type != ocf_promotion_nhit)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
result = cas_properties_get_uint(cache_props,
|
||||||
|
PROMOTION_NHIT_INSERTION_STR, &nhit_insertion_threshold);
|
||||||
|
if (result) {
|
||||||
|
printk(KERN_ERR OCF_PREFIX_SHORT "Couldn't retrieve NHIT insertion "
|
||||||
|
"threshold parameter \n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = cas_properties_get_uint(cache_props,
|
||||||
|
PROMOTION_NHIT_TRIGGER_STR, &nhit_trigger_threshold);
|
||||||
|
if (result) {
|
||||||
|
printk(KERN_ERR OCF_PREFIX_SHORT "Couldn't retrieve NHIT insertion "
|
||||||
|
"trigger parameter \n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = cache_mngt_set_promotion_param(cache, ocf_nhit_insertion_threshold,
|
||||||
|
nhit_insertion_threshold);
|
||||||
|
if (result) {
|
||||||
|
printk(KERN_ERR OCF_PREFIX_SHORT "Couldn't set NHIT insertion "
|
||||||
|
"threshold parameter \n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = cache_mngt_set_promotion_param(cache, ocf_nhit_trigger_threshold,
|
||||||
|
nhit_trigger_threshold);
|
||||||
|
if (result) {
|
||||||
|
printk(KERN_ERR OCF_PREFIX_SHORT "Couldn't set NHIT trigger "
|
||||||
|
"threshold parameter \n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static int _cas_upgrade_restore_conf_io_class(
|
static int _cas_upgrade_restore_conf_io_class(
|
||||||
struct cas_properties *cache_props, ocf_cache_t cache)
|
struct cas_properties *cache_props, ocf_cache_t cache)
|
||||||
{
|
{
|
||||||
@ -1210,6 +1352,10 @@ static int _cas_upgrade_restore_cache(struct cas_properties *cache_props)
|
|||||||
if (result)
|
if (result)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
result = _cas_upgrade_restore_conf_promotion(cache_props, cache);
|
||||||
|
if (result)
|
||||||
|
goto error;
|
||||||
|
|
||||||
result = _cas_upgrade_restore_conf_io_class(cache_props, cache);
|
result = _cas_upgrade_restore_conf_io_class(cache_props, cache);
|
||||||
if (result)
|
if (result)
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -353,6 +353,9 @@ enum kcas_cache_param_id {
|
|||||||
cache_param_cleaning_alru_activity_threshold,
|
cache_param_cleaning_alru_activity_threshold,
|
||||||
cache_param_cleaning_acp_wake_up_time,
|
cache_param_cleaning_acp_wake_up_time,
|
||||||
cache_param_cleaning_acp_flush_max_buffers,
|
cache_param_cleaning_acp_flush_max_buffers,
|
||||||
|
cache_param_promotion_policy_type,
|
||||||
|
cache_param_promotion_nhit_insertion_threshold,
|
||||||
|
cache_param_promotion_nhit_trigger_threshold,
|
||||||
cache_param_id_max,
|
cache_param_id_max,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
2
ocf
2
ocf
@ -1 +1 @@
|
|||||||
Subproject commit f86287ef06190b080f9529c9f2514e56da8b726b
|
Subproject commit af48ee56e3d86c5de4a0ce7def35a1fedf35edf4
|
@ -236,6 +236,8 @@ Available namespaces are:
|
|||||||
\fBcleaning\fR - Cleaning policy parameters.
|
\fBcleaning\fR - Cleaning policy parameters.
|
||||||
\fBcleaning-alru\fR - Cleaning policy ALRU parameters.
|
\fBcleaning-alru\fR - Cleaning policy ALRU parameters.
|
||||||
\fBcleaning-acp\fR - Cleaning policy ACP parameters.
|
\fBcleaning-acp\fR - Cleaning policy ACP parameters.
|
||||||
|
\fBpromotion\fR - Promotion policy parameters.
|
||||||
|
\fBpromotion-nhit\fR - Promotion policy NHIT parameters.
|
||||||
|
|
||||||
.SH Options that are valid with --set-param (-X) --name (-n) seq-cutoff are:
|
.SH Options that are valid with --set-param (-X) --name (-n) seq-cutoff are:
|
||||||
|
|
||||||
@ -310,6 +312,36 @@ Period of time between awakenings of flushing thread [ms] (default: 10 ms).
|
|||||||
.B -b, --flush-max-buffers <NUMBER>
|
.B -b, --flush-max-buffers <NUMBER>
|
||||||
Number of dirty cache blocks to be flushed in one cleaning cycle (default: 128).
|
Number of dirty cache blocks to be flushed in one cleaning cycle (default: 128).
|
||||||
|
|
||||||
|
.SH Options that are valid with --set-param (-X) --name (-n) promotion are:
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B -i, --cache-id <ID>
|
||||||
|
Identifier of cache instance <1-16384>.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B -p, --policy {always|nhit}
|
||||||
|
Promotion policy type to be used with a given cache instance.
|
||||||
|
|
||||||
|
Available policies:
|
||||||
|
.br
|
||||||
|
1. \fBalways\fR. Core lines are attempted to be promoted each time they're accessed.
|
||||||
|
.br
|
||||||
|
2. \fBnhit\fR. Core lines are attempted to be promoted after n accesses.
|
||||||
|
|
||||||
|
.SH Options that are valid with --set-param (-X) --name (-n) promotion-nhit are:
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B -i, --cache-id <ID>
|
||||||
|
Identifier of cache instance <1-16384>.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B -o, --trigger <PERCENTAGE>
|
||||||
|
Percent of cache to be occupied before cache inserts will be filtered by the policy.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B -t, --threshold <NUMBER>
|
||||||
|
Number of core line accesses required for it to be inserted into cache.
|
||||||
|
|
||||||
.SH Options that are valid with --get-param (-G) are:
|
.SH Options that are valid with --get-param (-G) are:
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
@ -322,6 +354,8 @@ Available namespaces are:
|
|||||||
\fBcleaning\fR - Cleaning policy parameters.
|
\fBcleaning\fR - Cleaning policy parameters.
|
||||||
\fBcleaning-alru\fR - Cleaning policy ALRU parameters.
|
\fBcleaning-alru\fR - Cleaning policy ALRU parameters.
|
||||||
\fBcleaning-acp\fR - Cleaning policy ACP parameters.
|
\fBcleaning-acp\fR - Cleaning policy ACP parameters.
|
||||||
|
\fBpromotion\fR - Promotion policy parameters.
|
||||||
|
\fBpromotion-nhit\fR - Promotion policy NHIT parameters.
|
||||||
|
|
||||||
.SH Options that are valid with --get-param (-G) --name (-n) seq-cutoff are:
|
.SH Options that are valid with --get-param (-G) --name (-n) seq-cutoff are:
|
||||||
|
|
||||||
@ -367,6 +401,26 @@ Identifier of cache instance <1-16384>.
|
|||||||
.B -o, --output-format {table|csv}
|
.B -o, --output-format {table|csv}
|
||||||
Defines output format for parameter list. It can be either \fBtable\fR (default) or \fBcsv\fR.
|
Defines output format for parameter list. It can be either \fBtable\fR (default) or \fBcsv\fR.
|
||||||
|
|
||||||
|
.SH Options that are valid with --get-param (-G) --name (-n) promotion are:
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B -i, --cache-id <ID>
|
||||||
|
Identifier of cache instance <1-16384>.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B -o, --output-format {table|csv}
|
||||||
|
Defines output format for parameter list. It can be either \fBtable\fR (default) or \fBcsv\fR.
|
||||||
|
|
||||||
|
.SH Options that are valid with --get-param (-G) --name (-n) promotion-nhit are:
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B -i, --cache-id <ID>
|
||||||
|
Identifier of cache instance <1-16384>.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B -o, --output-format {table|csv}
|
||||||
|
Defines output format for parameter list. It can be either \fBtable\fR (default) or \fBcsv\fR.
|
||||||
|
|
||||||
.SH Options that are valid with --set-cache-mode (-Q) are:
|
.SH Options that are valid with --set-cache-mode (-Q) are:
|
||||||
.TP
|
.TP
|
||||||
.B -c, --cache-mode {wt|wb|wa|pt}
|
.B -c, --cache-mode {wt|wb|wa|pt}
|
||||||
|
@ -24,7 +24,7 @@ Cache device <DEVICE>
|
|||||||
.br
|
.br
|
||||||
Cache mode {wt|wb|wa|pt}
|
Cache mode {wt|wb|wa|pt}
|
||||||
.br
|
.br
|
||||||
Extra fields (optional) ioclass_file=<file>,cleaning_policy=<alru,nop>
|
Extra fields (optional) ioclass_file=<file>,cleaning_policy=<alru,nop>,promotion_policy=<always,nhit>
|
||||||
.RE
|
.RE
|
||||||
.TP
|
.TP
|
||||||
\fB[cores]\fR Cores configuration. Following columns are required:
|
\fB[cores]\fR Cores configuration. Following columns are required:
|
||||||
|
@ -236,6 +236,8 @@ class cas_config(object):
|
|||||||
raise ValueError('Incorrect path to io_class file')
|
raise ValueError('Incorrect path to io_class file')
|
||||||
elif param_name == 'cleaning_policy':
|
elif param_name == 'cleaning_policy':
|
||||||
self.check_cleaning_policy_valid(param_value)
|
self.check_cleaning_policy_valid(param_value)
|
||||||
|
elif param_name == 'promotion_policy':
|
||||||
|
self.check_promotion_policy_valid(param_value)
|
||||||
elif param_name == 'cache_line_size':
|
elif param_name == 'cache_line_size':
|
||||||
self.check_cache_line_size_valid(param_value)
|
self.check_cache_line_size_valid(param_value)
|
||||||
else:
|
else:
|
||||||
@ -269,6 +271,11 @@ class cas_config(object):
|
|||||||
raise ValueError('{0} is invalid cleaning policy name'.format(
|
raise ValueError('{0} is invalid cleaning policy name'.format(
|
||||||
cleaning_policy))
|
cleaning_policy))
|
||||||
|
|
||||||
|
def check_promotion_policy_valid(self, promotion_policy):
|
||||||
|
if promotion_policy.lower() not in ['always', 'nhit']:
|
||||||
|
raise ValueError('{0} is invalid promotion policy name'.format(
|
||||||
|
promotion_policy))
|
||||||
|
|
||||||
def check_cache_line_size_valid(self, cache_line_size):
|
def check_cache_line_size_valid(self, cache_line_size):
|
||||||
if cache_line_size not in ['4', '8', '16', '32', '64']:
|
if cache_line_size not in ['4', '8', '16', '32', '64']:
|
||||||
raise ValueError('{0} is invalid cache line size'.format(
|
raise ValueError('{0} is invalid cache line size'.format(
|
||||||
@ -500,12 +507,19 @@ def start_cache(cache, load, force=False):
|
|||||||
force=force)
|
force=force)
|
||||||
|
|
||||||
def configure_cache(cache):
|
def configure_cache(cache):
|
||||||
if 'cleaning_policy' in cache.params:
|
if "cleaning_policy" in cache.params:
|
||||||
casadm.set_param('cleaning', cache_id=cache.cache_id,
|
casadm.set_param(
|
||||||
policy=cache.params['cleaning_policy'])
|
"cleaning", cache_id=cache.cache_id, policy=cache.params["cleaning_policy"]
|
||||||
if 'ioclass_file' in cache.params:
|
)
|
||||||
casadm.io_class_load_config(cache_id=cache.cache_id,
|
if "promotion_policy" in cache.params:
|
||||||
ioclass_file=cache.params['ioclass_file'])
|
casadm.set_param(
|
||||||
|
"promotion", cache_id=cache.cache_id, policy=cache.params["promotion"]
|
||||||
|
)
|
||||||
|
if "ioclass_file" in cache.params:
|
||||||
|
casadm.io_class_load_config(
|
||||||
|
cache_id=cache.cache_id, ioclass_file=cache.params["ioclass_file"]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def add_core(core, attach):
|
def add_core(core, attach):
|
||||||
casadm.add_core(
|
casadm.add_core(
|
||||||
|
Loading…
Reference in New Issue
Block a user