[sheepdog] [PATCH 0/4] iSCSI multipath support
Hitoshi Mitake
mitake.hitoshi at lab.ntt.co.jp
Thu Aug 7 03:22:10 CEST 2014
At Tue, 5 Aug 2014 13:53:49 +0900,
Hitoshi Mitake wrote:
>
> This patchset implements iSCSI multipath support in sheepdog. Below is
> a brief description of the problem and solution (mainly quoting from
> 2nd patch):
>
> The main problem of enabling iSCSI multipath for sheepdog's VDI is
> keeping coherence of tgtd's internal inode data structure. Assume tgt
> A and B have logical units which point same sheepdog VDI. After
> initialization of the logical units, A and B have copies of inode
> object in their address space (let's X denote this object). When an
> initiator sends write request to A and the request causes COW, A
> creates a new object and updates the inode object X (let's X' denote
> the updated one).
>
> After the update by A, A can die with hardware faults. In such a case,
> the initiator detects a connection error and switch its target to B if
> iSCSI multipath is configured correctly. But the problem can arise at
> this point. Because B doesn't know the update caused by A and its
> internal inode object is still X, not X'. B creates requests based on
> X, so it can read obsolete data which is already hidden by X' or
> update X' in wrong manner.
>
> For solving the above problem, this patchset implements a mechanism
> for keeping inode objects consistent in clients' address spaces. The
> above problem is very similar to cache coherence problem of shared
> memory multicore processors, so the mechanism mocks a simple MSI
> protocol. When VDI is locked with shared mode for iSCSI multipath,
> sheep's internal data structure for representing locking has 3 states
> (Modified, Shared, and Invalidated) per participating node (in the
> above example, A and B).
>
> The above states are updated via gateway read and write of inode
> objects: read makes states of every node shared, write makes writer's
> state modified and others invalidated.
>
> With the above protocol, sheepdog can prevent requests from tgt based
> on obsolete inode object.
>
> Corresponding changes for QEMU and tgt can be found:
> - QEMU: https://github.com/sheepdog/qemu/tree/iscsi-multipath
> -- change for QEMU is just for adopting protocol update
> - tgt: https://github.com/sheepdog/tgt/tree/iscsi-multipath
>
> Hitoshi Mitake (4):
> sheepdog proto: a new field type in vdi request for locking
> sheep, dog: introduce a new state for expressing coherence of inode
> objects in clients
> sheep: implement coherence protocol of inode objects in address spaces
> of clients
> sheep: handle node leave event for updating inode object shared state
>
> dog/vdi.c | 32 ++-
> include/internal_proto.h | 28 ++-
> include/sheepdog_proto.h | 10 +
> sheep/gateway.c | 24 ++-
> sheep/group.c | 2 +
> sheep/ops.c | 33 ++-
> sheep/sheep_priv.h | 14 +-
> sheep/vdi.c | 518 ++++++++++++++++++++++++++++++++++++++++++-----
> 8 files changed, 588 insertions(+), 73 deletions(-)
Applied this series because nobody disagrees with it.
Thanks,
Hitoshi
More information about the sheepdog
mailing list