lkml.org 
[lkml]   [2011]   [Mar]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 07/27] btrfs: wait on too many nr_async_bios
    Tests show that btrfs is repeatedly moving _all_ PG_dirty pages into
    PG_writeback state. It's desirable to have some limit on the number of
    writeback pages.

    Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
    ---
    fs/btrfs/disk-io.c | 7 +++++++
    1 file changed, 7 insertions(+)

    before patch:
    http://www.kernel.org/pub/linux/kernel/people/wfg/writeback/tests/3G/btrfs-1dd-1M-8p-2952M-2.6.37-rc5+-2010-12-08-21-30/vmstat-dirty-300.png

    after patch:
    http://www.kernel.org/pub/linux/kernel/people/wfg/writeback/tests/3G/btrfs-1dd-1M-8p-2952M-2.6.37-rc5+-2010-12-08-21-14/vmstat-dirty-300.png

    --- linux-next.orig/fs/btrfs/disk-io.c 2011-03-03 14:03:39.000000000 +0800
    +++ linux-next/fs/btrfs/disk-io.c 2011-03-03 14:03:40.000000000 +0800
    @@ -616,6 +616,7 @@ int btrfs_wq_submit_bio(struct btrfs_fs_
    extent_submit_bio_hook_t *submit_bio_done)
    {
    struct async_submit_bio *async;
    + int limit;

    async = kmalloc(sizeof(*async), GFP_NOFS);
    if (!async)
    @@ -643,6 +644,12 @@ int btrfs_wq_submit_bio(struct btrfs_fs_

    btrfs_queue_worker(&fs_info->workers, &async->work);

    + limit = btrfs_async_submit_limit(fs_info);
    +
    + if (atomic_read(&fs_info->nr_async_bios) > limit)
    + wait_event(fs_info->async_submit_wait,
    + (atomic_read(&fs_info->nr_async_bios) < limit));
    +
    while (atomic_read(&fs_info->async_submit_draining) &&
    atomic_read(&fs_info->nr_async_submits)) {
    wait_event(fs_info->async_submit_wait,



    \
     
     \ /
      Last update: 2011-03-03 09:25    [W:4.063 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site