summaryrefslogtreecommitdiffstats
path: root/usr
diff options
context:
space:
mode:
authorYan, Zheng2013-05-03 08:15:52 +0200
committerTheodore Ts'o2013-05-03 08:15:52 +0200
commite30b5dca15dea86aa697f9d58ff646294fe80d3d (patch)
tree549d1ff3f8e5ecb9675a2937113aa99e64ef3ea1 /usr
parentext4: fix type-widening bug in inode table readahead code (diff)
downloadkernel-qcow2-linux-e30b5dca15dea86aa697f9d58ff646294fe80d3d.tar.gz
kernel-qcow2-linux-e30b5dca15dea86aa697f9d58ff646294fe80d3d.tar.xz
kernel-qcow2-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 'usr')
0 files changed, 0 insertions, 0 deletions