lkml.org 
[lkml]   [2012]   [Jan]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch v2 3/8]block: fiops sync/async scale
    CFQ gives 2.5 times more share to sync workload. This matches CFQ.

    Note this is different with the read/write scale. We have 3 types of
    requests:
    1. read
    2. sync write
    3. write
    CFQ doesn't differentitate type 1 and 2, but request cost of 1 and 2
    are usually different for flash based storage. So we have both sync/async
    and read/write scale here.

    Signed-off-by: Shaohua Li <shaohua.li@intel.com>
    ---
    block/fiops-iosched.c | 15 +++++++++++++++
    1 file changed, 15 insertions(+)

    Index: linux/block/fiops-iosched.c
    ===================================================================
    --- linux.orig/block/fiops-iosched.c 2012-01-18 14:33:51.000000000 +0800
    +++ linux/block/fiops-iosched.c 2012-01-18 14:33:59.000000000 +0800
    @@ -17,6 +17,8 @@

    #define VIOS_READ_SCALE (1)
    #define VIOS_WRITE_SCALE (1)
    +#define VIOS_SYNC_SCALE (2)
    +#define VIOS_ASYNC_SCALE (5)

    struct fiops_rb_root {
    struct rb_root rb;
    @@ -39,6 +41,8 @@ struct fiops_data {

    unsigned int read_scale;
    unsigned int write_scale;
    + unsigned int sync_scale;
    + unsigned int async_scale;
    };

    struct fiops_ioc {
    @@ -291,6 +295,9 @@ static u64 fiops_scaled_vios(struct fiop
    if (rq_data_dir(rq) == WRITE)
    vios = vios * fiopsd->write_scale / fiopsd->read_scale;

    + if (!rq_is_sync(rq))
    + vios = vios * fiopsd->async_scale / fiopsd->sync_scale;
    +
    return vios;
    }

    @@ -513,6 +520,8 @@ static void *fiops_init_queue(struct req

    fiopsd->read_scale = VIOS_READ_SCALE;
    fiopsd->write_scale = VIOS_WRITE_SCALE;
    + fiopsd->sync_scale = VIOS_SYNC_SCALE;
    + fiopsd->async_scale = VIOS_ASYNC_SCALE;

    return fiopsd;
    }
    @@ -557,6 +566,8 @@ static ssize_t __FUNC(struct elevator_qu
    }
    SHOW_FUNCTION(fiops_read_scale_show, fiopsd->read_scale);
    SHOW_FUNCTION(fiops_write_scale_show, fiopsd->write_scale);
    +SHOW_FUNCTION(fiops_sync_scale_show, fiopsd->sync_scale);
    +SHOW_FUNCTION(fiops_async_scale_show, fiopsd->async_scale);
    #undef SHOW_FUNCTION

    #define STORE_FUNCTION(__FUNC, __PTR, MIN, MAX) \
    @@ -574,6 +585,8 @@ static ssize_t __FUNC(struct elevator_qu
    }
    STORE_FUNCTION(fiops_read_scale_store, &fiopsd->read_scale, 1, 100);
    STORE_FUNCTION(fiops_write_scale_store, &fiopsd->write_scale, 1, 100);
    +STORE_FUNCTION(fiops_sync_scale_store, &fiopsd->sync_scale, 1, 100);
    +STORE_FUNCTION(fiops_async_scale_store, &fiopsd->async_scale, 1, 100);
    #undef STORE_FUNCTION

    #define FIOPS_ATTR(name) \
    @@ -582,6 +595,8 @@ STORE_FUNCTION(fiops_write_scale_store,
    static struct elv_fs_entry fiops_attrs[] = {
    FIOPS_ATTR(read_scale),
    FIOPS_ATTR(write_scale),
    + FIOPS_ATTR(sync_scale),
    + FIOPS_ATTR(async_scale),
    __ATTR_NULL
    };



    \
     
     \ /
      Last update: 2012-01-30 08:11    [W:0.023 / U:30.308 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site