Skip to content

Latest commit

 

History

History
160 lines (126 loc) · 3.82 KB

API.md

File metadata and controls

160 lines (126 loc) · 3.82 KB

traceReader: typedef struct { int time_field; int obj_id_field; int obj_size_field; int obj_mass_field; int op_field; int ttl_field;

// csv reader gboolean has_header; char delimiter;

// binary reader char binary_fmt[MAX_BIN_FMT_STR_LEN]; } reader_init_param_t;

typedef struct reader { char mapped_file; / mmap the file, this should not change during runtime */ uint64_t mmap_offset;

FILE *file; size_t file_size;

trace_type_e trace_type; /_ possible types see trace_type_t / obj_id_type_e obj_id_type; / possible types see obj_id_type_e in request.h _/

size_t item_size; /_ the size of one record, used to _ locate the memory location of next element, _ when used in vscsiReaser and binaryReader, _ it is a const value, _ when it is used in plainReader or csvReader, _ it is the size of last record, it does not _ include LFCR or \0 _/

uint64_t n_total_req; /_ number of requests in the trace / uint64_t n_uniq_obj; / number of objects in the trace _/

char trace_path[MAX_FILE_PATH_LEN]; reader_init_param_t init_params;

void *reader_params; void *other_params; /_ currently not used _/

gint ver;

bool cloned; // true if this is a cloned reader, else false

} reader_t;

/**

  • setup the reader struct for reading trace
  • @param trace_path
  • @param trace_type CSV_TRACE, PLAIN_TXT_TRACE, BIN_TRACE, VSCSI_TRACE,
  • TWR_BIN_TRACE
  • @param obj_id_type OBJ_ID_NUM, OBJ_ID_STR
  • @param setup_params
  • @return a pointer to reader_t struct, the returned reader needs to be
  • explicitly closed by calling close_reader or close_trace */ reader_t *setup_reader(const char *trace_path, const trace_type_e trace_type, const obj_id_type_e obj_id_type, const reader_init_param_t *const reader_init_param);

/_ this is the same function as setup_reader _/ static inline reader_t * open_trace(const char *path, const trace_type_e type, const obj_id_type_e obj_id_type, const reader_init_param_t *const reader_init_param) { return setup_reader(path, type, obj_id_type, reader_init_param); }

/**

  • read one request from reader, and store it in the pre-allocated request_t req
  • @param reader
  • @param req */ uint64_t get_num_of_req(reader_t *const reader);

/**

  • as the name suggests
  • @param reader
  • @return */ static inline trace_type_e get_trace_type(const reader_t *const reader) { return reader->trace_type; }

/**

  • as the name suggests
  • @param reader
  • @return */ static inline obj_id_type_e get_obj_id_type(const reader_t *const reader) { return reader->obj_id_type; }

/**

  • read one request from reader/trace, stored the info in pre-allocated req
  • @param reader
  • @param req
  • return 0 on success and 1 if reach end of trace */ int read_one_req(reader_t *const reader, request_t *const req);

/**

  • reset reader, so we can read from the beginning
  • @param reader */ void reset_reader(reader_t *const reader);

/**

  • close reader and release resources
  • @param reader
  • @return */ int close_reader(reader_t *const reader);

/**

  • clone a reader, mostly used in multithreading
  • @param reader
  • @return */ reader_t *clone_reader(const reader_t *const reader);

cache and cacheAlgo:

static inline request_t *new_request(); static inline void copy_request(request_t *req_dest, request_t *req_src); static inline request_t *clone_request(request_t *req); static inline void free_request(request_t *req); static inline void print_request(request_t *req);

simulator: sim_res_t * simulate_at_multi_sizes(reader_t *const reader, const cache_t *const cache, const gint num_of_sizes, const guint64 *const cache_sizes, reader_t *const warmup_reader, const double warmup_perc, const gint num_of_threads);

sim_res_t * simulate_at_multi_sizes_with_step_size(reader_t *const reader_in, const cache_t *const cache_in, const guint64 step_size, reader_t *const warmup_reader, const double warmup_perc, const gint num_of_threads);

profiler: