[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [dm-devel] multipath_busy() stalls IO due to scsi_host_is_busy()
- From: Mike Snitzer <snitzer redhat com>
- To: "Jun'ichi Nomura" <j-nomura ce jp nec com>
- Cc: Bernd Schubert <bernd schubert itwm fraunhofer de>, dm-devel redhat com, "linux-scsi vger kernel org" <linux-scsi vger kernel org>
- Subject: Re: [dm-devel] multipath_busy() stalls IO due to scsi_host_is_busy()
- Date: Thu, 17 May 2012 09:46:17 -0400
On Thu, May 17 2012 at 5:09am -0400,
Jun'ichi Nomura <j-nomura ce jp nec com> wrote:
> Hi,
>
> On 05/16/12 21:28, Bernd Schubert wrote:
> > Looking through the call chain, I see the underlying problem seems to be in scsi_host_is_busy().
> >
> >> static inline int scsi_host_is_busy(struct Scsi_Host *shost)
> >> {
> >> if ((shost->can_queue > 0 && shost->host_busy >= shost->can_queue) ||
> >> shost->host_blocked || shost->host_self_blocked)
> >> return 1;
> >>
> >> return 0;
> >> }
>
> multipath_busy() was introduced because, without that,
> a request would be prematurely sent down to SCSI,
> lose the chance of additional merges and result in
> bad performance.
>
> However, when it is target/host that is busy, I think dm should
> send the request down and let SCSI, which has better knowledge
> about the shared resource, do appropriate starvation control.
>
> Could you try the attached patch?
>
> ---
> Jun'ichi Nomura, NEC Corporation
>
> If sdev is not busy but starget and/or host is busy,
> it is better to accept a request from stacking driver.
> Otherwise, the stacking device could be starved by other device
> sharing the same target/host.
Great suggestion.
It should be noted that DM mpath is the only caller of blk_lld_busy (and
scsi_lld_busy). So even though this patch may _seem_ like the tail
(mpath) wagging the dog (SCSI), it is reasonable to change SCSI's
definition of a LLD being "busy" if it benefits multipath.
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]