ocfs2: allocate blocks in direct I/O write
cover ocfs2: allocate blocks in direct I/O write
hi all,
In ocfs2 append I/O write and fill holes I/O write situation, blocks have not been allocated yet, so the direct I/O write will fallback to buffer I/O write. Buffer I/O write the data to page cache first, then flush the page cache to disk, this will consume some performance. In this patch, the direct I/O write doesn't not need to fallback to buffer I/O write any more because the allocate blocks are enabled in direct I/O now.
This patch set can be applied against 3.17-rc4 branch of ocfs2 directly.
Thanks,
-- Wang
Weiwei Wang (7)
ocfs2: eliminate the static flag of some functions
ocfs2: add two functions of add and remove inode in orphan dir
ocfs2: add orphan recovery types in ocfs2_recover_orphans
ocfs2: add and remove inode to orphan in ocfs2_direct_IO
ocfs2: allocate blocks in ocfs2_direct_IO_get_blocks
ocfs2: do not fallback to buffer I/O write if appending
ocfs2: do not fallback to buffer I/O write if fill holes
fs/ocfs2/aops.c | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ------ fs/ocfs2/file.c | 104 +++++++++++++++++++++++++++++++---------------------------------------------------- fs/ocfs2/file.h | 9 ++++++++ fs/ocfs2/journal.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------- fs/ocfs2/journal.h | 5 ++++ fs/ocfs2/namei.c | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- --------- fs/ocfs2/namei.h | 21 ++++++++++++++++- fs/ocfs2/ocfs2.h | 6 +++++ 8 files changed, 451 insertions(+), 105 deletions(-)
cover ocfs2: allocate blocks in direct I/O write
Quoted 5 lines · On Wed, 10 Sep 2014 20:38:04 +0800 WeiWei Wang <[email protected]> wrote:
hi all,
In ocfs2 append I/O write and fill holes I/O write situation, blocks have not been allocated yet, so the direct I/O write will fallback to buffer I/O write. Buffer I/O write the data to page cache first, then flush the page cache to disk, this will consume some performance. In this patch, the direct I/O write doesn't not need to fallback to buffer I/O write any more because the allocate blocks are enabled in direct I/O now.
The entire point of the patchset is to improve performance, but the changelog contains no performance measurements! How do we know it's worth considering? Please include quantitative benchmarking results in the changelog.
cover ocfs2: allocate blocks in direct I/O write
Quoted 8 lines · Andrew Morton
Quoted 5 lines · On Wed, 10 Sep 2014 20:38:04 +0800 WeiWei Wang <[email protected]> wrote:
hi all,
In ocfs2 append I/O write and fill holes I/O write situation, blocks have not been allocated yet, so the direct I/O write will fallback to buffer I/O write. Buffer I/O write the data to page cache first, then flush the page cache to disk, this will consume some performance. In this patch, the direct I/O write doesn't not need to fallback to buffer I/O write any more because the allocate blocks are enabled in direct I/O now.
Quoted 6 lines
The entire point of the patchset is to improve performance, but the changelog contains no performance measurements! How do we know it's worth considering? Please include quantitative benchmarking results in the changelog.
We test the performance under the virtualized scenarios before,
IO from iometer tool within a virtual machine which running on the Xen virtualization environment, benchmarking results are measured by iops, 5 seconds take once iops, in this situation, all IO take O_DIRECT flag, enable allocate blocks in O_DIRECT write brings up 5% IOPS performance improvement in append sequential write.
Changelog description of this commit patchset may be not very
accurate, we mainly want to describe that if the O_DIRECT write block allocation is supported, page cache will not be used any more in the O_DIRECT write, memory fragmentation will be reduced and page cache can be managed more effective both. When O_DIRECT flag is set, we really want to go O_DIRECT write, not buffer I/O. In append write and fill hole write situations, O_DIRECT write will not fallback to buffer I/O any more.
Besides, other modern filesystems like ext4 also support direct io
with block allocation. So I think this feature is valuable.
Thanks,
--Wang
cover ocfs2: allocate blocks in direct I/O write
In reply to Andrew MortonHi Andrew,
Currently in case of O_DIRECT append write (block not allocated yet), ocfs2 will fall back to buffered I/O. This has some disadvantages. Firstly, it is not the behavior as expected. Secondly, it will consume huge page cache, e.g. in mass backup scenario. Thirdly, modern filesystems such as ext4 support this feature.
So please consider, thanks.
Quoted 21 lines · Andrew Morton
Quoted 5 lines · On Wed, 10 Sep 2014 20:38:04 +0800 WeiWei Wang <[email protected]> wrote:
hi all,
In ocfs2 append I/O write and fill holes I/O write situation, blocks have not been allocated yet, so the direct I/O write will fallback to buffer I/O write. Buffer I/O write the data to page cache first, then flush the page cache to disk, this will consume some performance. In this patch, the direct I/O write doesn't not need to fallback to buffer I/O write any more because the allocate blocks are enabled in direct I/O now.The entire point of the patchset is to improve performance, but the changelog contains no performance measurements! How do we know it's worth considering? Please include quantitative benchmarking results in the changelog.
_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel at oss.oracle.com
https://oss.oracle.com/mailman/listinfo/ocfs2-devel