Skip to content

Commit 9c12a83

Browse files
jankaratytso
authored andcommitted
ext4: fix performance regression in writeback of random writes
The Linux Kernel Performance project guys have reported that commit 4e7ea81 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" <[email protected]> Signed-off-by: Jan Kara <[email protected]> Signed-off-by: "Theodore Ts'o" <[email protected]>
1 parent ad4eec6 commit 9c12a83

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

fs/ext4/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2559,7 +2559,7 @@ static int ext4_writepages(struct address_space *mapping,
25592559
break;
25602560
}
25612561
blk_finish_plug(&plug);
2562-
if (!ret && !cycled) {
2562+
if (!ret && !cycled && wbc->nr_to_write > 0) {
25632563
cycled = 1;
25642564
mpd.last_page = writeback_index - 1;
25652565
mpd.first_page = 0;

0 commit comments

Comments
 (0)