Skip to content
Merged
Changes from all commits
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
218 changes: 98 additions & 120 deletions libCacheSim/bin/cachesim/cache_init.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,60 +12,108 @@
extern "C" {
#endif

static inline cache_t *create_cache(const char *trace_path, const char *eviction_algo, const uint64_t cache_size,
const char *eviction_params, const bool consider_obj_metadata) {
static inline cache_t *create_cache(const char *trace_path,
const char *eviction_algo,
const uint64_t cache_size,
const char *eviction_params,
const bool consider_obj_metadata) {
common_cache_params_t cc_params = {
.cache_size = cache_size,
.default_ttl = 86400 * 300,
.hashpower = 24,
.consider_obj_metadata = consider_obj_metadata,
};
.cache_size = cache_size,
.default_ttl = 86400 * 300,
.hashpower = 24,
.consider_obj_metadata = consider_obj_metadata,
};
cache_t *cache;

/* the trace provided is small */
if (trace_path != NULL && strstr(trace_path, "data/trace.") != NULL) cc_params.hashpower -= 8;
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},
#ifdef ENABLE_3L_CACHE
{"3LCache", ThreeLCache_init},
#endif
#ifdef ENABLE_GLCACHE
{"GLCache", GLCache_init},
{"gl-cache", GLCache_init},
#endif
#ifdef ENABLE_LRB
{"lrb", LRB_init},
#endif
#ifdef INCLUDE_PRIV
{"mclock", MClock_init},
{"lp-sfifo", LP_SFIFO_init},
{"lp-arc", LP_ARC_init},
{"lp-twoq", LP_TwoQ_init},
{"qdlpv0", QDLPv0_init},
{"s3fifodv2", S3FIFOdv2_init},
{"myMQv1", myMQv1_init}
#endif
};
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,9 +127,8 @@ static inline cache_t *create_cache(const char *trace_path, const char *eviction
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) {
} 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");
WARN("to convert a trace to lcs format\n");
Expand All @@ -90,10 +137,9 @@ static inline cache_t *create_cache(const char *trace_path, const char *eviction
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) {
if (strcasestr(trace_path, "oracleGeneral") == NULL &&
strcasestr(trace_path, "lcs") == NULL) {
WARN("beladySize is only supported for oracleGeneral and lcs trace\n");
WARN("to convert a trace to lcs format\n");
WARN("./bin/traceConv input_trace trace_format output_trace\n");
Expand All @@ -102,74 +148,6 @@ static inline cache_t *create_cache(const char *trace_path, const char *eviction
}
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);
#endif
#ifdef ENABLE_GLCACHE
} else if (strcasecmp(eviction_algo, "GLCache") == 0 || strcasecmp(eviction_algo, "gl-cache") == 0) {
cache = GLCache_init(cc_params, eviction_params);
#endif
#ifdef ENABLE_LRB
} else if (strcasecmp(eviction_algo, "lrb") == 0) {
cache = LRB_init(cc_params, eviction_params);
#endif
#ifdef INCLUDE_PRIV
} else if (strcasecmp(eviction_algo, "mclock") == 0) {
cache = MClock_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "lp-sfifo") == 0) {
cache = LP_SFIFO_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "lp-arc") == 0) {
cache = LP_ARC_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "lp-twoq") == 0) {
cache = LP_TwoQ_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "qdlpv0") == 0) {
cache = QDLPv0_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "s3fifodv2") == 0) {
cache = S3FIFOdv2_init(cc_params, eviction_params);
} else if (strcasecmp(eviction_algo, "myMQv1") == 0) {
cache = myMQv1_init(cc_params, eviction_params);
#endif
} else {
ERROR("do not support algorithm %s\n", eviction_algo);
abort();
Expand Down