Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 63 additions & 82 deletions libCacheSim/bin/cachesim/cache_init.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@

#include <strings.h>
#define _GNU_SOURCE
Expand All @@ -24,48 +24,73 @@

/* the trace provided is small */
if (trace_path != NULL && strstr(trace_path, "data/trace.") != NULL) cc_params.hashpower -= 8;
typedef struct {
const char *name;
cache_t *(*init_func)(common_cache_params_t, const char *);
} eviction_algo_entry_t;

if (strcasecmp(eviction_algo, "lru") == 0) {
cache = LRU_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "fifo") == 0) {
cache = FIFO_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "arc") == 0) {
cache = ARC_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "arcv0") == 0) {
cache = ARCv0_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "lhd") == 0) {
cache = LHD_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "random") == 0) {
cache = Random_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "randomTwo") == 0) {
cache = RandomTwo_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "lfu") == 0) {
cache = LFU_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "gdsf") == 0) {
cache = GDSF_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "lfuda") == 0) {
cache = LFUDA_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "twoq") == 0 || strcasecmp(eviction_algo, "2q") == 0) {
cache = TwoQ_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "slru") == 0) {
cache = SLRU_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "slruv0") == 0) {
cache = SLRUv0_init(cc_params, eviction_params);
static const eviction_algo_entry_t simple_algos[] = {
{"lru", LRU_init},
{"fifo", FIFO_init},
{"arc", ARC_init},
{"arcv0", ARCv0_init},
{"lhd", LHD_init},
{"random", Random_init},
{"randomTwo", RandomTwo_init},
{"lfu", LFU_init},
{"gdsf", GDSF_init},
{"lfuda", LFUDA_init},
{"twoq", TwoQ_init},
{"2q", TwoQ_init},
{"slru", SLRU_init},
{"slruv0", SLRUv0_init},
{"lecar", LeCaR_init},
{"lecarv0", LeCaRv0_init},
{"RandomLRU", RandomLRU_init},
{"cacheus", Cacheus_init},
{"size", Size_init},
{"lfucpp", LFUCpp_init},
{"wtinyLFU", WTinyLFU_init},
{"nop", nop_init},
{"fifo-reinsertion", Clock_init},
{"clock", Clock_init},
{"second-chance", Clock_init},
{"clockpro", ClockPro_init},
{"lirs", LIRS_init},
{"fifomerge", FIFO_Merge_init},
{"fifo-merge", FIFO_Merge_init},
{"flashProb", flashProb_init},
{"sfifo", SFIFO_init},
{"sfifov0", SFIFOv0_init},
{"lru-prob", LRU_Prob_init},
{"fifo-belady", FIFO_Belady_init},
{"lru-belady", LRU_Belady_init},
{"sieve-belady", Sieve_Belady_init},
{"s3lru", S3LRU_init},
{"s3fifo", S3FIFO_init},
{"s3-fifo", S3FIFO_init},
{"s3fifov0", S3FIFOv0_init},
{"s3-fifov0", S3FIFOv0_init},
{"s3fifod", S3FIFOd_init},
{"qdlp", QDLP_init},
{"CAR", CAR_init},
{"sieve", Sieve_init},
};
Comment thread
laustam marked this conversation as resolved.

cache_t *(*init_func)(common_cache_params_t, const char *) = NULL;
for (size_t i = 0; i < sizeof(simple_algos) / sizeof(simple_algos[0]); ++i) {
if (strcasecmp(eviction_algo, simple_algos[i].name) == 0) {
init_func = simple_algos[i].init_func;
break;
}
}

// Initializing for algorithms which require special handling (not in simple_algos)
if (init_func) {
cache = init_func(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "hyperbolic") == 0) {
cc_params.hashpower = MAX(cc_params.hashpower - 8, 16);
cache = Hyperbolic_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "lecar") == 0) {
cache = LeCaR_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "lecarv0") == 0) {
cache = LeCaRv0_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "RandomLRU") == 0) {
cache = RandomLRU_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "cacheus") == 0) {
cache = Cacheus_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "size") == 0) {
cache = Size_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "lfucpp") == 0) {
cache = LFUCpp_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "tinyLFU") == 0) {
if (eviction_params == NULL) {
cache = WTinyLFU_init(cc_params, eviction_params);
Comment thread
laustam marked this conversation as resolved.
Expand All @@ -79,8 +104,6 @@
cache = WTinyLFU_init(cc_params, eviction_params);
}
}
} else if (strcasecmp(eviction_algo, "wtinyLFU") == 0) {
cache = WTinyLFU_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "belady") == 0 && strcasestr(trace_path, "lcs") == NULL) {
if (strcasestr(trace_path, "oracleGeneral") == NULL) {
WARN("belady is only supported for oracleGeneral and lcs trace\n");
Expand All @@ -90,8 +113,6 @@
exit(1);
}
cache = Belady_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "nop") == 0) {
cache = nop_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "beladySize") == 0) {
if (strcasestr(trace_path, "oracleGeneral") == NULL && strcasestr(trace_path, "lcs") == NULL) {
WARN("beladySize is only supported for oracleGeneral and lcs trace\n");
Expand All @@ -102,46 +123,6 @@
}
cc_params.hashpower = MAX(cc_params.hashpower - 8, 16);
cache = BeladySize_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "fifo-reinsertion") == 0 || strcasecmp(eviction_algo, "clock") == 0 ||
strcasecmp(eviction_algo, "second-chance") == 0) {
cache = Clock_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "clockpro") == 0) {
cache = ClockPro_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "lirs") == 0) {
cache = LIRS_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "fifomerge") == 0 || strcasecmp(eviction_algo, "fifo-merge") == 0) {
cache = FIFO_Merge_init(cc_params, eviction_params);
// } else if (strcasecmp(eviction_algo, "fifo-reinsertion") == 0) {
// cache = FIFO_Reinsertion_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "flashProb") == 0) {
// used to measure application level write amp
cache = flashProb_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "sfifo") == 0) {
cache = SFIFO_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "sfifov0") == 0) {
cache = SFIFOv0_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "lru-prob") == 0) {
cache = LRU_Prob_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "fifo-belady") == 0) {
cache = FIFO_Belady_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "lru-belady") == 0) {
cache = LRU_Belady_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "sieve-belady") == 0) {
cache = Sieve_Belady_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "s3lru") == 0) {
cache = S3LRU_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "s3fifo") == 0 || strcasecmp(eviction_algo, "s3-fifo") == 0) {
cache = S3FIFO_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "s3fifov0") == 0 || strcasecmp(eviction_algo, "s3-fifov0") == 0) {
cache = S3FIFOv0_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "s3fifod") == 0) {
cache = S3FIFOd_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "qdlp") == 0) {
cache = QDLP_init(cc_params, eviction_params);
} else if(strcasecmp(eviction_algo, "CAR") == 0) {
cache = CAR_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "sieve") == 0) {
cache = Sieve_init(cc_params, eviction_params);
#ifdef ENABLE_3L_CACHE
} else if (strcasecmp(eviction_algo, "3LCache") == 0) {
cache = ThreeLCache_init(cc_params, eviction_params);
Expand Down
Loading