| 13 | #endif |
| 14 | |
| 15 | static inline cache_t *create_cache(const char *trace_path, const char *eviction_algo, const uint64_t cache_size, |
| 16 | const char *eviction_params, const bool consider_obj_metadata) { |
| 17 | common_cache_params_t cc_params = { |
| 18 | .cache_size = cache_size, |
| 19 | .default_ttl = 86400 * 300, |
| 20 | .hashpower = 24, |
| 21 | .consider_obj_metadata = consider_obj_metadata, |
| 22 | }; |
| 23 | cache_t *cache; |
| 24 | |
| 25 | /* the trace provided is small */ |
| 26 | if (trace_path != NULL && strstr(trace_path, "data/trace.") != NULL) cc_params.hashpower -= 8; |
| 27 | |
| 28 | if (strcasecmp(eviction_algo, "lru") == 0) { |
| 29 | cache = LRU_init(cc_params, eviction_params); |
| 30 | } else if (strcasecmp(eviction_algo, "fifo") == 0) { |
| 31 | cache = FIFO_init(cc_params, eviction_params); |
| 32 | } else if (strcasecmp(eviction_algo, "arc") == 0) { |
| 33 | cache = ARC_init(cc_params, eviction_params); |
| 34 | } else if (strcasecmp(eviction_algo, "arcv0") == 0) { |
| 35 | cache = ARCv0_init(cc_params, eviction_params); |
| 36 | } else if (strcasecmp(eviction_algo, "lhd") == 0) { |
| 37 | cache = LHD_init(cc_params, eviction_params); |
| 38 | } else if (strcasecmp(eviction_algo, "random") == 0) { |
| 39 | cache = Random_init(cc_params, eviction_params); |
| 40 | } else if (strcasecmp(eviction_algo, "randomTwo") == 0) { |
| 41 | cache = RandomTwo_init(cc_params, eviction_params); |
| 42 | } else if (strcasecmp(eviction_algo, "lfu") == 0) { |
| 43 | cache = LFU_init(cc_params, eviction_params); |
| 44 | } else if (strcasecmp(eviction_algo, "gdsf") == 0) { |
| 45 | cache = GDSF_init(cc_params, eviction_params); |
| 46 | } else if (strcasecmp(eviction_algo, "lfuda") == 0) { |
| 47 | cache = LFUDA_init(cc_params, eviction_params); |
| 48 | } else if (strcasecmp(eviction_algo, "twoq") == 0 || strcasecmp(eviction_algo, "2q") == 0) { |
| 49 | cache = TwoQ_init(cc_params, eviction_params); |
| 50 | } else if (strcasecmp(eviction_algo, "slru") == 0) { |
| 51 | cache = SLRU_init(cc_params, eviction_params); |
| 52 | } else if (strcasecmp(eviction_algo, "slruv0") == 0) { |
| 53 | cache = SLRUv0_init(cc_params, eviction_params); |
| 54 | } else if (strcasecmp(eviction_algo, "hyperbolic") == 0) { |
| 55 | cc_params.hashpower = MAX(cc_params.hashpower - 8, 16); |
| 56 | cache = Hyperbolic_init(cc_params, eviction_params); |
| 57 | } else if (strcasecmp(eviction_algo, "lecar") == 0) { |
| 58 | cache = LeCaR_init(cc_params, eviction_params); |
| 59 | } else if (strcasecmp(eviction_algo, "lecarv0") == 0) { |
| 60 | cache = LeCaRv0_init(cc_params, eviction_params); |
| 61 | } else if (strcasecmp(eviction_algo, "RandomLRU") == 0) { |
| 62 | cache = RandomLRU_init(cc_params, eviction_params); |
| 63 | } else if (strcasecmp(eviction_algo, "cacheus") == 0) { |
| 64 | cache = Cacheus_init(cc_params, eviction_params); |
| 65 | } else if (strcasecmp(eviction_algo, "size") == 0) { |
| 66 | cache = Size_init(cc_params, eviction_params); |
| 67 | } else if (strcasecmp(eviction_algo, "lfucpp") == 0) { |
| 68 | cache = LFUCpp_init(cc_params, eviction_params); |
| 69 | } else if (strcasecmp(eviction_algo, "tinyLFU") == 0) { |
| 70 | if (eviction_params == NULL) { |
| 71 | cache = WTinyLFU_init(cc_params, eviction_params); |
| 72 | } else { |
no test coverage detected