lkml.org 
[lkml]   [2006]   [May]   [24]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    DateWed, 24 May 2006 19:13:00 +0800
    FromWu Fengguang <>
    Subject[PATCH 14/33] readahead: state based method - data structure
    Extend struct file_ra_state to support the adaptive read-ahead logic.
    
    Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn>
    ---
     include/linux/fs.h |   57 +++++++++++++++++++++++++++++++++++++++++++----------
     1 files changed, 47 insertions(+), 10 deletions(-)
    --- linux-2.6.17-rc4-mm3.orig/include/linux/fs.h
    +++ linux-2.6.17-rc4-mm3/include/linux/fs.h
    @@ -613,21 +613,58 @@ struct fown_struct {
     
     /*
      * Track a single file's readahead state
    + *
    + * Diagram for the adaptive readahead logic:
    + *
    + *  |--------- old chunk ------->|-------------- new chunk -------------->|
    + *  +----------------------------+----------------------------------------+
    + *  |               #            |                  #                     |
    + *  +----------------------------+----------------------------------------+
    + *                  ^            ^                  ^                     ^
    + *  file_ra_state.la_index    .ra_index   .lookahead_index      .readahead_index
    + *
    + * Deduced sizes:
    + *                               |----------- readahead size ------------>|
    + *  +----------------------------+----------------------------------------+
    + *  |               #            |                  #                     |
    + *  +----------------------------+----------------------------------------+
    + *                  |------- invoke interval ------>|-- lookahead size -->|
      */
     struct file_ra_state {
    -	unsigned long start;		/* Current window */
    -	unsigned long size;
    -	unsigned long flags;		/* ra flags RA_FLAG_xxx*/
    -	unsigned long cache_hit;	/* cache hit count*/
    -	unsigned long prev_page;	/* Cache last read() position */
    -	unsigned long ahead_start;	/* Ahead window */
    -	unsigned long ahead_size;
    -	unsigned long ra_pages;		/* Maximum readahead window */
    -	unsigned long mmap_hit;		/* Cache hit stat for mmap accesses */
    -	unsigned long mmap_miss;	/* Cache miss stat for mmap accesses */
    +	union {
    +		struct { /* conventional read-ahead */
    +			unsigned long start;		/* Current window */
    +			unsigned long size;
    +			unsigned long ahead_start;	/* Ahead window */
    +			unsigned long ahead_size;
    +			unsigned long cache_hit;        /* cache hit count */
    +		};
    +#ifdef CONFIG_ADAPTIVE_READAHEAD
    +		struct { /* adaptive read-ahead */
    +			pgoff_t la_index;
    +			pgoff_t ra_index;
    +			pgoff_t lookahead_index;
    +			pgoff_t readahead_index;
    +			unsigned long age;
    +			uint64_t cache_hits;
    +		};
    +#endif
    +	};
    +
    +	/* mmap read-around */
    +	unsigned long mmap_hit;         /* Cache hit stat for mmap accesses */
    +	unsigned long mmap_miss;        /* Cache miss stat for mmap accesses */
    +
    +	/* common ones */
    +	unsigned long flags;            /* ra flags RA_FLAG_xxx*/
    +	unsigned long prev_page;        /* Cache last read() position */
    +	unsigned long ra_pages;         /* Maximum readahead window */
     };
     #define RA_FLAG_MISS 0x01	/* a cache miss occured against this file */
     #define RA_FLAG_INCACHE 0x02	/* file is already in cache */
    +#define RA_FLAG_MMAP		(1UL<<31)	/* mmaped page access */
    +#define RA_FLAG_NO_LOOKAHEAD	(1UL<<30)	/* disable look-ahead */
    +#define RA_FLAG_EOF		(1UL<<29)	/* readahead hits EOF */
     
     struct file {
     	/*
    --
    -
    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-05-24 13:31    [from the cache]
    ©2003-2008