Afonso, are you a robot?

On Mon, Feb 27, 2017 at 8:44 AM, Afonso Murakami <murakam...@icloud.com>
wrote:

> That is great thank you very much for your help
>
> On Feb 26, 2017, at 3:36 PM, Matt Sicker <boa...@gmail.com> wrote:
>
> Afonso, are you on the right mailing list?
>
> Anyways, I've made more updates to my playground. Without implementing
> manual buffering on top of RandomAccessFile or FileChannel (or the async
> file channel, but that one has a bug in it right now causing OOM errors
> occasionally which is probably due to a misunderstanding on how many
> ByteBuffers I can queue up asynchronously before I'm supposed to stop and
> wait), the Java 101 style of using new BufferedOutputStream(new
> FileOutputStream(file)) is currently the fastest appender I have. I'm also
> trying to implement a MappedByteBuffer version, but now I'm rediscovering
> the reason why we have a ByteBufferDestination interface (plus all I'm
> getting as a result are 2 GB files filled with nulls, so I'm doing
> something wrong here anyways).
>
> I was also able to fix some strange performance issues in the tests that
> were being caused by my Layout implementation, so I've swapped in a trivial
> one that assumes input is in ASCII and casts chars to bytes to encode them.
> In Java 9, we may be able to do something with the compacted strings thing
> they added for ISO-8859-1 strings.
>
> There are also some additional benchmarks added that I found interesting
> while comparing some approaches. For one, copying from a directly-allocated
> ByteBuffer into a byte[] (via ByteBuffer::get(byte[])) is almost twice as
> fast as copying from a heap-allocated ByteBuffer into a byte[]. Another
> interesting thing I found was that doing new Date().toString() is faster
> than Instant.now().toString().
>
> On 26 February 2017 at 16:10, Afonso Murakami <murakam...@icloud.com>
> wrote:
>
>> 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>
>> wrote:
>>
>>> I don’t know if that make any difference but I click on the link
>>> 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> 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> 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> 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>
>>>>> 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> 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> 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>
>>>>>>
>>>>>>
>>>>>> --
>>>>> Matt Sicker <boa...@gmail.com>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Matt Sicker <boa...@gmail.com>
>>>>
>>>
>>>
>>>
>>> --
>>> Matt Sicker <boa...@gmail.com>
>>>
>>>
>>>
>>
>>
>> --
>> Matt Sicker <boa...@gmail.com>
>>
>>
>>
>
>
> --
> Matt Sicker <boa...@gmail.com>
>
>
>

Reply via email to