Package: linux-image-3.16.0-4-amd64
Version: 3.16.7-ckt11-1

Initially discovered inside a QEMU guest, by doing the following:

# hdparm -t /dev/vda

Under the Wheezy 3.2 kernel:

 Timing buffered disk reads: 384 MB in  3.01 seconds = 127.50 MB/sec

Under the Jessie 3.16 kernel:

 Timing buffered disk reads:  46 MB in  3.07 seconds =  14.97 MB/sec

After some work swapping kernels, I discovered that this behaviour
exists in the 3.16 and 3.17 kernels, but not in 3.2->3.15 or 3.18+

Watching iostat as the I/O is happening indicated that the 3.16/3.17
guests were performing the I/O in 8-sector (512 bytes per sector)
chunks; in the other kernels, the request sizes were 254 sectors instead.

Some further work identified this patch in 3.18:

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/diff/?id=447f05bb488bff4282088259b04f47f0f9f76760

diff --git a/fs/block_dev.c b/fs/block_dev.c
index 6d72746..e2f3ad08 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -304,6 +304,12 @@ static int blkdev_readpage(struct file * file,
struct page * page)
        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)
@@ -1622,6 +1628,7 @@ static int blkdev_releasepage(struct page *page,
gfp_t wait)

 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,




It applies cleanly to 3.16 and 3.17; with the patch applied, the
larger request sizes are again seen and performance returns to the
previous level.

Could we apply this to the 3.16 kernel in Jessie?


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to