From ff044a7c93cd5a8009a3367f24c5152c1f3dca83 Mon Sep 17 00:00:00 2001 From: Filippos Giannakos Date: Fri, 31 Aug 2012 16:29:42 +0300 Subject: [PATCH] small fixes in xseg-tool , filed --- xseg/peers/kernel/xsegbd.c | 2 +- xseg/peers/user/filed.c | 6 ++++-- xseg/peers/user/xseg-tool.c | 12 +++++++----- xseg/xseg/xseg.c | 1 + xseg/xseg/xseg.h | 2 +- xseg/xtypes/xobj.c | 5 +++++ 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/xseg/peers/kernel/xsegbd.c b/xseg/peers/kernel/xsegbd.c index 5091755..78e0766 100644 --- a/xseg/peers/kernel/xsegbd.c +++ b/xseg/peers/kernel/xsegbd.c @@ -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); diff --git a/xseg/peers/user/filed.c b/xseg/peers/user/filed.c index 9c53ad1..901b508 100644 --- a/xseg/peers/user/filed.c +++ b/xseg/peers/user/filed.c @@ -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); diff --git a/xseg/peers/user/xseg-tool.c b/xseg/peers/user/xseg-tool.c index 52a1f27..4d82a96 100644 --- a/xseg/peers/user/xseg-tool.c +++ b/xseg/peers/user/xseg-tool.c @@ -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); diff --git a/xseg/xseg/xseg.c b/xseg/xseg/xseg.c index 35ad904..88e3df2 100644 --- a/xseg/xseg/xseg.c +++ b/xseg/xseg/xseg.c @@ -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; diff --git a/xseg/xseg/xseg.h b/xseg/xseg/xseg.h index 2864b01..38e5b78 100644 --- a/xseg/xseg/xseg.h +++ b/xseg/xseg/xseg.h @@ -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 diff --git a/xseg/xtypes/xobj.c b/xseg/xtypes/xobj.c index 5154e11..6d96229 100644 --- a/xseg/xtypes/xobj.c +++ b/xseg/xtypes/xobj.c @@ -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; -- 1.7.10.4