ocfs2: fix ocfs2 direct io code patch to support sparse file and data ordering semantics
Get series with b4
b4 am [email protected]Versions newest first
- v1 Latest0 of 8 patches 0 repliesNew
Patches in v1 No applies recorded yet
None of the 8 patches the cover letter announces are in this archive.
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.
Cover letter [Ocfs2-devel] [PATCH 0/8] ocfs2: fix ocfs2 direct io code patch to support sparse file and data ordering semantics
Hi Joseph,
Quoted 18 lines · Joseph Qi
Hi Ryan,
Quoted 15 lines · Ryan Ding
Hi Joseph,
Quoted 12 lines · Joseph Qi
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 Afterbs=4K 1.4 MB/s 5.0 MB/s bs=256k 40.5 MB/s 56.3 MB/sMy 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.
Quoted 5 lines
Quoted 1 line
I have not got a better idea to do this. I think the only reason why direct io using orphan is to prevent space lost when system crash during append direct write. But maybe a 'fsck -f' will do that job. Is it necessary to use orphan?
The idea is taken from ext4, but since ocfs2 is cluster filesystem, so it is much more complicated than ext4.
And fsck can only be used offline, but using orphan is to perform recovering online. So I don't think fsck can replace it in all cases.
OK, I agree.
Quoted 8 lines
Quoted 7 lines
Quoted 6 lines
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?
I use buffer io to write only the zero pages. Actual data payload is written as direct io. I think there is no need to do a force commit. Because direct means "Try to minimize cache effects of the I/O to and from this file.", it does not means "write all data & meta data to disk before write return".
So this is protected by "UNWRITTEN" flag, right?
Yes.
Quoted 5 lines
Quoted 3 lines
Quoted 2 lines
3) Do you have a test in case of lack of memory?
I tested it in a system with 2GB memory. Is that enough?
What I mean is doing many direct io jobs in case system free memory is low.
You use dio or aio+dio?
Thanks,
Ryan
Quoted 46 lines
Thanks,
JoesphQuoted 41 lines
Thanks,
RyanQuoted 34 lines · Ryan Ding
Quoted 33 lines
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: addocfs2_write_type_ttype to identify the caller of write
ocfs2: usec_newto indicate newly allocated extents
ocfs2: test target page before change it
ocfs2: do not changei_sizeinwrite_endfor direct io
ocfs2: return the physical address inocfs2_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 iofs/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(-)Quoted 2 lines
Quoted 2 lines
.
.