On 08/05/2015 02:40 PM, Joseph Qi wrote:
> On 2015/8/5 12:40, Ryan Ding wrote:
>> Hi Joseph,
>>
>>
>> On 08/04/2015 05:03 PM, Joseph Qi wrote:
>>> Hi Ryan,
>>>
>>> On 2015/8/4 14:16, Ryan Ding wrote:
>>>> Hi Joseph,
>>>>
>>>> Sorry for bothering you with the old patches. But I really need to know 
>>>> what this patch is for.
>>>>
>>>> https://oss.oracle.com/pipermail/ocfs2-devel/2015-January/010496.html
>>>>
>>>>   From above email archive, you mentioned those patches aim to reduce the 
>>>> host page cache consumption. But in my opinion, after append direct io, 
>>>> the page used for buffer is clean. System can realloc those cached pages. 
>>>> We can even call invalidate_mapping_pages to fast that process. Maybe more 
>>>> pages will be needed during direct io. But direct io size can not be too 
>>>> large, right?
>>>>
>>> We introduced the append direct io because originally ocfs2 would fall
>>> back to buffer io in case of thin provision, which was not the actual
>>> behavior that user expect.
>> direct io has 2 semantics:
>> 1. io is performed synchronously, data is guaranteed to be transferred after 
>> write syscall return.
>> 2. File I/O is done directly to/from user space buffers. No page buffer 
>> involved.
>> But I think #2 is invisible to user space, #1 is the only thing that user 
>> space is really interested in.
>> We should balance the benefit and disadvantage to determine whether #2 
>> should be supported.
>> The disadvantage is: bring too much complexity to the code, bugs will come 
>> along. And involved a incompatible feature.
>> For example, I did a single node sparse file test, and it failed.
> What do you mean by "failed"? Could you please send out the test case
> and the actual output?
> And which version did you test? Because some bug fixes were submitted later.
> Currently doing direct io with hole is not support.
I use linux 4.0 latest commit 39a8804455fb23f09157341d3ba7db6d7ae6ee76
A simplified test case is:
dd if=/dev/zero of=/mnt/hello bs=512 count=1 oflag=direct && truncate 
/mnt/hello -s 2097152
file 'hello' is not exist before test. After this command, file 'hello' 
should be all zero. But 512~4096 is some random data.
>
>> The original way of ocfs2 handling direct io(turn to buffer io when it's 
>> append write or write to a file hole) has 2 consideration:
>> 1. easier to support cluster wide coherence.
>> 2. easier to support sparse file.
>> But it seems that your patch handle #2 not very well.
>> There may be more issues that I have not found.
>>> I didn't get you that more pages would be needed during direct io. Could
>>> you please explain it more clearly?
>> I mean the original way of handle append-dio will consume some page cache. 
>> The page cache size it consume depend on the direct io size. For example, 
>> 1MB direct io will consume 1MB page cache.But since direct io size can not 
>> be too large, the page cache it consume can not be too large also. And those 
>> pages can be freed after direct io finished by calling 
>> invalidate_mapping_pages().
> I've got your point. Please consider the following user scenario.
> 1. A node mounted several ocfs2 volumes, for example, 10.
> 2. For each ocfs2 volume, there are several thin provision VMs.
Is there many direct io in parallelthat had been tested out?
About o2net_wq will block reclaim cache issue you mentioned in another 
mail. invalidate_mapping_pages() only free the page cache pages that 
stored data. It will not affect meta data cache. So that will not wait 
unlock. Is that right?
>
>>> Thanks,
>>> Joseph
>>>
>>>> Thanks,
>>>> Ryan
>>>>
>>>>
>>
>> .
>>
>


_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel@oss.oracle.com
https://oss.oracle.com/mailman/listinfo/ocfs2-devel

Reply via email to