From a6924f16680be33807b999d93491594eb0c02f38 Mon Sep 17 00:00:00 2001 From: Alex Pyrgiotis Date: Mon, 11 Mar 2013 01:37:52 +0200 Subject: [PATCH] Add skeleton for verification in write path --- xseg/peers/user/bench-utils.c | 61 +++++++++++++++++++++++++++++++++++------ xseg/peers/user/bench-xseg.c | 3 +- 2 files changed, 53 insertions(+), 11 deletions(-) diff --git a/xseg/peers/user/bench-utils.c b/xseg/peers/user/bench-utils.c index 06b3471..fd3160f 100644 --- a/xseg/peers/user/bench-utils.c +++ b/xseg/peers/user/bench-utils.c @@ -47,9 +47,21 @@ #include #include +#include struct timespec delay = {0, 4000000}; +static inline uint64_t _get_id() +{ + return atol(global_id + 6); /* cut the "bench-" part*/ +} + +static inline uint64_t _get_object(struct bench *prefs, uint64_t new) +{ + return new / (prefs->os / prefs->bs); +} + + /* * Convert string to size in bytes. * If syntax is invalid, return 0. Values such as zero and non-integer @@ -200,7 +212,6 @@ void print_res(struct bench *prefs, struct timer *tm, char *type) //TODO: Add std } -//FIXME: this looks like a hack, handle it more elegantly void create_id(unsigned long seed) { if (seed > pow(10, 9)) @@ -220,23 +231,55 @@ void create_target(struct bench *prefs, struct xseg_request *req, req_target = xseg_get_target(xseg, req); //For read/write, the target object does not correspond to `new`, which is - //actually the chunk number. We need to div this number with the number of - //chunks in an object. - //FIXME: Make it more elegant + //actually the chunk number. if (prefs->op == X_READ || prefs->op == X_WRITE) - new = new / (prefs->os / prefs->bs); + new = _get_object(prefs, new); snprintf(req_target, TARGETLEN, "%s-%016lu", global_id, new); XSEGLOG2(&lc, D, "Target name of request is %s\n", req_target); } void create_chunk(struct bench *prefs, struct xseg_request *req, uint64_t new) -{/* +{ struct xseg *xseg = prefs->peer->xseg; - char *req_data; + void *req_data; + uint64_t id; + uint64_t object; + struct bench_lfsr id_lfsr, obj_lfsr, off_lfsr; + uint64_t i; + + + id = _get_id(); + object = _get_object(prefs, new); - //TODO: Fill data depening on validation level req_data = xseg_get_data(xseg, req); - */ + + lfsr_init(&id_lfsr, 0xFFFFFFFF, id, 0); + lfsr_init(&obj_lfsr, 0xFFFFFFFF, object, 0); + lfsr_init(&off_lfsr, 0xFFFFFFFF, req->offset, 0); + + for (i = 0; i < req->size; i += 192) { + /* + * lfsr-next + * copy to memory + */ + } + /* check for left-overs chunk */ + + for (i = 64; i < req->size; i += 192) { + /* + * lfsr-next + * copy to memory + */ + } + /* check for left-overs chunk */ + + for (i = 128; i < req->size; i += 192) { + /* + * lfsr-next + * copy to memory + */ + } + /* check for left-overs chunk */ } uint64_t determine_next(struct bench *prefs) diff --git a/xseg/peers/user/bench-xseg.c b/xseg/peers/user/bench-xseg.c index 4ecfe01..b1699e4 100644 --- a/xseg/peers/user/bench-xseg.c +++ b/xseg/peers/user/bench-xseg.c @@ -65,13 +65,13 @@ void custom_peer_usage() " --------------------------------------------\n" " -op | None | XSEG operation [read|write|info|delete]\n" " --pattern | None | I/O pattern [seq|rand]\n" + " --verify | no | Verify written requests [no|meta|hash]\n" " -to | None | Total objects (not for read/write)\n" " -ts | None | Total I/O size\n" " -os | 4M | Object size\n" " -bs | 4k | Block size\n" " -tp | None | Target port\n" " --iodepth | 1 | Number of in-flight I/O requests\n" - " --verify | no | Verify written requests [no|meta|hash]\n" " --seed | None | Initialize LFSR and target names\n" " --insanity| sane | Adjust insanity level of benchmark:\n" " | | [sane|eccentric|manic|paranoid]\n" @@ -176,7 +176,6 @@ int custom_peer_init(struct peerd *peer, int argc, char *argv[]) goto arg_fail; } - //Default iodepth value is 1 if (iodepth < 0) prefs->iodepth = 1; -- 1.7.10.4