From 23aba6a9f3f4c16237364cb9e6f53621758fb8fd Mon Sep 17 00:00:00 2001 From: Michal Rakowski Date: Wed, 25 Sep 2019 09:42:15 +0200 Subject: [PATCH 1/3] nhit PP: Added info about setting nhit params Signed-off-by: Michal Rakowski --- src/promotion/nhit/nhit.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/promotion/nhit/nhit.c b/src/promotion/nhit/nhit.c index fd60faa..cf4fffd 100644 --- a/src/promotion/nhit/nhit.c +++ b/src/promotion/nhit/nhit.c @@ -68,12 +68,17 @@ ocf_error_t nhit_set_param(ocf_promotion_policy_t policy, uint8_t param_id, { struct nhit_policy_context *ctx = policy->ctx; ocf_error_t result = 0; + uint64_t thr_clines; + uint32_t thr_percent; switch (param_id) { case ocf_nhit_insertion_threshold: if (param_value >= OCF_NHIT_MIN_THRESHOLD && param_value <= OCF_NHIT_MAX_THRESHOLD) { env_atomic_set(&ctx->insertion_threshold, param_value); + ocf_cache_log(policy->owner, log_info, + "Nhit PP insertion threshold value set to %u", + param_value); } else { ocf_cache_log(policy->owner, log_err, "Invalid nhit " "promotion policy insertion threshold!\n"); @@ -84,11 +89,17 @@ ocf_error_t nhit_set_param(ocf_promotion_policy_t policy, uint8_t param_id, case ocf_nhit_trigger_threshold: if (param_value >= OCF_NHIT_MIN_TRIGGER && param_value <= OCF_NHIT_MAX_TRIGGER) { - env_atomic64_set(&ctx->trigger_threshold, - OCF_DIV_ROUND_UP((param_value * + thr_clines = OCF_DIV_ROUND_UP((param_value * ocf_metadata_get_cachelines_count(policy->owner)), - 100)); + 100); + env_atomic64_set(&ctx->trigger_threshold, thr_clines); + thr_percent = OCF_DIV_ROUND_UP(thr_clines * 100, + ocf_metadata_get_cachelines_count(policy->owner)); + ocf_cache_log(policy->owner, log_info, + "Nhit PP trigger threshold value set to %u%% (%" + ENV_PRIu64 "occupied cachelines)", + thr_percent, thr_clines); } else { ocf_cache_log(policy->owner, log_err, "Invalid nhit " "promotion policy insertion trigger " From 547306efea9043d01f30d5ca20460cfd0e56b170 Mon Sep 17 00:00:00 2001 From: Michal Rakowski Date: Wed, 25 Sep 2019 14:15:40 +0200 Subject: [PATCH 2/3] nhit PP: change trigger_threshold to percent value Signed-off-by: Michal Rakowski --- src/promotion/nhit/nhit.c | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/src/promotion/nhit/nhit.c b/src/promotion/nhit/nhit.c index cf4fffd..4a6c897 100644 --- a/src/promotion/nhit/nhit.c +++ b/src/promotion/nhit/nhit.c @@ -18,7 +18,7 @@ struct nhit_policy_context { /* Configurable parameters */ env_atomic insertion_threshold; - env_atomic64 trigger_threshold; + env_atomic trigger_threshold; }; ocf_error_t nhit_init(ocf_cache_t cache, ocf_promotion_policy_t policy) @@ -38,10 +38,7 @@ ocf_error_t nhit_init(ocf_cache_t cache, ocf_promotion_policy_t policy) goto dealloc_ctx; env_atomic_set(&ctx->insertion_threshold, OCF_NHIT_THRESHOLD_DEFAULT); - env_atomic64_set(&ctx->trigger_threshold, - OCF_DIV_ROUND_UP((OCF_NHIT_TRIGGER_DEFAULT * - ocf_metadata_get_cachelines_count(cache)), 100)); - + env_atomic_set(&ctx->trigger_threshold, OCF_NHIT_TRIGGER_DEFAULT); policy->ctx = ctx; return 0; @@ -68,8 +65,6 @@ ocf_error_t nhit_set_param(ocf_promotion_policy_t policy, uint8_t param_id, { struct nhit_policy_context *ctx = policy->ctx; ocf_error_t result = 0; - uint64_t thr_clines; - uint32_t thr_percent; switch (param_id) { case ocf_nhit_insertion_threshold: @@ -89,17 +84,10 @@ ocf_error_t nhit_set_param(ocf_promotion_policy_t policy, uint8_t param_id, case ocf_nhit_trigger_threshold: if (param_value >= OCF_NHIT_MIN_TRIGGER && param_value <= OCF_NHIT_MAX_TRIGGER) { - thr_clines = OCF_DIV_ROUND_UP((param_value * - ocf_metadata_get_cachelines_count(policy->owner)), - 100); - env_atomic64_set(&ctx->trigger_threshold, thr_clines); - - thr_percent = OCF_DIV_ROUND_UP(thr_clines * 100, - ocf_metadata_get_cachelines_count(policy->owner)); + env_atomic_set(&ctx->trigger_threshold, param_value); ocf_cache_log(policy->owner, log_info, - "Nhit PP trigger threshold value set to %u%% (%" - ENV_PRIu64 "occupied cachelines)", - thr_percent, thr_clines); + "Nhit PP trigger threshold value set to %u%%\n", + param_value); } else { ocf_cache_log(policy->owner, log_err, "Invalid nhit " "promotion policy insertion trigger " @@ -133,10 +121,7 @@ ocf_error_t nhit_get_param(ocf_promotion_policy_t policy, uint8_t param_id, *param_value = env_atomic_read(&ctx->insertion_threshold); break; case ocf_nhit_trigger_threshold: - *param_value = OCF_DIV_ROUND_UP( - env_atomic64_read(&ctx->trigger_threshold) * 100, - ocf_metadata_get_cachelines_count(policy->owner) - ); + *param_value = env_atomic_read(&ctx->trigger_threshold); break; default: ocf_cache_log(policy->owner, log_err, "Invalid nhit " @@ -199,7 +184,9 @@ bool nhit_req_should_promote(ocf_promotion_policy_t policy, ocf_metadata_collision_table_entries(policy->owner) - ocf_freelist_num_free(policy->owner->freelist); - if (occupied_cachelines < env_atomic64_read(&ctx->trigger_threshold)) + if (occupied_cachelines < OCF_DIV_ROUND_UP( + ((uint64_t) env_atomic_read(&ctx->trigger_threshold) * + ocf_metadata_get_cachelines_count(policy->owner)), 100)) return true; for (i = 0, core_line = req->core_line_first; From 5efa5ac4144c9591e429ba6db66db77db7ce9e73 Mon Sep 17 00:00:00 2001 From: Michal Rakowski Date: Wed, 25 Sep 2019 09:57:03 +0200 Subject: [PATCH 3/3] nhit PP: Prevent setting nhit policy again if it was already set --- src/promotion/promotion.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/promotion/promotion.c b/src/promotion/promotion.c index 2138ced..0303a34 100644 --- a/src/promotion/promotion.c +++ b/src/promotion/promotion.c @@ -68,6 +68,12 @@ ocf_error_t ocf_promotion_set_policy(ocf_promotion_policy_t policy, prev_policy = cache->conf_meta->promotion_policy_type; + if (type == prev_policy) { + ocf_cache_log(cache, log_info, "Promotion policy '%s' is already set\n", + ocf_promotion_policies[type].name); + return 0; + } + if (ocf_promotion_policies[prev_policy].deinit) ocf_promotion_policies[prev_policy].deinit(policy);