Hi Ryan, I have gone through this patch set and done a simple performance test using direct dd, it indeed brings much performance promotion. Before After bs=4K 1.4 MB/s 5.0 MB/s bs=256k 40.5 MB/s 56.3 MB/s
My questions are: 1) You solution is still using orphan dir to keep inode and allocation consistency, am I right? From our test, it is the most complicated part and has many race cases to be taken consideration. So I wonder if this can be restructured. 2) Rather than using normal block direct io, you introduce a way to use write begin/end in buffer io. IMO, if it wants to perform like direct io, it should be committed to disk by forcing committing journal. But journal committing will consume much time. Why does it bring performance promotion instead? 3) Do you have a test in case of lack of memory? On 2015/9/11 16:19, Ryan Ding wrote: > The idea is to use buffer io(more precisely use the interface > ocfs2_write_begin_nolock & ocfs2_write_end_nolock) to do the zero work beyond > block size. And clear UNWRITTEN flag until direct io data has been written to > disk, which can prevent data corruption when system crashed during direct > write. > > And we will also archive a better performance: > eg. dd direct write new file with block size 4KB: > before this patch: > 2.5 MB/s > after this patch: > 66.4 MB/s > > ---------------------------------------------------------------- > Ryan Ding (8): > ocfs2: add ocfs2_write_type_t type to identify the caller of write > ocfs2: use c_new to indicate newly allocated extents > ocfs2: test target page before change it > ocfs2: do not change i_size in write_end for direct io > ocfs2: return the physical address in ocfs2_write_cluster > ocfs2: record UNWRITTEN extents when populate write desc > ocfs2: fix sparse file & data ordering issue in direct io. > ocfs2: code clean up for direct io > > fs/ocfs2/aops.c | 1118 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------ > fs/ocfs2/aops.h | 11 +- > fs/ocfs2/file.c | 138 +--------------------- > fs/ocfs2/inode.c | 3 + > fs/ocfs2/inode.h | 3 + > fs/ocfs2/mmap.c | 4 +- > fs/ocfs2/ocfs2_trace.h | 16 +-- > fs/ocfs2/super.c | 1 + > 8 files changed, 568 insertions(+), 726 deletions(-) > > . > _______________________________________________ Ocfs2-devel mailing list Ocfs2-devel@oss.oracle.com https://oss.oracle.com/mailman/listinfo/ocfs2-devel