diff options
author | Yan, Zheng <zheng.z.yan@intel.com> | 2013-05-03 08:15:52 +0200 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2013-05-03 08:15:52 +0200 |
commit | e30b5dca15dea86aa697f9d58ff646294fe80d3d (patch) | |
tree | 549d1ff3f8e5ecb9675a2937113aa99e64ef3ea1 /fs/9p | |
parent | ext4: fix type-widening bug in inode table readahead code (diff) | |
download | linux-e30b5dca15dea86aa697f9d58ff646294fe80d3d.tar.xz linux-e30b5dca15dea86aa697f9d58ff646294fe80d3d.zip |
ext4: fix fio regression
We (Linux Kernel Performance project) found a regression introduced
by commit:
f7fec032aa ext4: track all extent status in extent status tree
The commit causes about 20% performance decrease in fio random write
test. Profiler shows that rb_next() uses a lot of CPU time. The call
stack is:
rb_next
ext4_es_find_delayed_extent
ext4_map_blocks
_ext4_get_block
ext4_get_block_write
__blockdev_direct_IO
ext4_direct_IO
generic_file_direct_write
__generic_file_aio_write
ext4_file_write
aio_rw_vect_retry
aio_run_iocb
do_io_submit
sys_io_submit
system_call_fastpath
io_submit
td_io_getevents
io_u_queued_complete
thread_main
main
__libc_start_main
The cause is that ext4_es_find_delayed_extent() doesn't have an
upper bound, it keeps searching until a delayed extent is found.
When there are a lots of non-delayed entries in the extent state
tree, ext4_es_find_delayed_extent() may uses a lot of CPU time.
Reported-by: LKP project <lkp@linux.intel.com>
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
Signed-off-by: Zheng Liu <wenqing.lz@taobao.com>
Cc: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/9p')
0 files changed, 0 insertions, 0 deletions