kernel_optimize_test/fs/ext4
Jan Kara 9c12a831d7 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>
2013-09-16 08:24:26 -04:00
..
acl.c
acl.h
balloc.c ext4: mark group corrupt on group descriptor checksum 2013-08-28 18:46:56 -04:00
bitmap.c
block_validity.c
dir.c ext4: Fix misspellings using 'codespell' tool 2013-08-28 14:40:12 -04:00
ext4_extents.h ext4: isolate ext4_extents.h file 2013-08-28 14:47:06 -04:00
ext4_jbd2.c jbd2: Fix use after free after error in jbd2_journal_dirty_metadata() 2013-08-12 09:53:28 -04:00
ext4_jbd2.h ext4: Fix misspellings using 'codespell' tool 2013-08-28 14:40:12 -04:00
ext4.h ext4: mark block group as corrupt on inode bitmap error 2013-08-28 18:32:58 -04:00
extents_status.c ext4: isolate ext4_extents.h file 2013-08-28 14:47:06 -04:00
extents_status.h ext4: isolate ext4_extents.h file 2013-08-28 14:47:06 -04:00
extents.c ext4: isolate ext4_extents.h file 2013-08-28 14:47:06 -04:00
file.c jbd2: Fix oops in jbd2_journal_file_inode() 2013-08-16 21:19:41 -04:00
fsync.c
hash.c
ialloc.c ext4: mark group corrupt on group descriptor checksum 2013-08-28 18:46:56 -04:00
indirect.c ext4: isolate ext4_extents.h file 2013-08-28 14:47:06 -04:00
inline.c Lots of bug fixes, cleanups and optimizations. In the bug fixes 2013-07-02 09:39:34 -07:00
inode.c ext4: fix performance regression in writeback of random writes 2013-09-16 08:24:26 -04:00
ioctl.c ext4: isolate ext4_extents.h file 2013-08-28 14:47:06 -04:00
Kconfig
Makefile
mballoc.c ext4: mark block group as corrupt on block bitmap error 2013-08-28 17:35:51 -04:00
mballoc.h
migrate.c ext4: Fix misspellings using 'codespell' tool 2013-08-28 14:40:12 -04:00
mmp.c
move_extent.c ext4: cache all of an extent tree's leaf block upon reading 2013-08-16 21:23:41 -04:00
namei.c ext4: allocate delayed allocation blocks before rename 2013-08-16 22:06:53 -04:00
page-io.c ext4: rate limit printk in buffer_io_error() 2013-07-11 22:42:42 -04:00
resize.c
super.c ext4: allow specifying external journal by pathname mount option 2013-08-28 19:05:07 -04:00
symlink.c
truncate.h
xattr_security.c
xattr_trusted.c
xattr_user.c
xattr.c
xattr.h