lkml.org 
[lkml]   [2006]   [Nov]   [15]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    DateWed, 15 Nov 2006 15:50:24 +0800
    FromWu Fengguang <>
    Subject[PATCH 17/28] readahead: initial method - thrashing guard size
    backing_dev_info.ra_thrash_bytes is dynamicly updated to be a little above
    the thrashing safe read-ahead size. It is used in the initial method where
    the thrashing threshold for the particular reader is still unknown.
    
    Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn>
    Signed-off-by: Andrew Morton <akpm@osdl.org>
    --- linux-2.6.19-rc5-mm2.orig/mm/readahead.c
    +++ linux-2.6.19-rc5-mm2/mm/readahead.c
    @@ -822,6 +822,22 @@ out:
     }
     
     /*
    + * Update `backing_dev_info.ra_thrash_bytes' to be a _biased_ average of
    + * read-ahead sizes. Which makes it an a-bit-risky(*) estimation of the
    + * _minimal_ read-ahead thrashing threshold on the device.
    + *
    + * (*) Note that being a bit risky can _help_ overall performance.
    + */
    +static void update_ra_thrash_bytes(struct backing_dev_info *bdi,
    +							unsigned long ra_size)
    +{
    +	ra_size <<= PAGE_CACHE_SHIFT;
    +	bdi->ra_thrash_bytes = (bdi->ra_thrash_bytes < ra_size) ?
    +				(ra_size + bdi->ra_thrash_bytes * 127) / 128:
    +				(ra_size + bdi->ra_thrash_bytes *   7) /   8;
    +}
    +
    +/*
      * Some helpers for querying/building a read-ahead request.
      *
      * Diagram for some variable names used frequently:
    @@ -1118,6 +1134,10 @@ state_based_readahead(struct address_spa
     
     	limit_rala(growth_limit, la_old, &ra_size, &la_size);
     
    +	/* ra_size in its _steady_ state reflects thrashing threshold */
    +	if (page && ra_old + ra_old / 8 >= ra_size)
    +		update_ra_thrash_bytes(mapping->backing_dev_info, ra_size);
    +
     	ra_set_class(ra, RA_CLASS_STATE);
     	ra_set_index(ra, offset, ra->readahead_index);
     	ra_set_size(ra, ra_size, la_size);
    --
    -
    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-11-15 08:55    [from the cache]
    ©2003-2008