MCPcopy Create free account
hub / github.com/1a1a11a/libCacheSim / _simulate

Function _simulate

libCacheSim/profiler/simulator.c:39–139  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

37} sim_mt_params_t;
38
39static void _simulate(gpointer data, gpointer user_data) {
40 sim_mt_params_t *params = (sim_mt_params_t *)user_data;
41 int idx = GPOINTER_TO_UINT(data) - 1;
42 if (params->use_random_seed) {
43 set_rand_seed(rand());
44 } else {
45 set_rand_seed(1);
46 }
47
48 cache_stat_t *result = params->result;
49 /* If an array of readers is provided, use the one corresponding to this cache; otherwise, use the single reader */
50 reader_t *source_reader = params->readers ? params->readers[idx] : params->reader;
51 reader_t *cloned_reader = clone_reader(source_reader);
52 request_t *req = new_request();
53 cache_t *local_cache = params->caches[idx];
54 strncpy(result[idx].cache_name, local_cache->cache_name, CACHE_NAME_ARRAY_LEN);
55
56 /* warm up using warmup_reader */
57 if (params->warmup_reader) {
58 reader_t *warmup_cloned_reader = clone_reader(params->warmup_reader);
59 read_one_req(warmup_cloned_reader, req);
60 while (req->valid) {
61 local_cache->get(local_cache, req);
62 result[idx].n_warmup_req += 1;
63 read_one_req(warmup_cloned_reader, req);
64 }
65 close_reader(warmup_cloned_reader);
66 INFO("cache %s (size %" PRIu64
67 ") finishes warm up using warmup reader "
68 "with %" PRIu64 " requests\n",
69 local_cache->cache_name, local_cache->cache_size, result[idx].n_warmup_req);
70 }
71
72 read_one_req(cloned_reader, req);
73 int64_t start_ts = (int64_t)req->clock_time;
74
75 /* using warmup_frac or warmup_sec of requests from reader to warm up */
76 if (params->n_warmup_req > 0 || params->warmup_sec > 0) {
77 uint64_t n_warmup = 0;
78 while (req->valid && (n_warmup < params->n_warmup_req || req->clock_time - start_ts < params->warmup_sec)) {
79 req->clock_time -= start_ts;
80 local_cache->get(local_cache, req);
81 n_warmup += 1;
82 read_one_req(cloned_reader, req);
83 }
84 result[idx].n_warmup_req += n_warmup;
85 INFO("cache %s (size %" PRIu64
86 ") finishes warm up using "
87 "with %" PRIu64 " requests, %.2lf hour trace time\n",
88 local_cache->cache_name, local_cache->cache_size, n_warmup, (double)(req->clock_time - start_ts) / 3600.0);
89 }
90
91 while (req->valid) {
92 result[idx].n_req++;
93 result[idx].n_req_byte += req->obj_size;
94
95 req->clock_time -= start_ts;
96 if (local_cache->get(local_cache, req) == false) {

Callers

nothing calls this directly

Calls 8

clone_readerFunction · 0.85
new_requestFunction · 0.85
read_one_reqFunction · 0.85
close_readerFunction · 0.85
get_cache_stateFunction · 0.85
free_requestFunction · 0.85
set_rand_seedFunction · 0.50
getMethod · 0.45

Tested by

no test coverage detected