Add skeleton for verification in write path
authorAlex Pyrgiotis <apyrgio@grnet.gr>
Sun, 10 Mar 2013 23:37:52 +0000 (01:37 +0200)
committerAlex Pyrgiotis <apyrgio@grnet.gr>
Tue, 12 Mar 2013 16:53:03 +0000 (18:53 +0200)
xseg/peers/user/bench-utils.c
xseg/peers/user/bench-xseg.c

index 06b3471..fd3160f 100644 (file)
 #include <bench-xseg.h>
 
 #include <math.h>
+#include <string.h>
 
 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)
index 4ecfe01..b1699e4 100644 (file)
@@ -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;