lkml.org 
[lkml]   [2006]   [May]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    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    [W:0.025 / U:0.460 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site