[ 
https://issues.apache.org/jira/browse/LUCENE-753?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12609916#action_12609916
 ] 

Yonik Seeley commented on LUCENE-753:
-------------------------------------

bq. (clones are made & used up quickly and closed) 

IIRC, clones are often not closed at all.
And for term expanding queries, you can get a *lot* of them all at once.

bq. And yes we cannot just open a new fd on demand if the file has been 
deleted. But I'm thinking that may not matter in practice. Ie if the pool wants 
to open a new fd, it can attempt to do so, and if the file was deleted it must 
then return a shared access wrapper to the fd it already has open.

At first blush, sounds a bit too complex for the benefits.
- one would have to reserve the last fd for synchronized access... can't really 
hand it out for unsynchronized exclusive access and then go and share it later.
- the shared access should use pread... not seek+read

bq. But on Linux I saw 44% speedup for serial=true case with 4 threads using 
SeparateFile vs ChannelPread, which I was very surprised by.

In the serial case, there are half the system calls (no seek).  When both 
implementations have a single single system call, all the extra code and 
complexity that Sun threw into FileChannel comes into play.  Compare that with 
RandomAccessFile.read() which drops down to a native call and presumably just 
the read with little overhead.  I wish Sun would just add a 
RandomAccessFile.read with a file position.

If access will be truly serial sometimes, larger buffers would help with that 
larger read() setup cost. 


> Use NIO positional read to avoid synchronization in FSIndexInput
> ----------------------------------------------------------------
>
>                 Key: LUCENE-753
>                 URL: https://issues.apache.org/jira/browse/LUCENE-753
>             Project: Lucene - Java
>          Issue Type: New Feature
>          Components: Store
>            Reporter: Yonik Seeley
>         Attachments: FileReadTest.java, FileReadTest.java, FileReadTest.java, 
> FileReadTest.java, FileReadTest.java, FileReadTest.java, FileReadTest.java, 
> FSIndexInput.patch, FSIndexInput.patch, lucene-753.patch, lucene-753.patch
>
>
> As suggested by Doug, we could use NIO pread to avoid synchronization on the 
> underlying file.
> This could mitigate any MT performance drop caused by reducing the number of 
> files in the index format.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to