Request schedulers
Checking correctness of request scheduling with R
-
Create and run experiment
-
Export data to a csv
-
Run the following commands to plot PDF of scheduling times:
rq <- read.table('path/to/file.csv', sep=',', header=TRUE)
st <- sort(rq$rq_sched_time)
N <- length(st) - 2
plot(density(st - st))
PDF plot should match expected
Inter-arrival time request scheduler
Think-time based request scheduler
Functions
rqsvar_step
public
STATIC_INLINE void rqsvar_step(rqsched_t* rqs, double iat)
rqsvar_unregister, rqsvar_register
public
LIBEXPORT int rqsvar_register(module_t* mod, rqsvar_class_t* rqsvar_class) LIBEXPORT int rqsvar_unregister(module_t* mod, rqsvar_class_t* rqsvar_class)
rqsched_register, rqsched_unregister
public
LIBEXPORT int rqsched_register(module_t* mod, rqsched_class_t* rqs_class) LIBEXPORT int rqsched_unregister(module_t* mod, rqsched_class_t* rqs_class)
rqsched_init, rqsched_fini
public
LIBEXPORT int rqsched_init(void) LIBEXPORT void rqsched_fini(void)
Types
typedef struct rqsvar_class
typedef struct rqsvar_class { AUTOSTRING char* rqsvar_name; randvar_class_t* rqsvar_rvclass; struct tsload_param* rqsvar_params; int (*rqsvar_init)(struct rqsched_var* var); void (*rqsvar_destroy)(struct rqsched_var* var); int (*rqsvar_set_int)(struct rqsched_var* var, const char* name, long value); int (*rqsvar_set_double)(struct rqsched_var* var, const char* name, double value); int (*rqsvar_step)(struct rqsched_var* var, double iat); module_t* rqsvar_module; struct rqsvar_class* rqsvar_next; } rqsvar_class_t;
typedef struct rqsched_class
typedef struct rqsched_class { AUTOSTRING char* rqsched_name; const char* rqsched_description; int rqsched_flags; struct tsload_param* rqsched_params; int (*rqsched_proc_tsobj)(tsobj_node_t* node, workload_t* wl, struct rqsched* rqs); void (*rqsched_fini)(workload_t* wl, struct rqsched* rqs); void (*rqsched_step)(workload_step_t* step); /* Called when new step starts */ void (*rqsched_pre_request)(request_t* rq); /* Called while request is scheduling */ void (*rqsched_post_request)(request_t* rq); /* Called when request is complete */ module_t* rqsched_module; struct rqsched_class* rqsched_next; } rqsched_class_t;
typedef struct rqsched_var
typedef struct rqsched_var { rqsvar_class_t* class; randgen_t* randgen; randvar_t* randvar; union { double dval; long lval; void* private; } params; } rqsched_var_t;
typedef struct rqsched
typedef struct rqsched { rqsched_class_t* rqs_class; rqsched_var_t* rqs_var; void* rqs_private; } rqsched_t;