LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Kiyoshi Ueda <k-ueda@ct.jp.nec.com> To: jens.axboe@oracle.com, agk@redhat.com, James.Bottomley@HansenPartnership.com, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org, dm-devel@redhat.com, j-nomura@ce.jp.nec.com, k-ueda@ct.jp.nec.com Subject: [PATCH 03/13] mm: lld busy status exporting interface Date: Fri, 12 Sep 2008 10:42:28 -0400 (EDT) [thread overview] Message-ID: <20080912.104228.30188313.k-ueda@ct.jp.nec.com> (raw) In-Reply-To: <20080912.103814.74754581.k-ueda@ct.jp.nec.com> This patch adds an interface to check lld's busy status from the block layer. (scsi patch is also included.) This resolves a performance problem on request stacking devices below. Some drivers like scsi mid layer stop dispatching request when they detect busy state on its low-level device like host/bus/device. It allows other requests to stay in the I/O scheduler's queue for a chance of merging. Request stacking drivers like request-based dm should follow the same logic. However, there is no generic interface for the stacked device to check if the underlying device(s) are busy. If the request stacking driver dispatches and submits requests to the busy underlying device, the requests will stay in the underlying device's queue without a chance of merging. This causes performance problem on burst I/O load. With this patch, busy state of the underlying device is exported via the state flag of queue's backing_dev_info. So the request stacking driver can check it and stop dispatching requests if busy. The underlying device driver must set/clear the flag appropriately: ON: when the device driver can't process requests immediately. OFF: when the device driver can process requests immediately, including abnormal situations where the device driver needs to kill all requests. Signed-off-by: Kiyoshi Ueda <k-ueda@ct.jp.nec.com> Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com> Cc: James Bottomley <James.Bottomley@HansenPartnership.com> Cc: Andrew Morton <akpm@linux-foundation.org> --- include/linux/backing-dev.h | 8 ++++++++ mm/backing-dev.c | 13 +++++++++++++ 2 files changed, 21 insertions(+) Index: 2.6.27-rc6/include/linux/backing-dev.h =================================================================== --- 2.6.27-rc6.orig/include/linux/backing-dev.h +++ 2.6.27-rc6/include/linux/backing-dev.h @@ -26,6 +26,7 @@ enum bdi_state { BDI_pdflush, /* A pdflush thread is working this device */ BDI_write_congested, /* The write queue is getting full */ BDI_read_congested, /* The read queue is getting full */ + BDI_lld_congested, /* The device/host is busy */ BDI_unused, /* Available bits start here */ }; @@ -226,8 +227,15 @@ static inline int bdi_rw_congested(struc (1 << BDI_write_congested)); } +static inline int bdi_lld_congested(struct backing_dev_info *bdi) +{ + return bdi_congested(bdi, 1 << BDI_lld_congested); +} + void clear_bdi_congested(struct backing_dev_info *bdi, int rw); void set_bdi_congested(struct backing_dev_info *bdi, int rw); +void clear_bdi_lld_congested(struct backing_dev_info *bdi); +void set_bdi_lld_congested(struct backing_dev_info *bdi); long congestion_wait(int rw, long timeout); Index: 2.6.27-rc6/mm/backing-dev.c =================================================================== --- 2.6.27-rc6.orig/mm/backing-dev.c +++ 2.6.27-rc6/mm/backing-dev.c @@ -279,6 +279,19 @@ void set_bdi_congested(struct backing_de } EXPORT_SYMBOL(set_bdi_congested); +void clear_bdi_lld_congested(struct backing_dev_info *bdi) +{ + clear_bit(BDI_lld_congested, &bdi->state); + smp_mb__after_clear_bit(); +} +EXPORT_SYMBOL_GPL(clear_bdi_lld_congested); + +void set_bdi_lld_congested(struct backing_dev_info *bdi) +{ + set_bit(BDI_lld_congested, &bdi->state); +} +EXPORT_SYMBOL_GPL(set_bdi_lld_congested); + /** * congestion_wait - wait for a backing_dev to become uncongested * @rw: READ or WRITE
next prev parent reply other threads:[~2008-09-12 14:42 UTC|newest] Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top 2008-09-12 14:38 [PATCH 00/13] request-based dm-multipath Kiyoshi Ueda 2008-09-12 14:40 ` [PATCH 01/13] block: add request update interface Kiyoshi Ueda 2008-09-12 14:41 ` [PATCH 02/13] block: add request submission interface Kiyoshi Ueda 2008-09-14 13:10 ` Boaz Harrosh 2008-09-16 16:06 ` Kiyoshi Ueda 2008-09-16 17:02 ` Jens Axboe 2008-09-16 18:12 ` Kiyoshi Ueda 2008-09-12 14:42 ` Kiyoshi Ueda [this message] 2008-09-12 14:43 ` [PATCH 04/13] scsi: exports busy status Kiyoshi Ueda 2008-09-12 14:43 ` [PATCH 05/13] block: add a queue flag for request stacking support Kiyoshi Ueda 2008-09-12 14:44 ` [PATCH 06/13] dm: remove unused DM_WQ_FLUSH_ALL Kiyoshi Ueda 2008-09-12 14:44 ` [PATCH 07/13] dm: tidy local_init Kiyoshi Ueda 2008-09-12 14:45 ` [PATCH 08/13] dm: add kmem_cache for request-based dm Kiyoshi Ueda 2008-09-12 14:45 ` [PATCH 09/13] dm: add target interfaces " Kiyoshi Ueda 2008-09-12 14:46 ` [PATCH 10/13] dm: add core functions " Kiyoshi Ueda 2008-10-24 7:44 ` [dm-devel] " Nikanth K 2008-10-28 16:00 ` Kiyoshi Ueda [not found] ` <490FB852.3FEE.00C5.1@novell.com> [not found] ` <49102C03020000C50002E257@victor.provo.novell.com> 2008-11-04 15:01 ` Kiyoshi Ueda 2008-09-12 14:46 ` [PATCH 11/13] dm: enable " Kiyoshi Ueda 2008-10-24 7:52 ` [dm-devel] " Nikanth K 2008-10-28 16:02 ` Kiyoshi Ueda 2008-09-12 14:46 ` [PATCH 12/13] dm: reject I/O violating new queue limits Kiyoshi Ueda 2008-09-12 14:47 ` [PATCH 13/13] dm-mpath: convert to request-based Kiyoshi Ueda 2008-10-24 7:55 ` [dm-devel] " Nikanth K 2008-10-28 16:03 ` Kiyoshi Ueda 2008-09-14 13:17 ` [PATCH 00/13] request-based dm-multipath Jens Axboe
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20080912.104228.30188313.k-ueda@ct.jp.nec.com \ --to=k-ueda@ct.jp.nec.com \ --cc=James.Bottomley@HansenPartnership.com \ --cc=agk@redhat.com \ --cc=akpm@linux-foundation.org \ --cc=dm-devel@redhat.com \ --cc=j-nomura@ce.jp.nec.com \ --cc=jens.axboe@oracle.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-scsi@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).