Ahh yes sorry you are right Dawid and Uwe.

Mike McCandless

http://blog.mikemccandless.com


On Wed, Sep 18, 2019 at 10:11 AM Uwe Schindler <u...@thetaphi.de> wrote:

> The direct io has in fact the problem which was just wrongly named by
> Dawid: Block alignment is needed - on disk and not in memory. In short: You
> can't read or write a single byte anywhere in file; you need a buffering
> layer in-between that takes care of alignment. NativeUnixDir does this.
>
> Uwe
>
> Am September 18, 2019 1:54:35 PM UTC schrieb Dawid Weiss <
> dawid.we...@gmail.com>:
>>
>> Thanks for the explanation, Mike!
>>
>> D.
>>
>> On Wed, Sep 18, 2019 at 3:21 PM Michael McCandless
>> <luc...@mikemccandless.com> wrote:
>>
>>>
>>>  Dawid, it's confusing: direct IO is different from a direct ByteBuffer!
>>>
>>>  Direct IO means you bypass all kernel "smarts", so the Linux buffer cache 
>>> is not used, no IO scheduling, no write cache that the pdflush daemon must 
>>> periodically move to disk, etc.  This is normally a bad idea, and better to 
>>> use fadvise/madvise to give kernel hints about what you are doing, and use 
>>> the buffer cache for what it's good at.  Linus hates that direct IO is even 
>>> an option for us ...
>>>
>>>  Back when I wrote NativeUnixDirectory, the idea was to prevent ongoing 
>>> merges from so heavily impacting ongoing searches, when you are doing 
>>> indexing and searching on one node.  We open the newly merged segments 
>>> files using direct IO, and do our own buffering, and then all writes go 
>>> straight to disk instead of using up precious hot pages that are in use for 
>>> searching.  I think I ran some simple performance tests back then but I 
>>> don't remember the results ... more testing is needed to see if it really 
>>> helps.
>>>
>>>  At Amazon, we are using segment based replication ever 60 seconds to copy 
>>> newly indexed segments out to all searchers, so we never have nodes doing 
>>> both indexing or searching, it's either or ... but, copying out max sized 
>>> newly merged segments to the searchers is causing some thrashing so we are 
>>> exploring using direct IO for those writes, and then separately warming the 
>>> new segments after the copy.
>>>
>>>  Mike McCandless
>>>
>>>  http://blog.mikemccandless.com
>>>
>>>
>>>  On Tue, Sep 17, 2019 at 1:16 PM Uwe Schindler <u...@thetaphi.de> wrote:
>>>
>>>>
>>>>  We discussed this already on Berlinbuzzwords (Mike and Michael). Yes it's 
>>>> possible and may work for merges where block io is possible. But most of 
>>>> us said: it's fine to not use io cache for merging, but it won't make 
>>>> pages hot. So merges are invisible to OS, so you have to warm merged 
>>>> segments if you write directly. If you read directly on merging, you won't 
>>>> pollute cache with one time reads, but it also won't use cache if already 
>>>> cached.
>>>>  We should better make a proposal for f/madvise. The jdk people are open 
>>>> for that, and I am jdk committer now, so I can make a prototype.
>>>>
>>>>  Uwe
>>>>
>>>>  Am September 17, 2019 4:48:26 PM UTC schrieb Dawid Weiss 
>>>> <dawid.we...@gmail.com>:
>>>>
>>>>>
>>>>>  Isn't that restricted to aligned block-only access though? I can
>>>>>  imagine this would complicate the implementation if somebody wanted to
>>>>>  use it directly.
>>>>>
>>>>>  Dawid
>>>>>
>>>>>  On Tue, Sep 17, 2019 at 5:37 PM Michael McCandless
>>>>>  <luc...@mikemccandless.com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>>   Whoa!  That would be awesome -- no more JNI to use Direct I/O?
>>>>>>   Looks like you use it like this:
>>>>>>
>>>>>>   FileChannel fc = FileChannel.open(p, StandardOpenOption.WRITE,
>>>>>>                                     ExtendedOpenOption.DIRECT
>>>>>>
>>>>>>   But it looks like you need to enable the jdk.unsupported module, added 
>>>>>> with http://openjdk.java.net/jeps/260
>>>>>>
>>>>>>   Mike McCandless
>>>>>>
>>>>>>   http://blog.mikemccandless.com
>>>>>>
>>>>>>
>>>>>>   On Mon, Sep 16, 2019 at 11:55 AM Michael Sokolov <msoko...@gmail.com> 
>>>>>> wrote:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>   https://bugs.openjdk.java.net/browse/JDK-8189192 makes it appear that
>>>>>>>   Direct I/O is (or may be?) available now in JDK's since JDK10. Should
>>>>>>>   we try using that API in NativeUnixDirectory in order to avoid JNI
>>>>>>>   calls?
>>>>>>> ------------------------------
>>>>>>>   To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
>>>>>>>   For additional commands, e-mail: dev-h...@lucene.apache.org
>>>>>>>
>>>>>>> ------------------------------
>>>>>  To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
>>>>>  For additional commands, e-mail: dev-h...@lucene.apache.org
>>>>>
>>>>>
>>>>  --
>>>>  Uwe Schindler
>>>>  Achterdiek 19, 28357 Bremen
>>>>  https://www.thetaphi.de
>>>>
>>> ------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
>> For additional commands, e-mail: dev-h...@lucene.apache.org
>>
>>
> --
> Uwe Schindler
> Achterdiek 19, 28357 Bremen
> https://www.thetaphi.de
>

Reply via email to