[dm-devel] [PATCH 0/4] dm_queue and noflush suspend feature (take 2)

Kiyoshi Ueda k-ueda at ct.jp.nec.com
Mon Jul 10 22:32:18 UTC 2006


Hello,

This is an updated patch set of dm_queue feature posted on June 23, 2006.
It can be applied on top of 2.6.18-rc1-mm1.
Please review and apply.

Description of the patches:
  1/4: add dm_queue and generic worker thread
  2/4: add noflush feature to dm_queue
  3/4: dm-mpath to enable noflush
  4/4: add API to libdevmapper

This is the update since the last posting:
  o Change the word which describes suspend without queue flush
    from "fast-suspend" to "noflush" based on Alasdair's feedback.
    (Among all patches)

  o noflush support for I/O across some targets.
    To implement this, added "pending_tio" to struct mapped_device.
    It is the counter for pending splitted bios.
    So when the "pending_tio" and the number of queued bios become same,
    the mapped_device is quiet.  Then, suspend can be done.
    (Done in the patch 2/4)

Test results:
Following functional tests are done with/without using 'noflush' feature
in multipath target and found no problem.

  o suspend/resume without table swap in no valid path situation.
  o path addition and table swap in no valid path situation.
  o above testing for I/O across some multipath targets.

  I/Os are returned without error when using 'noflush' feature
  and returned with error when not using it.

Any comments are welcome.

Thanks,
Kiyoshi Ueda


On Fri, 23 Jun 2006 17:45:38 -0400 (EDT), Kiyoshi Ueda <k-ueda at ct.jp.nec.com> wrote:
> Hello,
> 
> I'm working on moving I/O queue of targets to dm core so that
> the table can swap/suspend without the queue flushing.
> -----------------------------------------------------------------------
> BACKGROUND
> 
> Currently, table swap is needed when we add additional path to
> existing multipath map.  To swap table, suspend is needed and
> all I/Os are flushed at the suspention time.
> If all paths in the multipath map are failed and there are queued
> I/Os in the multipath target, these I/Os will return as error
> when the I/O flushing.
> In such case, user should expect that these I/Os are issued
> without error through the new additional path.
> 
> To solve the issue, suspend must be done without queue flushing
> and the queued I/Os must be handed over to the new table when table
> swapping.
> 
> 
> DESIGN
> 
> The structure of the queue and the queue processing kernel thread
> which are used by the multipath target can be generalized so that
> other targets can also use it.
> So the queue and the thread are placed in dm-core, and targets use it
> by using interface functions.
> ------------------------------------------------------------------------
> 
> The following patch set is a draft to solve the issue above.
> It is for 2.6.17-rc6-mm1 + Alasdair's patches which was sent
> to this ML (Subject: "Next set of device-mapper patches").
> 
> The patches are still rough edges and I'd like to get comments
> from dm developpers on this approach.
> For example,
>   1). Queues for a target are placed in "struct dm_target".
>   2). Unmap target function is added for fast-suspend feature.
>   3). Is the interface sufficient for other target drivers?
>       (Current design considers multipath target only.)
> 
> Below is TODO list which I'm working on.
> -----------------------------------------------------------------------
> TODO
> 
> o If the I/O is splitted across some targets, fast-suspend feature
>   doesn't work because the total of queue size doesn't match with
>   the number of pending original bios.
> 
> o Accounting issue when withdrawing queued bios.
> 
> o The dm_queue daemon works for only bio queue.
>   Other works should be handled? (e.g. trigger_event of multipath)
> -----------------------------------------------------------------------
> 
> Any other comments are also very welcome!
> 
> Regards and thanks for your time,
> Kiyoshi Ueda




More information about the dm-devel mailing list