[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