• Hisashi Hifumi's avatar
    NILFS2: Pagecache usage optimization on NILFS2 · 258ef67e
    Hisashi Hifumi authored
    Hi,
    
    I introduced "is_partially_uptodate" aops for NILFS2.
    
    A page can have multiple buffers and even if a page is not uptodate, some buffers
    can be uptodate on pagesize != blocksize environment.
    This aops checks that all buffers which correspond to a part of a file
    that we want to read are uptodate. If so, we do not have to issue actual
    read IO to HDD even if a page is not uptodate because the portion we
    want to read are uptodate.
    "block_is_partially_uptodate" function is already used by ext2/3/4.
    With the following patch random read/write mixed workloads or random read after
    random write workloads can be optimized and we can get performance improvement.
    
    I did a performance test using the sysbench.
    
    1 --file-block-size=8K --file-total-size=2G --file-test-mode=rndrw --file-fsync-freq=0 --fil
    e-rw-ratio=1 run
    
    -2.6.30-rc5
    
    Test execution summary:
        total time:                          151.2907s
        total number of events:              200000
        total time taken by event execution: 2409.8387
        per-request statistics:
             min:                            0.0000s
             avg:                            0.0120s
             max:                            0.9306s
             approx.  95 percentile:         0.0439s
    
    Threads fairness:
        events (avg/stddev):           12500.0000/238.52
        execution time (avg/stddev):   150.6149/0.01
    
    -2.6.30-rc5-patched
    
    Test execution summary:
        total time:                          140.8828s
        total number of events:              200000
        total time taken by event execution: 2240.8577
        per-request statistics:
             min:                            0.0000s
             avg:                            0.0112s
             max:                            0.8750s
             approx.  95 percentile:         0.0418s
    
    Threads fairness:
        events (avg/stddev):           12500.0000/218.43
        execution time (avg/stddev):   140.0536/0.01
    
    arch: ia64
    pagesize: 16k
    
    Thanks.
    Signed-off-by: default avatarHisashi Hifumi <hifumi.hisashi@oss.ntt.co.jp>
    Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
    258ef67e
inode.c 22 KB