Commit 8636389d authored by RAHUL BHARDWAJ's avatar RAHUL BHARDWAJ

Added experiment results

parent 8eabe343
...@@ -3,6 +3,8 @@ project(presto) ...@@ -3,6 +3,8 @@ project(presto)
set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD 14)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wno-unused -fno-omit-frame-pointer -O0") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wno-unused -fno-omit-frame-pointer -O0")
set(SOURCE_FILES main.cc metadata.h metadata.cc cache.h hashmap.cc hashmap.h cache.cc util.h policy.cc policy.h set(SOURCE_FILES main.cc metadata.h metadata.cc cache.h hashmap.cc hashmap.h cache.cc util.h policy.cc policy.h
......
...@@ -38,8 +38,8 @@ void exp1() ...@@ -38,8 +38,8 @@ void exp1()
struct ns_pair snapshot_rate[] = { struct ns_pair snapshot_rate[] = {
//{5000, "5000"}, //{5000, "5000"},
{10000, "10000"}, {10000, "10000"},
{50000, "50000"}, // {50000, "50000"},
{100000, "100000"}, // {100000, "100000"},
//{500000, "500K"}, //{500000, "500K"},
//{5, "5s"}, //{5, "5s"},
//{10, "10s"}, //{10, "10s"},
...@@ -49,25 +49,26 @@ void exp1() ...@@ -49,25 +49,26 @@ void exp1()
//{300, "5m"} //{300, "5m"}
}; };
struct ns_pair prewarm_set_size_limit[] = { struct ns_pair prewarm_set_size_limit[] = {
{5, "5%"}, // {5, "5%"},
{10, "10%"}, // {10, "10%"},
{25, "25%"}, // {25, "25%"},
{50, "50%"}, // {50, "50%"},
{75, "75%"}, {75, "75%"},
{100, "100%"} // {100, "100%"}
}; };
struct ns_pair prewarm_rate_limit[] = { struct ns_pair prewarm_rate_limit[] = {
{0, "0MBps"}, // {0, "0MBps"},
//{1000, "100MBps"}, {50, "50MBps"},
//{2000, "200MBps"} // {100, "100MBps"},
// {500, "200MBps"}
}; };
struct ns_pair heuristic[] = { struct ns_pair heuristic[] = {
//{K_FREQ, "K_FREQ"}, //{K_FREQ, "K_FREQ"},
{K_FREQ_MEM, "K_FREQ_MEM"}, {K_FREQ_MEM, "K_FREQ_MEM"},
//{K_RECN, "K_RECN"}, //{K_RECN, "K_RECN"},
{K_RECN_MEM, "K_RECN_MEM"}, // {K_RECN_MEM, "K_RECN_MEM"},
//{K_FRERECN, "K_FRERECN"}, //{K_FRERECN, "K_FRERECN"},
{K_FRERECN_MEM, "K_FRERECN_MEM"} // {K_FRERECN_MEM, "K_FRERECN_MEM"}
}; };
struct ns_pair score_recn[] = { struct ns_pair score_recn[] = {
{1, "1"}, {1, "1"},
......
...@@ -29,10 +29,10 @@ void exp2() ...@@ -29,10 +29,10 @@ void exp2()
pthread_t cache_thread, io_thread; pthread_t cache_thread, io_thread;
Workload *wload = new Workload("rreal.4hr"); // <------------------- Workload *wload = new Workload("real1"); // <-------------------
Hashmap *hm1 = new Hashmap(&comp_hm1, &print_hm1, nullptr); Hashmap *hm1 = new Hashmap(&comp_hm1, &print_hm1, nullptr);
Hashmap *hm3 = new Hashmap(&comp_hm3, &print_hm3, nullptr); Hashmap *hm3 = new Hashmap(&comp_hm3, &print_hm3, nullptr);
Cache *cache = new Cache(CACHE_A, hm1, hm3, wload, 32); // <------------------- Cache *cache = new Cache(CACHE_A, hm1, hm3, wload, 6400); // <-------------------
Hashmap *phm1 = new Hashmap(&comp_hm1, &print_hm1, nullptr); Hashmap *phm1 = new Hashmap(&comp_hm1, &print_hm1, nullptr);
Hashmap *phm3 = new Hashmap(&comp_hm3, &print_hm3, nullptr); Hashmap *phm3 = new Hashmap(&comp_hm3, &print_hm3, nullptr);
Cache *pcache = new Cache(); Cache *pcache = new Cache();
...@@ -42,9 +42,9 @@ void exp2() ...@@ -42,9 +42,9 @@ void exp2()
struct ns_pair snapshot_rate[] = { struct ns_pair snapshot_rate[] = {
//{5000, "5000"}, //{5000, "5000"},
{10000, "10000"}, {10000, "10000"},
//{50000, "50000"}, {50000, "50000"},
//{100000, "100000"}, {100000, "100000"},
//{500000, "500K"}, // {500000, "500K"},
//{5, "5s"}, //{5, "5s"},
//{10, "10s"}, //{10, "10s"},
//{15, "15s"}, //{15, "15s"},
...@@ -53,27 +53,24 @@ void exp2() ...@@ -53,27 +53,24 @@ void exp2()
//{300, "5m"} //{300, "5m"}
}; };
struct ns_pair prewarm_set_size_limit[] = { struct ns_pair prewarm_set_size_limit[] = {
{5, "5%"}, // {5, "5%"},
{10, "10%"}, // {10, "10%"},
{25, "25%"}, // {25, "25%"},
{50, "50%"}, {50, "50%"},
{75, "75%"}, {75, "75%"},
{100, "100%"} {100, "100%"}};
};
struct ns_pair prewarm_rate_limit[] = { struct ns_pair prewarm_rate_limit[] = {
{0, "0MBps"}, // {0, "0MBps"},
{50, "50MBps"}, {50, "50MBps"},
{100, "100MBps"}, {100, "100MBps"},
{500, "500MBps"} {500, "500MBps"}};
};
struct ns_pair heuristic[] = { struct ns_pair heuristic[] = {
//{K_FREQ, "K_FREQ"}, //{K_FREQ, "K_FREQ"},
{K_FREQ_MEM, "K_FREQ_MEM"}, {K_FREQ_MEM, "K_FREQ_MEM"},
//{K_RECN, "K_RECN"}, //{K_RECN, "K_RECN"},
{K_RECN_MEM, "K_RECN_MEM"}, {K_RECN_MEM, "K_RECN_MEM"},
//{K_FRERECN, "K_FRERECN"}, //{K_FRERECN, "K_FRERECN"},
{K_FRERECN_MEM, "K_FRERECN_MEM"} {K_FRERECN_MEM, "K_FRERECN_MEM"}};
};
struct ns_pair score_recn[] = { struct ns_pair score_recn[] = {
{1, "1"}, {1, "1"},
{2, "2"}, {2, "2"},
...@@ -93,14 +90,12 @@ void exp2() ...@@ -93,14 +90,12 @@ void exp2()
{5, "5%"}, {5, "5%"},
{10, "10%"}, {10, "10%"},
{15, "15%"}, {15, "15%"},
{20, "20%"} {20, "20%"}};
};
struct ns_pair *score; struct ns_pair *score;
struct ns_pair func_frerecn[] = { struct ns_pair func_frerecn[] = {
{LINEAR, "LNR"}, {LINEAR, "LNR"},
{QUADRATIC, "QDR"} {QUADRATIC, "QDR"}};
};
struct run_params *rp = new run_params; struct run_params *rp = new run_params;
rp->cache = cache; rp->cache = cache;
...@@ -111,7 +106,7 @@ void exp2() ...@@ -111,7 +106,7 @@ void exp2()
rp->trace_file = wload->tracefile; rp->trace_file = wload->tracefile;
rp->wss_window = 600; rp->wss_window = 600;
rp->wss_stride = 300; rp->wss_stride = 300;
rp->moment = 5400; rp->moment = 2400;
asprintf(&basedirname, PRESTO_BASEPATH "results/%s/%s/", "exp2", wload->name); asprintf(&basedirname, PRESTO_BASEPATH "results/%s/%s/", "exp2", wload->name);
if (!file_exists(basedirname)) if (!file_exists(basedirname))
...@@ -121,10 +116,10 @@ void exp2() ...@@ -121,10 +116,10 @@ void exp2()
rq = new struct sync_rq; rq = new struct sync_rq;
rq->tfname = rp->trace_file; rq->tfname = rp->trace_file;
rp->rq = rq; rp->rq = rq;
pthread_create(&io_thread, nullptr, get_req_from_vdisk_sync, (void *) rq); pthread_create(&io_thread, nullptr, get_req_from_vdisk_sync, (void *)rq);
pthread_join(io_thread, nullptr); pthread_join(io_thread, nullptr);
} }
for (ssr = 0; ssr < LEN(snapshot_rate, ns_pair); ssr++)// snapshot rate for (ssr = 0; ssr < LEN(snapshot_rate, ns_pair); ssr++) // snapshot rate
{ {
rp->snapshot_rate = snapshot_rate[ssr].val; rp->snapshot_rate = snapshot_rate[ssr].val;
fprintf(stderr, "Snapshot rate: %s\n", snapshot_rate[ssr].str); fprintf(stderr, "Snapshot rate: %s\n", snapshot_rate[ssr].str);
...@@ -132,24 +127,24 @@ void exp2() ...@@ -132,24 +127,24 @@ void exp2()
if (!file_exists(basedirname)) if (!file_exists(basedirname))
mkdir(basedirname, 0755); mkdir(basedirname, 0755);
for (pss = 0; pss < LEN(prewarm_set_size_limit, ns_pair); pss++)// prewarm set size limit for (pss = 0; pss < LEN(prewarm_set_size_limit, ns_pair); pss++) // prewarm set size limit
{ {
rp->prewarm_set_size_limit = ((prewarm_set_size_limit[pss].val / 100.0) * rp->prewarm_set_size_limit = ((prewarm_set_size_limit[pss].val / 100.0) *
(cache->total_cache_size / NUM_BYTES_IN_MB)); (cache->total_cache_size / NUM_BYTES_IN_MB));
fprintf(stderr, "Prewarm set size limit: %ldMB (%s of total cache: %ldMB)\n", rp->prewarm_set_size_limit, fprintf(stderr, "Prewarm set size limit: %ldMB (%s of total cache: %ldMB)\n", rp->prewarm_set_size_limit,
prewarm_set_size_limit[pss].str, cache->total_cache_size / NUM_BYTES_IN_MB); prewarm_set_size_limit[pss].str, cache->total_cache_size / NUM_BYTES_IN_MB);
for (pr = 0; pr < LEN(prewarm_rate_limit, ns_pair); pr++)// prewarm rate limit for (pr = 0; pr < LEN(prewarm_rate_limit, ns_pair); pr++) // prewarm rate limit
{ {
rp->prewarm_rate = prewarm_rate_limit[pr].val; rp->prewarm_rate = prewarm_rate_limit[pr].val;
fprintf(stderr, "Prewarm rate limit: %s\n", prewarm_rate_limit[pr].str); fprintf(stderr, "Prewarm rate limit: %s\n", prewarm_rate_limit[pr].str);
for (hrstc = 0; hrstc < LEN(heuristic, ns_pair); hrstc++)// heuristic for (hrstc = 0; hrstc < LEN(heuristic, ns_pair); hrstc++) // heuristic
{ {
rp->heuristic = heuristic[hrstc].val; rp->heuristic = heuristic[hrstc].val;
fprintf(stderr, "Heuristic: %s\n", heuristic[hrstc].str); fprintf(stderr, "Heuristic: %s\n", heuristic[hrstc].str);
for (scr = 0; scr < LEN(score_frerecn, ns_pair); scr++)// heuristic score for (scr = 0; scr < LEN(score_frerecn, ns_pair); scr++) // heuristic score
{ {
switch (heuristic[hrstc].val) switch (heuristic[hrstc].val)
{ {
...@@ -182,7 +177,7 @@ void exp2() ...@@ -182,7 +177,7 @@ void exp2()
rp->base_filename = res_basefname; rp->base_filename = res_basefname;
rp->hparams.frerecn_func = func_frerecn[frfn].val; rp->hparams.frerecn_func = func_frerecn[frfn].val;
fprintf(stderr, "File: %s\n", res_basefname); fprintf(stderr, "File: %s\n", res_basefname);
pthread_create(&cache_thread, nullptr, run_exp2, (void *) rp); pthread_create(&cache_thread, nullptr, run_exp2, (void *)rp);
pthread_join(cache_thread, nullptr); pthread_join(cache_thread, nullptr);
} }
} }
...@@ -274,7 +269,7 @@ void *run_exp2(void *data) ...@@ -274,7 +269,7 @@ void *run_exp2(void *data)
mkdir(rp->base_filename, 0755); mkdir(rp->base_filename, 0755);
snprintf(all_stats_fname, MAX_FILENAME_LEN, "%s/ALL-STATS.txt", rp->base_filename); snprintf(all_stats_fname, MAX_FILENAME_LEN, "%s/ALL-STATS.txt", rp->base_filename);
snprintf(diff_fname, MAX_FILENAME_LEN, "/home/skrtbhtngr/CLionProjects/presto/results/exp2/%s/%d.diff", snprintf(diff_fname, MAX_FILENAME_LEN, "/home/rahul/Rnd/presto/code/results/exp2/%s/%d.diff",
cache->wload_name, snapshot_rate); cache->wload_name, snapshot_rate);
res_hr = new double *[num_vdisks]; res_hr = new double *[num_vdisks];
...@@ -282,7 +277,7 @@ void *run_exp2(void *data) ...@@ -282,7 +277,7 @@ void *run_exp2(void *data)
res_hm1 = new int *[num_vdisks]; res_hm1 = new int *[num_vdisks];
res_hm3 = new int *[num_vdisks]; res_hm3 = new int *[num_vdisks];
res_hm1_miss = new long *[num_vdisks]; res_hm1_miss = new long *[num_vdisks];
res_hm3_miss = new long *[num_vdisks];; res_hm3_miss = new long *[num_vdisks];
res_wss = new long *[num_vdisks]; res_wss = new long *[num_vdisks];
for (i = 0; i < num_vdisks; i++) for (i = 0; i < num_vdisks; i++)
{ {
...@@ -341,9 +336,7 @@ void *run_exp2(void *data) ...@@ -341,9 +336,7 @@ void *run_exp2(void *data)
request = new struct bio_req; request = new struct bio_req;
sprintf(base_fname, PRESTO_BASEPATH sprintf(base_fname, PRESTO_BASEPATH "results/%s/%s/%d/", "exp2", cache->wload_name, snapshot_rate);
"results/%s/%s/%d/", "exp2", cache->wload_name, snapshot_rate);
// If pcache is present, skip the first half! // If pcache is present, skip the first half!
if (pcache->cache_idx != -1 && pcache->run_ssr == snapshot_rate) if (pcache->cache_idx != -1 && pcache->run_ssr == snapshot_rate)
...@@ -363,7 +356,6 @@ void *run_exp2(void *data) ...@@ -363,7 +356,6 @@ void *run_exp2(void *data)
while (get_req(request, rq)) while (get_req(request, rq))
{ {
count += perform_lookup(cache, request); count += perform_lookup(cache, request);
if (request->ts >= (plot_epoch + 1) * plot_rate) if (request->ts >= (plot_epoch + 1) * plot_rate)
{ {
for (i = 0; i < num_vdisks; i++) for (i = 0; i < num_vdisks; i++)
...@@ -572,7 +564,6 @@ void *run_exp2(void *data) ...@@ -572,7 +564,6 @@ void *run_exp2(void *data)
count = plot_epoch = 0; count = plot_epoch = 0;
counter = rp->moment; counter = rp->moment;
failed = false; failed = false;
while (get_req(request, rq)) while (get_req(request, rq))
{ {
count += perform_lookup(cache, request); count += perform_lookup(cache, request);
...@@ -649,8 +640,9 @@ void *run_exp2(void *data) ...@@ -649,8 +640,9 @@ void *run_exp2(void *data)
if (prewarm_set_used_total > 0) if (prewarm_set_used_total > 0)
{ {
// fprintf(stderr, "reached here 2");
fprintf(stderr, "Total size of objects loaded at %d second: %.2lf MB\n", counter, fprintf(stderr, "Total size of objects loaded at %d second: %.2lf MB\n", counter,
prewarm_set_used_total / (double) NUM_BYTES_IN_MB); prewarm_set_used_total / (double)NUM_BYTES_IN_MB);
snprintf(pre_fname, MAX_FILENAME_LEN, "%s/%ds-SHARE.csv", rp->base_filename, counter); snprintf(pre_fname, MAX_FILENAME_LEN, "%s/%ds-SHARE.csv", rp->base_filename, counter);
pre_file = fopen(pre_fname, "w+"); pre_file = fopen(pre_fname, "w+");
...@@ -675,10 +667,8 @@ void *run_exp2(void *data) ...@@ -675,10 +667,8 @@ void *run_exp2(void *data)
for (i = 0; i < num_vdisks; i++) for (i = 0; i < num_vdisks; i++)
{ {
res_hr[i][plot_epoch] = cache->get_hit_ratio(i); res_hr[i][plot_epoch] = cache->get_hit_ratio(i);
res_hm1[i][plot_epoch] = cache->cache_obj_count_vdisk[POOL_SINGLE][HASHMAP1][i] res_hm1[i][plot_epoch] = cache->cache_obj_count_vdisk[POOL_SINGLE][HASHMAP1][i] + cache->cache_obj_count_vdisk[POOL_MULTI][HASHMAP1][i];
+ cache->cache_obj_count_vdisk[POOL_MULTI][HASHMAP1][i]; res_hm3[i][plot_epoch] = cache->cache_obj_count_vdisk[POOL_SINGLE][HASHMAP3][i] + cache->cache_obj_count_vdisk[POOL_MULTI][HASHMAP3][i];
res_hm3[i][plot_epoch] = cache->cache_obj_count_vdisk[POOL_SINGLE][HASHMAP3][i]
+ cache->cache_obj_count_vdisk[POOL_MULTI][HASHMAP3][i];
res_hm1_miss[i][plot_epoch] = cache->miss_count_vdisk[HASHMAP1][i]; res_hm1_miss[i][plot_epoch] = cache->miss_count_vdisk[HASHMAP1][i];
res_hm3_miss[i][plot_epoch] = cache->miss_count_vdisk[HASHMAP3][i]; res_hm3_miss[i][plot_epoch] = cache->miss_count_vdisk[HASHMAP3][i];
res_io_count[i][plot_epoch] = cache->io_count_vdisk[i]; res_io_count[i][plot_epoch] = cache->io_count_vdisk[i];
......
...@@ -223,6 +223,7 @@ int perform_lookup(Cache *cache, struct bio_req *request) ...@@ -223,6 +223,7 @@ int perform_lookup(Cache *cache, struct bio_req *request)
delete[] hash; delete[] hash;
khm3 = get_hm3_key(vhm1->egroup_id); khm3 = get_hm3_key(vhm1->egroup_id);
assert(khm3->egroup_id != 614819);
vhm3 = (val_hm3 *) cache->lookup(HASHMAP3, khm3, request->vdisk); vhm3 = (val_hm3 *) cache->lookup(HASHMAP3, khm3, request->vdisk);
if (vhm3 == nullptr) if (vhm3 == nullptr)
{ {
...@@ -388,6 +389,10 @@ BitArray **analyze_snapshots(Cache *cache, int max_epochs, int ssr, long pre_siz ...@@ -388,6 +389,10 @@ BitArray **analyze_snapshots(Cache *cache, int max_epochs, int ssr, long pre_siz
case K_FREQ_MEM: case K_FREQ_MEM:
calc_scores_freq_mem(ba[j], scores[j]); calc_scores_freq_mem(ba[j], scores[j]);
// if (j==num_vdisks)
// {
// fprintf(stderr, "score %ld", scores[j][614819]);
// }
break; break;
case K_RECN_MEM: case K_RECN_MEM:
calc_scores_rec_mem(ba[j], scores[j], (experiment == EXP1) ? max_epochs - i - 1 : i + 1); calc_scores_rec_mem(ba[j], scores[j], (experiment == EXP1) ? max_epochs - i - 1 : i + 1);
......
...@@ -214,7 +214,7 @@ def generate(conf): ...@@ -214,7 +214,7 @@ def generate(conf):
blocks_r_hr.append(sector) blocks_r_hr.append(sector)
times_r_hr.append(ts) times_r_hr.append(ts)
if ts > 3600: if ts > 14200:
break break
while True: while True:
......
...@@ -70,6 +70,8 @@ def main(): ...@@ -70,6 +70,8 @@ def main():
for csize in cluster_size_list: for csize in cluster_size_list:
for cstride in cluster_stride_list: for cstride in cluster_stride_list:
for hs in range(len(hotspot_list)): for hs in range(len(hotspot_list)):
if i>=6:
break
conf_template['name'] = 'syn' + str(501 + i) conf_template['name'] = 'syn' + str(501 + i)
conf_template['vdisk']['id'] = 501 + i conf_template['vdisk']['id'] = 501 + i
conf_template['sector']['cluster']['size'] = {'min': csize[0], 'max': csize[1]} conf_template['sector']['cluster']['size'] = {'min': csize[0], 'max': csize[1]}
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
int Snapshot::num_epochs; int Snapshot::num_epochs;
int experiment = 1; int experiment = 2;
int main() int main()
{ {
......
...@@ -3,5 +3,9 @@ import os ...@@ -3,5 +3,9 @@ import os
if __name__ == "__main__": if __name__ == "__main__":
wload="wss_iops100" wload="wss_iops100"
os.chdir("traces/" + wload) os.chdir("traces/" + wload)
os.system("cat syn*.csv > temp.csv") disks=[501,502,503,504,505,506]
os.system("cat syn" +str(disks[0])+".csv > temp.csv")
for i in range(1,len(disks)):
os.system("cat syn" +str(disks[i])+".csv >> temp.csv")
# os.system("cat syn*.csv > temp.csv")
os.system("sort --field-separator=',' -n -k 5,5 temp.csv > %sMerged.csv" % (wload)) os.system("sort --field-separator=',' -n -k 5,5 temp.csv > %sMerged.csv" % (wload))
This diff is collapsed.
Basic Info
1)Experiment ran on trace taken from http://iotta.snia.org/tracetypes/3
2)The above site has hourly traces of 6 disks for 8 days.
3)We used the trace from 1200 to 1300 on 16/02/2016
4)I used only 1 hour trace(an the failure happens at the 40 minute mark) for the experiment because the hr ratio rises and saturates very quickly.
Results
1)The relevant plots are included in the plots directory with the following nameing convention
<prewarm-set-size>-<prewarm-rate>-<heuristic>-<info>
where info can be
hr-5 -> shows the hit ratio during the 5 minutes after failure in the 3 cases(with pre-warming, without pre-warming, no failure)
hr-10 -> shows the hit ratio during the 10 minutes after failure in the 3 cases
hr-15 -> shows the hit ratio during the 15 minutes after failure in the 3 cases
hr -> shows the hit ratio for the entire 1 hour duration in the 3 cases
vdisk-hr5-wop -> shows the hit ratio(without pre-warming) for each vdisk during the 5 minutes after failure
vdisk-hr5-wp -> shows the hit ratio(with pre-warming) for each vdisk during the 5 minutes after failure
vdisk-hr -> shows the hit ratio(with pre-warming) for each vdisk during entire 1 hour duration
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment