• Jan Kara's avatar
    jbd: Refine commit writeout logic · 2db938be
    Jan Kara authored
    Currently we write out all journal buffers in WRITE_SYNC mode. This improves
    performance for fsync heavy workloads but hinders performance when writes
    are mostly asynchronous, most noticably it slows down readers and users
    complain about slow desktop response etc.
    
    So submit writes as asynchronous in the normal case and only submit writes as
    WRITE_SYNC if we detect someone is waiting for current transaction commit.
    
    I've gathered some numbers to back this change. The first is the read latency
    test. It measures time to read 1 MB after several seconds of sleeping in
    presence of streaming writes.
    
    Top 10 times (out of 90) in us:
    Before		After
    2131586		697473
    1709932		557487
    1564598		535642
    1480462		347573
    1478579		323153
    1408496		222181
    1388960		181273
    1329565		181070
    1252486		172832
    1223265		172278
    
    Average:
    619377		82180
    
    So the improvement in both maximum and average latency is massive.
    
    I've measured fsync throughput by:
    fs_mark -n 100 -t 1 -s 16384 -d /mnt/fsync/ -S 1 -L 4
    
    in presence of streaming reader. The numbers (fsyncs/s) are:
    Before		After
    9.9		6.3
    6.8		6.0
    6.3		6.2
    5.8		6.1
    
    So fsync performance seems unharmed by this change.
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    2db938be
transaction.c 65 KB