v3: - kill SPINLOCK macro hack by not using 'gnu99' - make this module compile with 2.6.32 series kernel (centos 6)
v2: - enhance memory allocation when near out of memory of system - add slab allocator - use vmalloc for aiocb->buf to avoid memory allocation failure This is similar to Ceph's RBD. The main motivation is to replace complex and ineffecient middle ware (such as iscsi softwafe) with simple software stacks to expose sheepdog storage as Linux block device interface, which means that we can make use of page cache as a client cache for buffered read/write optionally and behaves as a normal Linux block device(s) in your local file system. I implement a high performance(hopefully) aio framework for sending/recving data and compared with iscsi tgt or sheepfs, this kernel module should provide much better performance because of shortest code path. With single major allocation scheme, we support 31 partitions for a sheep block device at most and 32768 devices can be attached to local fs for a single node. TODO - support cloned sheep vdi - auto-reconncect to sheep daemon if connection is off/crashed - better error handling - block device multi-queue support for recent kernel - live snapshot of sbd - support hyper volume You can access this patch set at origin/sbd. $ git pull; $ git checkout -b sbd origin/sbd To complile: $ cd shepdog/sbd/;make $ insmod sbd.ko Usage: We control the device the same way as RBD. # associate vdi 'test' to /dev/sbd0 $ echo 127.0.0.1 7000 test > /sys/bus/sbd/add # remove the device sbd0 $ echo 0 > /sys/bus/sbd/remove # list the mapped devices $ cat /sys/buf/sbd/list To get best of performance, # echo 4096 > /sys/block/sbd0/queue/max_sectors_kb Which means io scheduler will try its best to handle us 4MB request. Liu Yuan (9): sheep: some macro preparation for sbd kernem modual sbd: introduce basic framework for Sheepdog Block Device sbd: implement write operation sbd: implement read operation sbd: add list interface to control file sbd: add support for single major allocation scheme sbd: some error handling refinements sbd: improve memory allocation when memory hit low sbd: use kmem_cache for sheep aiocb and request include/sheepdog_proto.h | 22 +- sbd/Kbuild | 5 + sbd/Makefile | 8 + sbd/sbd.h | 143 ++++++++++ sbd/sheep.c | 680 +++++++++++++++++++++++++++++++++++++++++++++++ sbd/sheep_block_device.c | 424 +++++++++++++++++++++++++++++ 6 files changed, 1275 insertions(+), 7 deletions(-) create mode 100644 sbd/Kbuild create mode 100644 sbd/Makefile create mode 100644 sbd/sbd.h create mode 100644 sbd/sheep.c create mode 100644 sbd/sheep_block_device.c -- 1.8.1.2 -- sheepdog mailing list sheepdog@lists.wpkg.org http://lists.wpkg.org/mailman/listinfo/sheepdog