mirror of https://gitee.com/openkylin/linux.git
ext4: fix performance regression in writeback of random writes
The Linux Kernel Performance project guys have reported that commit
4e7ea81db5
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: "Yan, Zheng" <zheng.z.yan@intel.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
parent
ad4eec6135
commit
9c12a831d7
|
@ -2559,7 +2559,7 @@ static int ext4_writepages(struct address_space *mapping,
|
|||
break;
|
||||
}
|
||||
blk_finish_plug(&plug);
|
||||
if (!ret && !cycled) {
|
||||
if (!ret && !cycled && wbc->nr_to_write > 0) {
|
||||
cycled = 1;
|
||||
mpd.last_page = writeback_index - 1;
|
||||
mpd.first_page = 0;
|
||||
|
|
Loading…
Reference in New Issue