[lkml]   [2009]   [Apr]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[patch 41/58] block: revert part of 18ce3751ccd488c78d3827e9f6bf54e6322676fb
    2.6.27-stable review patch.  If anyone has any objections, please let us know.


    From: Jens Axboe <>

    commit 78f707bfc723552e8309b7c38a8d0cc51012e813 upstream.

    The above commit added WRITE_SYNC and switched various places to using
    that for committing writes that will be waited upon immediately after
    submission. However, this causes a performance regression with AS and CFQ
    for ext3 at least, since sync_dirty_buffer() will submit some writes with
    WRITE_SYNC while ext3 has sumitted others dependent writes without the sync
    flag set. This causes excessive anticipation/idling in the IO scheduler
    because sync and async writes get interleaved, causing a big performance
    regression for the below test case (which is meant to simulate sqlite
    like behaviour).

    ---- test case ----

    int main(int argc, char **argv)

    int fdes, i;
    FILE *fp;
    struct timeval start;
    struct timeval end;
    struct timeval res;

    gettimeofday(&start, NULL);
    for (i=0; i<ROWS; i++) {
    fp = fopen("test_file", "a");
    fprintf(fp, "Some Text Data\n");
    fdes = fileno(fp);
    gettimeofday(&end, NULL);

    timersub(&end, &start, &res);
    fprintf(stdout, "time to write %d lines is %ld(msec)\n", ROWS,
    (res.tv_sec*1000000 + res.tv_usec)/1000);

    return 0;


    Thanks to for tracking down this performance
    regression and providing a test case.

    Signed-off-by: Jens Axboe <>
    Signed-off-by: Greg Kroah-Hartman <>

    fs/buffer.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/fs/buffer.c
    +++ b/fs/buffer.c
    @@ -3042,7 +3042,7 @@ int sync_dirty_buffer(struct buffer_head
    if (test_clear_buffer_dirty(bh)) {
    bh->b_end_io = end_buffer_write_sync;
    - ret = submit_bh(WRITE_SYNC, bh);
    + ret = submit_bh(WRITE, bh);
    if (buffer_eopnotsupp(bh)) {

     \ /
      Last update: 2009-04-30 00:39    [W:0.021 / U:25.080 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site