lkml.org 
[lkml]   [2006]   [Mar]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 07/23] readahead: insert cond_resched() calls
    Since the VM_MAX_READAHEAD is greatly enlarged and the algorithm become more
    complex, it becomes necessary to insert some cond_resched() calls in the
    read-ahead path.

    If desktop users still feel audio jitters with the new read-ahead code,
    please try one of the following ways to get rid of it:

    1) compile kernel with CONFIG_PREEMPT_VOLUNTARY/CONFIG_PREEMPT
    2) reduce the read-ahead request size by running
    blockdev --setra 256 /dev/hda # or whatever device you are using

    Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn>
    ---


    This patch is recommended by Con Kolivas to improve respond time for desktop.
    Thanks!

    fs/mpage.c | 4 +++-
    mm/readahead.c | 9 +++++++--
    2 files changed, 10 insertions(+), 3 deletions(-)

    --- linux-2.6.16-rc6-mm2.orig/mm/readahead.c
    +++ linux-2.6.16-rc6-mm2/mm/readahead.c
    @@ -145,8 +145,10 @@ int read_cache_pages(struct address_spac
    continue;
    }
    ret = filler(data, page);
    - if (!pagevec_add(&lru_pvec, page))
    + if (!pagevec_add(&lru_pvec, page)) {
    + cond_resched();
    __pagevec_lru_add(&lru_pvec);
    + }
    if (ret) {
    while (!list_empty(pages)) {
    struct page *victim;
    @@ -184,8 +186,10 @@ static int read_pages(struct address_spa
    page->index, GFP_KERNEL)) {
    ret = mapping->a_ops->readpage(filp, page);
    if (ret != AOP_TRUNCATED_PAGE) {
    - if (!pagevec_add(&lru_pvec, page))
    + if (!pagevec_add(&lru_pvec, page)) {
    + cond_resched();
    __pagevec_lru_add(&lru_pvec);
    + }
    continue;
    } /* else fall through to release */
    }
    @@ -299,6 +303,7 @@ __do_page_cache_readahead(struct address
    continue;

    read_unlock_irq(&mapping->tree_lock);
    + cond_resched();
    page = page_cache_alloc_cold(mapping);
    read_lock_irq(&mapping->tree_lock);
    if (!page)
    --- linux-2.6.16-rc6-mm2.orig/fs/mpage.c
    +++ linux-2.6.16-rc6-mm2/fs/mpage.c
    @@ -407,8 +407,10 @@ mpage_readpages(struct address_space *ma
    &last_block_in_bio, &map_bh,
    &first_logical_block,
    get_block);
    - if (!pagevec_add(&lru_pvec, page))
    + if (!pagevec_add(&lru_pvec, page)) {
    + cond_resched();
    __pagevec_lru_add(&lru_pvec);
    + }
    } else {
    page_cache_release(page);
    }
    --
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-03-19 03:46    [W:0.031 / U:89.204 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site