[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Incremental fixes to plx stuff.
ChangeSet 1.1311.8.1, 2005/03/21 19:57:02+00:00, akw27@xxxxxxxxxxxxxxxxxxxxxx Incremental fixes to plx stuff. Signed-off-by: andrew.warfield@xxxxxxxxxxxx Makefile | 33 ++ blktaplib.c | 24 + blockstore-tls.c | 161 ++++++++++++ blockstore.c | 218 ++++++++++++++++- blockstore.h | 26 ++ parallax-threaded.c | 654 ++++++++++++++++++++++++++++++++++++++++++++++++++++ parallax-threaded.h | 23 + parallax.c | 6 radix.c | 125 ++++++++- radix.h | 1 snaplog.c | 64 +++++ snaplog.h | 11 vdi.c | 5 vdi_snap_delete.c | 48 +++ vdi_snap_list.c | 13 - 15 files changed, 1352 insertions(+), 60 deletions(-) diff -Nru a/tools/blktap/Makefile b/tools/blktap/Makefile --- a/tools/blktap/Makefile 2005-03-22 05:03:11 -05:00 +++ b/tools/blktap/Makefile 2005-03-22 05:03:11 -05:00 @@ -21,8 +21,12 @@ PLX_SRCS := PLX_SRCS += vdi.c PLX_SRCS += radix.c -PLX_SRCS += blockstore.c PLX_SRCS += snaplog.c +PLXT_SRCS := $(PLX_SRCS) +#PLXT_SRCS += blockstore-tls.c +PLXT_SRCS += blockstore.c +PLXT_SRCS += parallax-threaded.c +PLX_SRCS += blockstore.c VDI_SRCS := $(PLX_SRCS) PLX_SRCS += parallax.c @@ -31,6 +35,7 @@ VDI_TOOLS += vdi_list VDI_TOOLS += vdi_snap VDI_TOOLS += vdi_snap_list +VDI_TOOLS += vdi_snap_delete VDI_TOOLS += vdi_fill VDI_TOOLS += vdi_tree VDI_TOOLS += vdi_validate @@ -91,7 +96,7 @@ libblktap.so.$(MAJOR): ln -sf libblktap.so.$(MAJOR).$(MINOR) $@ libblktap.so.$(MAJOR).$(MINOR): $(OBJS) - $(CC) -Wl,-soname -Wl,$(SONAME) -shared -o $@ $^ -L../libxutil -lxutil -lz + $(CC) -Wl,-soname -Wl,$(SONAME) -shared -o $@ $^ -lpthread -L../libxutil -lxutil -lz blkdump: $(LIB) $(CC) $(CFLAGS) -o blkdump -L$(XEN_LIBXC) -L$(XEN_LIBXUTIL) -L. -l blktap blkdump.c @@ -117,6 +122,9 @@ parallax: $(LIB) $(PLX_SRCS) $(CC) $(CFLAGS) -o parallax -L$(XEN_LIBXC) -L$(XEN_LIBXUTIL) -L. -lblktap $(PLX_SRCS) libgnbd/libgnbd.a +parallax-threaded: $(LIB) $(PLXT_SRCS) + $(CC) $(CFLAGS) -o parallax-threaded -L$(XEN_LIBXC) -L$(XEN_LIBXUTIL) -L. -lpthread -lblktap $(PLXT_SRCS) libgnbd/libgnbd.a + vdi_test: $(LIB) $(VDI_SRCS) $(CC) $(CFLAGS) -g3 -o vdi_test -DVDI_STANDALONE $(VDI_SRCS) @@ -132,6 +140,9 @@ vdi_snap_list: $(LIB) vdi_snap_list.c $(VDI_SRCS) $(CC) $(CFLAGS) -g3 -o vdi_snap_list vdi_snap_list.c $(VDI_SRCS) +vdi_snap_delete: $(LIB) vdi_snap_delete.c $(VDI_SRCS) + $(CC) $(CFLAGS) -g3 -o vdi_snap_delete vdi_snap_delete.c $(VDI_SRCS) + vdi_tree: $(LIB) vdi_tree.c $(VDI_SRCS) $(CC) $(CFLAGS) -g3 -o vdi_tree vdi_tree.c $(VDI_SRCS) @@ -142,12 +153,22 @@ $(CC) $(CFLAGS) -g3 -o vdi_validate vdi_validate.c $(VDI_SRCS) -rdx_cmp: $(LIB) rdx_cmp.c $(VDI_SRCS) - $(CC) $(CFLAGS) -g3 -o rdx_cmp rdx_cmp.c $(VDI_SRCS) - - .PHONY: TAGS clean install mk-symlinks rpm TAGS: etags -t $(SRCS) *.h -include $(DEPS) + +#Random testing targets. To be removed eventually. + +rdx_cmp: $(LIB) rdx_cmp.c $(VDI_SRCS) + $(CC) $(CFLAGS) -g3 -o rdx_cmp rdx_cmp.c $(VDI_SRCS) + +bb-tls: $(LIB) blockstore-benchmark.c + $(CC) $(CFLAGS) -o bb-tls blockstore-benchmark.c blockstore-tls.c -lpthread + +bb-trans: $(LIB) blockstore-benchmark.c + $(CC) $(CFLAGS) -o bb-trans blockstore-benchmark.c blockstore.c -lpthread + +radix-test: $(LIB) radix.c blockstore-threaded-trans.c + $(CC) $(CFLAGS) -g3 -D RADIX_STANDALONE -o radix-test radix.c blockstore-threaded-trans.c diff -Nru a/tools/blktap/blktaplib.c b/tools/blktap/blktaplib.c --- a/tools/blktap/blktaplib.c 2005-03-22 05:03:11 -05:00 +++ b/tools/blktap/blktaplib.c 2005-03-22 05:03:11 -05:00 @@ -3,6 +3,8 @@ * * userspace interface routines for the blktap driver. * + * (threadsafe(r) version) + * * (c) 2004 Andrew Warfield. */ @@ -21,11 +23,13 @@ #include <sys/ioctl.h> #include <string.h> #include <unistd.h> +#include <pthread.h> + #define __COMPILING_BLKTAP_LIB #include "blktaplib.h" -#if 1 +#if 0 #define DPRINTF(_f, _a...) printf ( _f , ## _a ) #else #define DPRINTF(_f, _a...) ((void)0) @@ -194,15 +198,19 @@ /*-----[ Data to/from Backend (server) VM ]------------------------------*/ + + inline int write_req_to_be_ring(blkif_request_t *req) { blkif_request_t *req_d; + static pthread_mutex_t be_prod_mutex = PTHREAD_MUTEX_INITIALIZER; - //req_d = FRONT_RING_NEXT_EMPTY_REQUEST(&be_ring); + pthread_mutex_lock(&be_prod_mutex); req_d = RING_GET_REQUEST(&be_ring, be_ring.req_prod_pvt); memcpy(req_d, req, sizeof(blkif_request_t)); wmb(); be_ring.req_prod_pvt++; + pthread_mutex_unlock(&be_prod_mutex); return 0; } @@ -210,12 +218,14 @@ inline int write_rsp_to_fe_ring(blkif_response_t *rsp) { blkif_response_t *rsp_d; + static pthread_mutex_t fe_prod_mutex = PTHREAD_MUTEX_INITIALIZER; - //rsp_d = BACK_RING_NEXT_EMPTY_RESPONSE(&fe_ring); + pthread_mutex_lock(&fe_prod_mutex); rsp_d = RING_GET_RESPONSE(&fe_ring, fe_ring.rsp_prod_pvt); memcpy(rsp_d, rsp, sizeof(blkif_response_t)); wmb(); fe_ring.rsp_prod_pvt++; + pthread_mutex_unlock(&fe_prod_mutex); return 0; } @@ -336,6 +346,10 @@ ctrl_sring_t *csring; RING_IDX rp, i, pfd_count; + /* pending rings */ + blkif_request_t req_pending[BLKIF_RING_SIZE]; + blkif_response_t rsp_pending[BLKIF_RING_SIZE]; + /* handler hooks: */ request_hook_t *req_hook; response_hook_t *rsp_hook; @@ -447,6 +461,8 @@ int done = 0; /* stop forwarding this request */ req = RING_GET_REQUEST(&fe_ring, i); + memcpy(&req_pending[ID_TO_IDX(req->id)], req, sizeof(*req)); + req = &req_pending[ID_TO_IDX(req->id)]; DPRINTF("copying an fe request\n"); @@ -487,6 +503,8 @@ { rsp = RING_GET_RESPONSE(&be_ring, i); + memcpy(&rsp_pending[ID_TO_IDX(rsp->id)], rsp, sizeof(*rsp)); + rsp = &rsp_pending[ID_TO_IDX(rsp->id)]; DPRINTF("copying a be request\n"); diff -Nru a/tools/blktap/blockstore-tls.c b/tools/blktap/blockstore-tls.c --- /dev/null Wed Dec 31 16:00:00 196900 +++ b/tools/blktap/blockstore-tls.c 2005-03-22 05:03:11 -05:00 @@ -0,0 +1,161 @@ +/************************************************************************** + * + * blockstore.c + * + * Simple block store interface + * + */ + +#include <fcntl.h> +#include <unistd.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <pthread.h> +#include <sys/types.h> +#include <sys/stat.h> +#include "blockstore.h" +#include "parallax-threaded.h" + +/*static int block_fp = -1;*/ + +static int fd_list[READ_POOL_SIZE+1]; + +/** + * readblock: read a block from disk + * @id: block id to read + * + * @return: pointer to block, NULL on error + */ + +void *readblock(u64 id) +{ + void *block; + int tid = (int)pthread_getspecific(tid_key); + + if (lseek64(fd_list[tid], ((off64_t) id - 1LL) * BLOCK_SIZE, SEEK_SET) < 0) { + printf ("%Ld\n", (id - 1) * BLOCK_SIZE); + perror("readblock lseek"); + goto err; + } + if ((block = malloc(BLOCK_SIZE)) == NULL) { + perror("readblock malloc"); + goto err; + } + if (read(fd_list[tid], block, BLOCK_SIZE) != BLOCK_SIZE) { + perror("readblock read"); + free(block); + goto err; + } + return block; + +err: + return NULL; +} + +/** + * writeblock: write an existing block to disk + * @id: block id + * @block: pointer to block + * + * @return: zero on success, -1 on failure + */ +int writeblock(u64 id, void *block) +{ + int tid = (int)pthread_getspecific(tid_key); + + if (lseek64(fd_list[tid], ((off64_t) id - 1LL) * BLOCK_SIZE, SEEK_SET) < 0) { + perror("writeblock lseek"); + goto err; + } + if (write(fd_list[tid], block, BLOCK_SIZE) < 0) { + perror("writeblock write"); ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxxx https://lists.sourceforge.net/lists/listinfo/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |