Is it possible that the memory mapped file starts resizing and remapping at 
this point?

Sent from my iPhone

> On Feb 8, 2017, at 15:12, Apache <ralph.go...@dslextreme.com> wrote:
> 
> I used a ThreadLocal byte buffer and wrote to the file channel and if 
> anything, it performed slightly worse. This is probably because I had to 
> write after ever event, not when the buffer was full, otherwise the ordering 
> of events in the output would get messed up.
> 
> I decided to throw the MemoryMappedFileAppender into the mix and I got some 
> very strange behavior. Using Logback 1.1.10 the overall results with 4 
> threads were:
> 
> Benchmark                                         Mode  Samples     Score     
> Error   Units
> o.a.l.l.p.j.FileAppenderBenchmark.julFile        thrpt       10    98.886 ±  
> 10.855  ops/ms
> o.a.l.l.p.j.FileAppenderBenchmark.log4j1File     thrpt       10   826.640 ±  
> 14.219  ops/ms
> o.a.l.l.p.j.FileAppenderBenchmark.log4j2File     thrpt       10  1861.518 ± 
> 139.885  ops/ms
> o.a.l.l.p.j.FileAppenderBenchmark.log4j2MMF      thrpt       10  1478.489 ± 
> 970.526  ops/ms
> o.a.l.l.p.j.FileAppenderBenchmark.log4j2RAF      thrpt       10  2023.783 ±  
> 41.284  ops/ms
> o.a.l.l.p.j.FileAppenderBenchmark.logbackFile    thrpt       10   997.495 ±  
> 42.801  ops/ms
> 
> What is strange is the actual output from the run for the 
> MemoryMappedFileAppender. You will notice that it starts off like a bat out 
> of hell but then bogs down terribly. I’d love to know why.
> 
> # VM invoker: 
> /Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/jre/bin/java
> # VM options: <none>
> # Warmup: 10 iterations, 1 s each
> # Measurement: 10 iterations, 1 s each
> # Timeout: 10 min per iteration
> # Threads: 4 threads, will synchronize iterations
> # Benchmark mode: Throughput, ops/time
> # Benchmark: org.apache.logging.log4j.perf.jmh.FileAppenderBenchmark.log4j2MMF
> 
> # Run progress: 50.00% complete, ETA 00:01:14
> # Fork: 1 of 1
> # Warmup Iteration   1: 2546.240 ops/ms
> # Warmup Iteration   2: 3071.504 ops/ms
> # Warmup Iteration   3: 2980.503 ops/ms
> # Warmup Iteration   4: 2709.490 ops/ms
> # Warmup Iteration   5: 2661.919 ops/ms
> # Warmup Iteration   6: 2610.875 ops/ms
> # Warmup Iteration   7: 2663.431 ops/ms
> # Warmup Iteration   8: 2675.847 ops/ms
> # Warmup Iteration   9: 2755.735 ops/ms
> # Warmup Iteration  10: 2666.353 ops/ms
> Iteration   1: 2577.419 ops/ms
> Iteration   2: 2804.161 ops/ms
> Iteration   3: 1179.059 ops/ms
> Iteration   4: 1167.719 ops/ms
> Iteration   5: 1170.686 ops/ms
> Iteration   6: 1246.053 ops/ms
> Iteration   7: 1173.593 ops/ms
> Iteration   8: 1196.317 ops/ms
> Iteration   9: 1127.199 ops/ms
> Iteration  10: 1142.684 ops/ms
> 
> Ralph
> 
> 
>> On Feb 7, 2017, at 10:55 AM, Apache <ralph.go...@dslextreme.com> wrote:
>> 
>> True, but I would still like to also see what difference it makes using the 
>> FileChannel instead of the OutputStream.
>> 
>> Ralph
>> 
>>> On Feb 7, 2017, at 9:45 AM, Remko Popma <remko.po...@gmail.com> wrote:
>>> 
>>> That is all doable but it may be a good idea to test if that is really 
>>> where the bottleneck is. 
>>> We could try whether we get better numbers if we remove the current 
>>> synchronization (ignoring any scrambled output, just for testing purposes).
>>> 
>>> 
>>>> On Wed, Feb 8, 2017 at 1:40 AM, Apache <ralph.go...@dslextreme.com> wrote:
>>>> In looking at FileManager and OutputStreamManager it does have a 
>>>> ByteBuffer but it requires synchronization. I am thinking it might make 
>>>> more sense to have a ThreadLocal ByteBuffer and then pass that to 
>>>> FileChannel.write() so that no synchronization is required.
>>>> 
>>>> Ralph
>>>> 
>>>>> On Feb 7, 2017, at 9:36 AM, Matt Sicker <boa...@gmail.com> wrote:
>>>>> 
>>>>> Can't we use the ByteBuffers introduced in the GC-free epic? I was under 
>>>>> the impression that byte arrays being passed to appenders was created 
>>>>> from a ByteBuffer at this point, though I haven't really taken a close 
>>>>> look at this.
>>>>> 
>>>>> On 7 February 2017 at 10:05, Apache <ralph.go...@dslextreme.com> wrote:
>>>>>> A FileChannel is guaranteed to be thread safe. You can obtain a 
>>>>>> FileChannel from a FlieOutputStream, so that would seem to imply that 
>>>>>> FileOutputStream might be thread-safe, but you can’t really know that 
>>>>>> without looking at the source. The problem is that FileChannel.write() 
>>>>>> takes a ByteBuffer whereas FileOutputStream.write() accepts a byte 
>>>>>> array. To be thread safe it would have to safely copy the byte array 
>>>>>> into the byte buffer to pass to the FileChannel. But FileOutputStream 
>>>>>> doesn’t use the FileChannel at all in Java 7. It calls a native method 
>>>>>> that doesn’t specify whether it is thread-safe or not, so simply 
>>>>>> removing the synchronization isn’t guaranteed to work properly. 
>>>>>> 
>>>>>> OTOH, RandomAccessFile doesn’t say that it is thread-safe either and we 
>>>>>> are not synchronizing writes to it.
>>>>>> 
>>>>>> Ralph
>>>>>> 
>>>>>>> On Feb 7, 2017, at 8:37 AM, Matt Sicker <boa...@gmail.com> wrote:
>>>>>>> 
>>>>>>> I looked at 1.2-SNAPSHOT and 1.1.10 and saw nothing special other than 
>>>>>>> a lack of a synchronized keyword on the equivalent append method. 
>>>>>>> Perhaps he figured out a simpler way to emulate locking?
>>>>>>> 
>>>>>>> I've been working with async/non-blocking streaming APIs for long 
>>>>>>> enough now that I can't even remember the last time I had to write an 
>>>>>>> actual lock.
>>>>>>> 
>>>>>>>> On 6 February 2017 at 22:02, Apache <ralph.go...@dslextreme.com> wrote:
>>>>>>>> Logback 1.2-SNAPSHOT
>>>>>>>> 
>>>>>>>> Ralph
>>>>>>>> 
>>>>>>>>> On Feb 6, 2017, at 8:29 PM, Remko Popma <remko.po...@gmail.com> wrote:
>>>>>>>>> 
>>>>>>>>> Sorry what 1.2 do you mean? 
>>>>>>>>> 
>>>>>>>>> Sent from my iPhone
>>>>>>>>> 
>>>>>>>>>> On Feb 7, 2017, at 11:06, Apache <ralph.go...@dslextreme.com> wrote:
>>>>>>>>>> 
>>>>>>>>>> In 1.2?  That may work for a FileOutputStream but it isn’t 
>>>>>>>>>> guaranteed to work for others.
>>>>>>>>>> 
>>>>>>>>>> Ralph
>>>>>>>>>> 
>>>>>>>>>>> On Feb 6, 2017, at 5:23 PM, Matt Sicker <boa...@gmail.com> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> I'm not sure if I'm looking in the right place, but a major 
>>>>>>>>>>> difference now between Logback's appenders and Log4j's is that 
>>>>>>>>>>> Logback isn't synchronized on the append method.
>>>>>>>>>>> 
>>>>>>>>>>> On 6 February 2017 at 18:18, Matt Sicker <boa...@gmail.com> wrote:
>>>>>>>>>>>> Is this something we can improve performance on by implementing a 
>>>>>>>>>>>> file appender based on FileChannel or AsynchronousFileChannel 
>>>>>>>>>>>> instead of OutputStream?
>>>>>>>>>>>> 
>>>>>>>>>>>>> On 6 February 2017 at 17:50, Apache <ralph.go...@dslextreme.com> 
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> Ceki has updated his numbers to include those reported on the 
>>>>>>>>>>>>> mailing list. 
>>>>>>>>>>>>> https://docs.google.com/spreadsheets/d/1cpb5D7qnyye4W0RTlHUnXedYK98catNZytYIu5D91m0/edit#gid=0
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I haven’t run the tests with Logback 1.2-SNAPSHOT but my numbers 
>>>>>>>>>>>>> for my two MacBooks are at 
>>>>>>>>>>>>> https://docs.google.com/spreadsheets/d/1L67IhmUVvyLBWtC6iq0TMj-j0vrbKsUKWuZV0Nlqisk/edit?usp=sharing.
>>>>>>>>>>>>>  
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Ralph
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On Feb 6, 2017, at 9:33 AM, Apache <ralph.go...@dslextreme.com> 
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Yes, that is still the standard approach most people use and is 
>>>>>>>>>>>>>> the only way to provide a head-to-head comparison against the 
>>>>>>>>>>>>>> logging frameworks.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Ralph
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On Feb 6, 2017, at 8:02 AM, Matt Sicker <boa...@gmail.com> 
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> This is all in a synchronous appender, right? Either way, 
>>>>>>>>>>>>>>> that's rather interesting.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On 6 February 2017 at 07:54, Apache 
>>>>>>>>>>>>>>> <ralph.go...@dslextreme.com> wrote:
>>>>>>>>>>>>>>>> Someone posted numbers on the Logback user’s list that match 
>>>>>>>>>>>>>>>> mine.  It shows Logback 1.1.9 was pretty terrible, 1.1.10 is 
>>>>>>>>>>>>>>>> somewhat better and 1.2-SNAPSHOT is on par or slightly better 
>>>>>>>>>>>>>>>> than Log4j 2.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Ralph
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On Feb 5, 2017, at 3:25 PM, Matt Sicker <boa...@gmail.com> 
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> I think we need some comparisons on the log4j side: file 
>>>>>>>>>>>>>>>>> appender with 256k buffer size, random access file appender 
>>>>>>>>>>>>>>>>> with 256k buffer size (which appears to be the default), and 
>>>>>>>>>>>>>>>>> memory mapped file appender. It'd be cool to see how these 
>>>>>>>>>>>>>>>>> compose with async logging enabled in both log4j and logback.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On 5 February 2017 at 16:06, Apache 
>>>>>>>>>>>>>>>>> <ralph.go...@dslextreme.com> wrote:
>>>>>>>>>>>>>>>>>> You should run the code at 
>>>>>>>>>>>>>>>>>> https://github.com/ceki/logback-perf to compare your results 
>>>>>>>>>>>>>>>>>> to Ceki’s.  You also should capture the cpubenchmark speed 
>>>>>>>>>>>>>>>>>> of your processor and get the speed of your hard drive. I 
>>>>>>>>>>>>>>>>>> used Blackmagic speed test on my Mac. I am capturing my 
>>>>>>>>>>>>>>>>>> results in a Google spreadsheet. I will post the like once I 
>>>>>>>>>>>>>>>>>> have it.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Ralph
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> On Feb 5, 2017, at 1:48 PM, Gary Gregory 
>>>>>>>>>>>>>>>>>>> <garydgreg...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> If you want, I can run tests on Windows once the build 
>>>>>>>>>>>>>>>>>>> works on Windows again.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Let me know what args/command line...
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Gary
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> On Feb 5, 2017 11:58 AM, "Apache" 
>>>>>>>>>>>>>>>>>>>> <ralph.go...@dslextreme.com> wrote:
>>>>>>>>>>>>>>>>>>>> I guess my MacBook Pro must fit in the Slow CPU/Fast Hard 
>>>>>>>>>>>>>>>>>>>> drive category. With Logback 1.10 and -t 4  now get
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Benchmark                                         Mode  
>>>>>>>>>>>>>>>>>>>> Samples        Score       Error  Units
>>>>>>>>>>>>>>>>>>>> o.a.l.l.p.j.FileAppenderBenchmark.julFile        thrpt     
>>>>>>>>>>>>>>>>>>>>   20    98187.673 ±  4935.712  ops/s
>>>>>>>>>>>>>>>>>>>> o.a.l.l.p.j.FileAppenderBenchmark.log4j1File     thrpt     
>>>>>>>>>>>>>>>>>>>>   20   842374.496 ±  6762.712  ops/s
>>>>>>>>>>>>>>>>>>>> o.a.l.l.p.j.FileAppenderBenchmark.log4j2File     thrpt     
>>>>>>>>>>>>>>>>>>>>   20  1853062.583 ± 67032.225  ops/s
>>>>>>>>>>>>>>>>>>>> o.a.l.l.p.j.FileAppenderBenchmark.log4j2RAF      thrpt     
>>>>>>>>>>>>>>>>>>>>   20  2036011.226 ± 53208.281  ops/s
>>>>>>>>>>>>>>>>>>>> o.a.l.l.p.j.FileAppenderBenchmark.logbackFile    thrpt     
>>>>>>>>>>>>>>>>>>>>   20   999667.438 ± 12074.003  ops/s
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> I’ll have to try this on one my VMs at work. We don’t run 
>>>>>>>>>>>>>>>>>>>> anything directly on bare metal any more.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Ralph
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> On Feb 5, 2017, at 9:40 AM, Apache 
>>>>>>>>>>>>>>>>>>>>> <ralph.go...@dslextreme.com> wrote:
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Ceki finally fixed some of the performance problems in 
>>>>>>>>>>>>>>>>>>>>> the FileAppender. See https://logback.qos.ch/news.html 
>>>>>>>>>>>>>>>>>>>>> and 
>>>>>>>>>>>>>>>>>>>>> https://docs.google.com/spreadsheets/d/1cpb5D7qnyye4W0RTlHUnXedYK98catNZytYIu5D91m0/edit#gid=0.
>>>>>>>>>>>>>>>>>>>>>  I suspect we have a few optimizations we can make.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Ralph
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> -- 
>>>>>>>>>>>>>>>>> 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