linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Vivek Goyal <vgoyal@redhat.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Shaohua Li <shaohua.li@intel.com>,
	lkml <linux-kernel@vger.kernel.org>,
	linux-mm <linux-mm@kvack.org>, Jens Axboe <axboe@kernel.dk>,
	Herbert Poetzl <herbert@13thfloor.at>,
	Eric Dumazet <eric.dumazet@gmail.com>,
	Wu Fengguang <wfg@linux.intel.com>
Subject: Re: [PATCH] fix readahead pipeline break caused by block plug
Date: Wed, 1 Feb 2012 15:10:17 -0500	[thread overview]
Message-ID: <20120201201017.GC13246@redhat.com> (raw)
In-Reply-To: <20120201091807.GA7451@infradead.org>

On Wed, Feb 01, 2012 at 04:18:07AM -0500, Christoph Hellwig wrote:
> On Tue, Jan 31, 2012 at 10:36:53PM -0500, Vivek Goyal wrote:
> > I still see that IO is being submitted one page at a time. The only
> > real difference seems to be that queue unplug happening at random times
> > and many a times we are submitting much smaller requests (40 sectors, 48
> > sectors etc).
> 
> This is expected given that the block device node uses
> block_read_full_page, and not mpage_readpage(s).

What is the difference between block_read_full_page() and
mpage_readpage(). IOW, why block device does not use mpage_readpage(s)
interface?

Is enabling mpage_readpages() on block devices is as simple as following
patch or more is involved? (I suspect it has to be more than this. If it
was this simple, it would have been done by now).

This patch complies and seems to work. (system does not crash and dd
seems to be working. I can't verify the contents of the file though).

Applying following patch improved the speed from 110MB/s to more than
230MB/s.

# dd if=/dev/sdb of=/dev/null bs=1M count=1K
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 4.6269 s, 232 MB/s

---
 fs/block_dev.c |    7 +++++++
 1 file changed, 7 insertions(+)

Index: linux-2.6/fs/block_dev.c
===================================================================
--- linux-2.6.orig/fs/block_dev.c	2012-02-01 22:21:42.000000000 -0500
+++ linux-2.6/fs/block_dev.c	2012-02-02 01:52:40.000000000 -0500
@@ -347,6 +347,12 @@ static int blkdev_readpage(struct file *
 	return block_read_full_page(page, blkdev_get_block);
 }
 
+static int blkdev_readpages(struct file * file, struct address_space *mapping,
+		struct list_head *pages, unsigned nr_pages)
+{
+	return mpage_readpages(mapping, pages, nr_pages, blkdev_get_block);
+}
+
 static int blkdev_write_begin(struct file *file, struct address_space *mapping,
 			loff_t pos, unsigned len, unsigned flags,
 			struct page **pagep, void **fsdata)
@@ -1601,6 +1607,7 @@ static int blkdev_releasepage(struct pag
 
 static const struct address_space_operations def_blk_aops = {
 	.readpage	= blkdev_readpage,
+	.readpages	= blkdev_readpages,
 	.writepage	= blkdev_writepage,
 	.write_begin	= blkdev_write_begin,
 	.write_end	= blkdev_write_end,





  reply	other threads:[~2012-02-01 20:10 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-31  7:59 [PATCH] fix readahead pipeline break caused by block plug Shaohua Li
2012-01-31  8:36 ` Christoph Hellwig
2012-01-31  8:48 ` Eric Dumazet
2012-01-31  8:50   ` Herbert Poetzl
2012-01-31  8:53   ` Shaohua Li
2012-01-31  9:17     ` Eric Dumazet
2012-01-31 10:20 ` Wu Fengguang
2012-01-31 10:34 ` Wu Fengguang
2012-01-31 10:46   ` Christoph Hellwig
2012-01-31 10:57     ` Wu Fengguang
2012-01-31 11:34       ` Christoph Hellwig
2012-01-31 11:42         ` Wu Fengguang
2012-01-31 11:57           ` Christoph Hellwig
2012-01-31 12:20             ` Wu Fengguang
2012-02-01  2:25   ` Shaohua Li
2012-01-31 14:47 ` Vivek Goyal
2012-01-31 20:23   ` Vivek Goyal
2012-01-31 22:03 ` Vivek Goyal
2012-01-31 22:13   ` Andrew Morton
2012-01-31 22:22     ` Vivek Goyal
2012-02-01  3:36       ` Vivek Goyal
2012-02-01  7:10         ` Wu Fengguang
2012-02-01 16:01           ` Vivek Goyal
2012-02-01  9:18         ` Christoph Hellwig
2012-02-01 20:10           ` Vivek Goyal [this message]
2012-02-01 20:13             ` Jeff Moyer
2012-02-01 20:22             ` Andrew Morton
2012-02-01  7:02   ` Wu Fengguang

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=20120201201017.GC13246@redhat.com \
    --to=vgoyal@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=axboe@kernel.dk \
    --cc=eric.dumazet@gmail.com \
    --cc=hch@infradead.org \
    --cc=herbert@13thfloor.at \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=shaohua.li@intel.com \
    --cc=wfg@linux.intel.com \
    /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: link
Be 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).