• Jan Kara's avatar
    ext4: fix performance regression in writeback of random writes · 9c12a831
    Jan Kara authored
    The Linux Kernel Performance project guys have reported that commit
    4e7ea81d introduces a performance regression for the following fio
    workload:
    
    [global]
    direct=0
    ioengine=mmap
    size=1500M
    bs=4k
    pre_read=1
    numjobs=1
    overwrite=1
    loops=5
    runtime=300
    group_reporting
    invalidate=0
    directory=/mnt/
    file_service_type=random:36
    file_service_type=random:36
    
    [job0]
    startdelay=0
    rw=randrw
    filename=data0/f1:data0/f2
    
    [job1]
    startdelay=0
    rw=randrw
    filename=data0/f2:data0/f1
    ...
    
    [job7]
    startdelay=0
    rw=randrw
    filename=data0/f2:data0/f1
    
    The culprit of the problem is that after the commit ext4_writepages()
    are more aggressive in writing back pages. Thus we have less consecutive
    dirty pages resulting in more seeking.
    
    This increased aggressivity is caused by a bug in the condition
    terminating ext4_writepages(). We start writing from the beginning of
    the file even if we should have terminated ext4_writepages() because
    wbc->nr_to_write <= 0.
    
    After fixing the condition the throughput of the fio workload is about 20%
    better than before writeback reorganization.
    Reported-by: default avatar"Yan, Zheng" <zheng.z.yan@intel.com>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    9c12a831
inode.c 150 KB