I tried using a FileChannel for the FileAppender a week or so ago to see if 
passing the ByteBuffer to the FileChannel would improve performance since it 
doesn’t have to be synchronized. I didn’t see any improvement though and I 
ended up reverting it. But I might have done something wrong.

Ralph

> On Feb 25, 2017, at 4:19 PM, Matt Sicker <boa...@gmail.com> wrote:
> 
> We already use a bit of NIO (ByteBuffer for layouts and appenders/managers, 
> MappedByteBuffer for mmap'd files, FileLock for locking files, etc.), and 
> I've been playing around with the NIO API lately. I have some sample code 
> here <https://github.com/jvz/nio-logger <https://github.com/jvz/nio-logger>> 
> to show some trivial use case of AsynchronousFileChannel. In Java 7, there is 
> also AsynchronousSocketChannel which could theoretically be used instead of 
> adding Netty for a faster socket appender. In that regard, I'm curious as to 
> how useful it would be to have similar appenders as the OutputStream ones, 
> but instead using WritableByteChannel, GatheringByteChannel (possible 
> parallelization of file writing?), and the async channels (there's an 
> AsynchronousByteChannel class, but I think they screwed this one up as only 
> one of the three async channel classes implements it).
> 
> Another related issue I've seen is that in a message-oriented appender (e.g., 
> the Kafka one), being able to stream directly to a ByteBuffer is not the 
> right way to go about encoding log messages into the appender. Instead, I was 
> thinking that a pool of reusable ByteBuffers could be used here where a 
> ByteBuffer is borrowed on write and returned on completion (via a 
> CompletionHandler callback). The Kafka client uses a similar strategy for 
> producing messages by dynamically allocating a pool of ByteBuffers based on 
> available memory.
> 
> Also, I don't have much experience with this, but if we had a pool of 
> reusable ByteBuffers, could we use direct allocation to get off-heap buffers? 
> That seems like an interesting use case.
> 
> -- 
> Matt Sicker <boa...@gmail.com <mailto:boa...@gmail.com>>

Reply via email to