small fixes in xseg-tool , filed
authorFilippos Giannakos <philipgian@grnet.gr>
Fri, 31 Aug 2012 13:29:42 +0000 (16:29 +0300)
committerFilippos Giannakos <philipgian@grnet.gr>
Fri, 31 Aug 2012 13:29:42 +0000 (16:29 +0300)
xseg/peers/kernel/xsegbd.c
xseg/peers/user/filed.c
xseg/peers/user/xseg-tool.c
xseg/xseg/xseg.c
xseg/xseg/xseg.h
xseg/xtypes/xobj.c

index 5091755..78e0766 100644 (file)
@@ -36,7 +36,7 @@ static long blksize = 512;
 static int major = 0;
 static int max_nr_pending = 1024;
 static char name[XSEGBD_SEGMENT_NAMELEN] = "xsegbd";
-static char spec[256] = "segdev:xsegbd:4:512:64:1024:12";
+static char spec[256] = "segdev:xsegbd:4:256:12";
 
 module_param(sector_size, long, 0644);
 module_param(blksize, long, 0644);
index 9c53ad1..901b508 100644 (file)
@@ -137,7 +137,8 @@ static void complete(struct store *store, struct io *io)
        req->state |= XS_SERVED;
        if (verbose)
                log_io("complete", io);
-       xseg_respond(store->xseg, req->portno, req);
+       while (xseg_respond(store->xseg, req->portno, req) == Noneidx)
+               ;
        xseg_signal(store->xseg, req->portno);
        __sync_fetch_and_sub(&store->fdcache[io->fdcacheidx].ref, 1);
 }
@@ -148,7 +149,8 @@ static void fail(struct store *store, struct io *io)
        req->state |= XS_FAILED;
        if (verbose)
                log_io("fail", io);
-       xseg_respond(store->xseg, req->portno, req);
+       while (xseg_respond(store->xseg, req->portno, req) == Noneidx)
+               ;
        xseg_signal(store->xseg, req->portno);
        if (io->fdcacheidx >= 0) {
                __sync_fetch_and_sub(&store->fdcache[io->fdcacheidx].ref, 1);
index 52a1f27..4d82a96 100644 (file)
@@ -186,7 +186,6 @@ void report_request(struct xseg_request *req)
                max = 128;
        data[max-1] = 0;
        fprintf(stderr, "request %llu state %u\n", (unsigned long long)req->serial, req->state);
-       fprintf(stderr, "data: %s\n", data);
 }
 
 int cmd_info(char *target)
@@ -509,6 +508,7 @@ int cmd_rndwrite(long loops, int32_t seed, uint32_t targetlen, uint32_t chunksiz
        uint64_t offset;
        xserial srl;
        char *req_data, *req_target;
+       seed = random();
 
        for (;;) {
                xseg_prepare_wait(xseg, srcport);
@@ -527,7 +527,6 @@ int cmd_rndwrite(long loops, int32_t seed, uint32_t targetlen, uint32_t chunksiz
                        req_data = xseg_get_data(xseg, submitted);
 
                        reported = 0;
-                       seed = random();
                        mkname(namebuf, targetlen, seed);
                        namebuf[targetlen] = 0;
                        //printf("%ld: %s\n", nr_submitted, namebuf);
@@ -544,6 +543,7 @@ int cmd_rndwrite(long loops, int32_t seed, uint32_t targetlen, uint32_t chunksiz
                        if (srl == Noneidx) {
                                xseg_put_request(xseg, submitted->portno, submitted);
                        } else {
+                               seed = random();
                                nr_submitted += 1;
                                xseg_signal(xseg, dstport);
                        }
@@ -618,6 +618,7 @@ int cmd_rndread(long loops, int32_t seed, uint32_t targetlen, uint32_t chunksize
        xserial srl;
        char *req_data, *req_target;
 
+       seed = random();
        for (;;) {
                submitted = NULL;
                xseg_prepare_wait(xseg, srcport);
@@ -634,7 +635,6 @@ int cmd_rndread(long loops, int32_t seed, uint32_t targetlen, uint32_t chunksize
 
                        req_target = xseg_get_target(xseg, submitted);
                        reported = 0;
-                       seed = random();
                        mkname(namebuf, targetlen, seed);
                        namebuf[targetlen] = 0;
                        //printf("%ld: %s\n", nr_submitted, namebuf);
@@ -644,11 +644,11 @@ int cmd_rndread(long loops, int32_t seed, uint32_t targetlen, uint32_t chunksize
                        submitted->offset = offset;
                        submitted->size = chunksize;
                        submitted->op = X_READ;
-
                        srl = xseg_submit(xseg, dstport, submitted);
                        if (srl == Noneidx) {
                                xseg_put_request(xseg, submitted->portno, submitted);
                        } else {
+                               seed = random();
                                nr_submitted += 1;
                                xseg_signal(xseg, dstport);
                        }
@@ -665,6 +665,7 @@ int cmd_rndread(long loops, int32_t seed, uint32_t targetlen, uint32_t chunksize
                                report_request(received);
                        } else if (!chkchunk(req_data, received->datalen,
                                        req_target, received->targetlen, received->offset)) {
+       //                      report_request(received);
                                nr_mismatch += 1;
                        }
 
@@ -820,7 +821,8 @@ int cmd_reportall(void)
        if (cmd_join())
                return -1;
 
-       //fprintf(stderr, "global free requests: %u\n", xq_count(xseg->free_requests));
+
+       fprintf(stderr, "Heap usage: %llu / %llu\n", xseg->heap->cur, xseg->config.heap_size);
        for (t = 0; t < xseg->config.nr_ports; t++)
                cmd_report(t);
 
index 35ad904..88e3df2 100644 (file)
@@ -773,6 +773,7 @@ struct xq * __alloc_queue(struct xseg *xseg, uint64_t nr_reqs)
        //initialize queue with max nr of elements it can hold
        q = (struct xq *) mem;
        buf = (void *) (((unsigned long) mem) + sizeof(struct xq));
+       XSEGLOG("elements: %llu\n", bytes/sizeof(xqindex));
        xq_init_empty(q, bytes/sizeof(xqindex), buf); 
 
        return q;
index 2864b01..38e5b78 100644 (file)
@@ -27,7 +27,7 @@ typedef uint64_t xserial;
 #define NoSerial ((xserial)-1)
 
 #ifndef XSEG_DEF_REQS
-#define XSEG_DEF_REQS 512
+#define XSEG_DEF_REQS 16
 #endif
 
 /* Peers and Segments
index 5154e11..6d96229 100644 (file)
@@ -43,6 +43,8 @@ int xobj_alloc_obj(struct xobject_h * obj_h, uint64_t nr)
        struct xheap *heap = XPTR_TAKE(obj_h->heap, container);
        struct xobject *obj = NULL;
 
+       unsigned long i = 0;
+
        uint64_t used, bytes = nr * obj_h->obj_size;
        xptr objptr;
        xhash_t *allocated = XPTR_TAKE(obj_h->allocated, container);
@@ -66,6 +68,8 @@ int xobj_alloc_obj(struct xobject_h * obj_h, uint64_t nr)
                obj->size = obj_h->obj_size;
                obj->next = XPTR_MAKE(((unsigned long) mem) + used, container); //point to the next obj
 //             printf("foo: %lx\n", &obj->next);
+               
+               i++;
 
 retry:
                r = xhash_insert(allocated, objptr, objptr); //keep track of allocated objects
@@ -91,6 +95,7 @@ retry:
                        goto retry;
                }
        }
+       XSEGLOG("allocated %lu elements\n", i);
        if (!obj)
                return -1;
        objptr = obj_h->list;