Thank you for your help and time .
> On Feb 26, 2017, at 2:05 PM, Matt Sicker <boa...@gmail.com> wrote:
> 
> So far I've discovered that my implementation of Layout that uses 
> CharsetEncoder.encode(CharBuffer, ByteBuffer, boolean) is slower than the 
> version that just uses CharsetEncoder.encode(CharBuffer). That could be 
> causing issues here.
> 
> I did try out FileChannel, and based on my current implementations, it's 
> around the same speed as using Files.newOutputStream(). My 
> AsynchronousFileChannel usage must be incorrect as it's working much slower 
> than the synchronous form.
> 
> On 26 February 2017 at 13:03, Afonso Murakami <murakam...@icloud.com 
> <mailto:murakam...@icloud.com>> wrote:
> I don’t know if that make any difference but I click on the link 
> https://githhub.com/vz/nio-looger <https://githhub.com/vz/nio-looger> to see 
> what is about and when I finished I sign of on my account may that screw up 
> something or may be not, I’m not sure if Idid that or not, sorry.
> 
>> On Feb 26, 2017, at 10:49 AM, Matt Sicker <boa...@gmail.com 
>> <mailto:boa...@gmail.com>> wrote:
>> 
>> I could be doing something wrong entirely here, but so far, the fastest way 
>> I've found to write to a file (not including mmap yet) is via:
>> 
>> new BufferedOutputStream(Files.newOutputStream(Paths.get("test.log")))
>> 
>> And this is with added synchronization on the append() method, too. Also, 
>> one of my updates to the async channel version is causing OOM errors in JMH 
>> now, so I broke something.
>> 
>> On 26 February 2017 at 12:22, Matt Sicker <boa...@gmail.com 
>> <mailto:boa...@gmail.com>> wrote:
>> I added some basic JMH tests to my repo along with a couple alternative 
>> appender implementations. I got rid of the unnecessary file region locking 
>> in the async file channel one, but it's still coming out quite a bit slower 
>> than the RandomAccessFile and Files.newOutputStream() based appenders, 
>> though that could be due to the use of Phaser (which I only added to cleanly 
>> close the appender synchronously).
>> 
>> On 26 February 2017 at 10:05, Matt Sicker <boa...@gmail.com 
>> <mailto:boa...@gmail.com>> wrote:
>> Perhaps something got optimized by the JVM? I'll add some JMH tests to this 
>> repo to try out various approaches.
>> 
>> On Sat, Feb 25, 2017 at 21:12, Apache <ralph.go...@dslextreme.com 
>> <mailto:ralph.go...@dslextreme.com>> wrote:
>> 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 
>>> <mailto: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>>
>> 
>> --
>> Matt Sicker <boa...@gmail.com <mailto:boa...@gmail.com>>
>> 
>> 
>> 
>> --
>> Matt Sicker <boa...@gmail.com <mailto:boa...@gmail.com>>
>> 
>> 
>> 
>> --
>> Matt Sicker <boa...@gmail.com <mailto:boa...@gmail.com>>
> 
> 
> 
> 
> --
> Matt Sicker <boa...@gmail.com <mailto:boa...@gmail.com>>

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to