From: Tomas Krizek Date: Thu, 16 May 2019 10:29:05 +0000 (+0200) Subject: utils/kr_cache_gc: add params for configuring cache X-Git-Tag: v4.1.0^2~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=83d77adc7a1d2ac207819abc85e2aadec181251c;p=thirdparty%2Fknot-resolver.git utils/kr_cache_gc: add params for configuring cache --- diff --git a/utils/kr_cache_gc/kr_cache_gc.c b/utils/kr_cache_gc/kr_cache_gc.c index fb448501e..a4036667d 100644 --- a/utils/kr_cache_gc/kr_cache_gc.c +++ b/utils/kr_cache_gc/kr_cache_gc.c @@ -18,9 +18,6 @@ #include "categories.h" #include "db.h" -#define MAX_OK_PERCENT_USAGE 80.0 -#define TO_BE_FREED_PERCENT 10.0 - // section: timer // TODO replace/move to contrib @@ -153,7 +150,7 @@ int kr_cache_gc(kr_cache_gc_cfg_t *cfg) return ret; } - if (cfg->dry_run || db_usage < MAX_OK_PERCENT_USAGE) { + if (cfg->dry_run || db_usage < cfg->cache_max_usage) { kr_gc_cache_close(&kres_db, db); return KNOT_EOK; } @@ -168,7 +165,7 @@ int kr_cache_gc(kr_cache_gc_cfg_t *cfg) return ret; } - ssize_t amount_tofree = (double)knot_db_lmdb_get_mapsize(db) * TO_BE_FREED_PERCENT / 100.0; + ssize_t amount_tofree = (double)knot_db_lmdb_get_mapsize(db) * cfg->cache_to_be_freed / 100.0; // debug /*printf("tofree: %zd\n", amount_tofree); diff --git a/utils/kr_cache_gc/kr_cache_gc.h b/utils/kr_cache_gc/kr_cache_gc.h index fc1806b91..5988ec762 100644 --- a/utils/kr_cache_gc/kr_cache_gc.h +++ b/utils/kr_cache_gc/kr_cache_gc.h @@ -22,6 +22,9 @@ typedef struct { unsigned long rw_txn_duration; // maximum duration of RW transaction in usecs (0 = unlimited) unsigned long rw_txn_delay; // waiting time between two RW transactions in usecs + uint8_t cache_max_usage; // maximum cache usage before triggering GC (percent) + uint8_t cache_to_be_freed; // percent of cache to be freed during GC + bool dry_run; } kr_cache_gc_cfg_t; diff --git a/utils/kr_cache_gc/main.c b/utils/kr_cache_gc/main.c index d4c0b5692..72ce13798 100644 --- a/utils/kr_cache_gc/main.c +++ b/utils/kr_cache_gc/main.c @@ -33,6 +33,8 @@ static void print_help() printf(" -d \n"); printf(" -l \n"); printf(" -m \n"); + printf(" -u \n"); + printf(" -f \n"); printf(" -w \n"); printf(" -t \n"); printf(" -n (= dry run)\n"); @@ -48,11 +50,14 @@ int main(int argc, char *argv[]) signal(SIGCHLD, got_killed); signal(SIGINT, got_killed); - kr_cache_gc_cfg_t cfg = { 0 }; - cfg.rw_txn_items = 100 + kr_cache_gc_cfg_t cfg = { + .rw_txn_items = 100, + .cache_max_usage = 80, + .cache_to_be_freed = 10 + }; int o; - while ((o = getopt(argc, argv, "hnc:d:l:m:w:t:")) != -1) { + while ((o = getopt(argc, argv, "hnc:d:l:m:u:f:w:t:")) != -1) { switch (o) { case 'c': cfg.cache_path = optarg; @@ -68,6 +73,12 @@ int main(int argc, char *argv[]) case 'm': get_nonneg_optarg(cfg.rw_txn_duration); break; + case 'u': + get_nonneg_optarg(cfg.cache_max_usage); + break; + case 'f': + get_nonneg_optarg(cfg.cache_to_be_freed); + break; case 'w': get_nonneg_optarg(cfg.rw_txn_delay); break;