88
99#include "../../include/libCacheSim/const.h"
1010#include "../../include/libCacheSim/dist.h"
11+ #include "../../include/libCacheSim/prefetchAlgo.h"
1112#include "../../utils/include/mystr.h"
1213#include "../../utils/include/mysys.h"
1314#include "../cli_reader_utils.h"
@@ -43,6 +44,9 @@ enum argp_option_short {
4344 OPTION_NUM_THREAD = 0x106 ,
4445 OPTION_SAMPLE_RATIO = 's' ,
4546 OPTION_REPORT_INTERVAL = 0x108 ,
47+
48+ OPTION_PREFETCH_ALGO = 'p' ,
49+ OPTION_PREFETCH_PARAMS = 0x109 ,
4650};
4751
4852/*
@@ -61,12 +65,17 @@ static struct argp_option options[] = {
6165 "Sample ratio, 1 means no sampling, 0.01 means sample 1% of objects" , 2 },
6266
6367 {NULL , 0 , NULL , 0 , "cache related parameters:" , 0 },
64- {"eviction-params" , OPTION_EVICTION_PARAMS , "\"n-seg=\"4 " , 0 ,
68+ {"eviction-params" , OPTION_EVICTION_PARAMS , "\"n-seg=4\" " , 0 ,
6569 "optional params for each eviction algorithm, e.g., n-seg=4" , 4 },
6670 {"admission" , OPTION_ADMISSION_ALGO , "bloom-filter" , 0 ,
6771 "Admission algorithm: size/bloom-filter/prob" , 4 },
6872 {"admission-params" , OPTION_ADMISSION_PARAMS , "\"prob=0.8\"" , 0 ,
6973 "params for admission algorithm" , 4 },
74+ {"prefetch" , OPTION_PREFETCH_ALGO , "Mithril" , 0 ,
75+ "Prefetching algorithm: Mithril" , 4 },
76+ {"prefetch-params" , OPTION_PREFETCH_PARAMS , "\"block-size=65536\"" , 0 ,
77+ "optional params for each prefetching algorithm, e.g., block-size=65536" ,
78+ 4 },
7079
7180 {0 , 0 , 0 , 0 , "Other options:" },
7281 {"ignore-obj-size" , OPTION_IGNORE_OBJ_SIZE , "false" , 0 ,
@@ -85,8 +94,7 @@ static struct argp_option options[] = {
8594 "Whether consider per object metadata size in the simulated cache" , 10 },
8695 {"verbose" , OPTION_VERBOSE , "1" , 0 , "Produce verbose output" , 10 },
8796
88- {0 }
89- };
97+ {0 }};
9098
9199/*
92100 PARSER. Field 2 in ARGP.
@@ -113,11 +121,19 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
113121 case OPTION_ADMISSION_ALGO :
114122 arguments -> admission_algo = arg ;
115123 break ;
124+ case OPTION_PREFETCH_ALGO :
125+ arguments -> prefetch_algo = arg ;
126+ break ;
116127 case OPTION_ADMISSION_PARAMS :
117128 arguments -> admission_params = strdup (arg );
118129 replace_char (arguments -> admission_params , ';' , ',' );
119130 replace_char (arguments -> admission_params , '_' , '-' );
120131 break ;
132+ case OPTION_PREFETCH_PARAMS :
133+ arguments -> prefetch_params = strdup (arg );
134+ replace_char (arguments -> prefetch_params , ';' , ',' );
135+ replace_char (arguments -> prefetch_params , '_' , '-' );
136+ break ;
121137 case OPTION_OUTPUT_PATH :
122138 strncpy (arguments -> ofilepath , arg , OFILEPATH_LEN );
123139 break ;
@@ -195,7 +211,9 @@ static void init_arg(struct arguments *args) {
195211 args -> trace_path = NULL ;
196212 args -> eviction_params = NULL ;
197213 args -> admission_algo = NULL ;
214+ args -> prefetch_algo = NULL ;
198215 args -> admission_params = NULL ;
216+ args -> prefetch_params = NULL ;
199217 args -> trace_type_str = NULL ;
200218 args -> trace_type_params = NULL ;
201219 args -> verbose = true;
@@ -322,6 +340,11 @@ void parse_cmd(int argc, char *argv[], struct arguments *args) {
322340 args -> caches [idx ]-> admissioner =
323341 create_admissioner (args -> admission_algo , args -> admission_params );
324342 }
343+
344+ if (args -> prefetch_algo != NULL ) {
345+ args -> caches [idx ]-> prefetcher = create_prefetcher (
346+ args -> prefetch_algo , args -> prefetch_params , args -> cache_sizes [j ]);
347+ }
325348 }
326349 }
327350
@@ -492,6 +515,16 @@ void print_parsed_args(struct arguments *args) {
492515 n += snprintf (output_str + n , OUTPUT_STR_LEN - n - 1 ,
493516 ", admission-params: %s" , args -> admission_params );
494517
518+ if (args -> prefetch_algo != NULL ) {
519+ n += snprintf (output_str + n , OUTPUT_STR_LEN - n - 1 , ", prefetch: %s" ,
520+ args -> prefetch_algo );
521+ }
522+
523+ if (args -> prefetch_params != NULL ) {
524+ n += snprintf (output_str + n , OUTPUT_STR_LEN - n - 1 ,
525+ ", prefetch-params: %s" , args -> prefetch_params );
526+ }
527+
495528 if (args -> eviction_params != NULL )
496529 n += snprintf (output_str + n , OUTPUT_STR_LEN - n - 1 ,
497530 ", eviction-params: %s" , args -> eviction_params );
0 commit comments