Can the support for Intel TSX in Java 8u20 be relevant here?

https://bugs.openjdk.java.net/browse/JDK-8031320

On Sun, May 22, 2016 at 3:42 PM, Remko Popma <remko.po...@gmail.com> wrote:

>
>
> On Sunday, May 22, 2016 at 6:34:13 PM UTC+9, Benedict Elliott Smith wrote:
>>
>> Hi Remko,
>>
>> I realise that I was looking at the old log4j code without realising it,
>> in which there is always a futex involved.
>>
> Which class is this? Async Loggers in Log4j 2 have always been lock-free.
> What may be confusing is that Log4j 2 also has an Async*Appender*, which
> does not use the Disruptor but uses a JDK BlockingArrayQueue. This appender
> is very similar to how Logback and Log4j 1 do asynchronous logging. Async
> *Appender* (in Log4j 2, Log4j 1 and Logback, they all use a blocking
> queue) is sensitive to lock contention and does not scale with more threads.
>
>
>>
>> However the behaviour of the disruptor that backs the new code will
>> depend on the wait strategy employed (and I'll note your default is a
>> blocking strategy, for which my prior statement holds*).
>>
> Perhaps the key misunderstanding is here. I think I did not explain it
> well in my previous message. Let me try again.
>
> Async Loggers use the Disruptor and are lock-free. This means that
> multiple application threads can log concurrently and are not blocked by
> each other. This is true for very low workloads, medium workloads and high
> workloads.
>
> Only if an application logs messages at a very high rate for a long period
> of time, or uses a slow appender, the Disruptor ringbuffer can fill up and
> application threads will have to wait until a slot in the ringbuffer
> becomes available. For the 2.6 release I have added text to the
> Trade-offs section
> <http://home.apache.org/~rpopma/log4j/2.6/manual/async.html#Trade-offs>
> to explain this last point, based on your feedback.
>
> Note that the Disruptor wait strategy is irrelevant to all this.
> Application threads are *not *impacted by the wait strategy.
>
>
>> Here we obviously get into the territory of people needing to understand
>> the disruptor as well as your logging framework, but since you have a whole
>> section labelled "Trade-offs" in which you draw attention to the improved
>> throughput and latency profile under "Benefits," under "Drawbacks" it might
>> be nice to mention these possible confounders.  Or at least raise a bat
>> signal to go and understand the tradeoffs for the disruptor (which is also
>> regrettably poorly understood).
>>
>> It might also be helpful to explicitly call out the configuration used
>> for your benchmarks,
>>
> Tests on the 2.6 performance page
> <http://home.apache.org/~rpopma/log4j/2.6/performance.html> are mostly
> done with JMH benchmarks where parameters are in the javadoc.
> Tests on the Async Loggers page are partly with the new ResponseTimeTest
> <https://github.com/apache/logging-log4j2/blob/6ddc0250cb6ebbf5f05d3026a976bc8ca0a8f162/log4j-core/src/test/java/org/apache/logging/log4j/core/async/perftest/ResponseTimeTest.java>class
> (params in the doc
> <http://home.apache.org/~rpopma/log4j/2.6/manual/async.html#Latency>) and
> partly still shows results from the older PerfTestDriver
> <https://github.com/apache/logging-log4j2/blob/6ddc0250cb6ebbf5f05d3026a976bc8ca0a8f162/log4j-core/src/test/java/org/apache/logging/log4j/core/async/perftest/PerfTestDriver.java>
> class. This last one has parameters in the code. You'll need to spend some
> time to get familiar with it if you want to run it.
>
> and perhaps to run a comparison against some real software - github does
>> not lack for applications using log4j!  Unfortunately I bet this would
>> result in a much less sexy graph.
>>
> Log4j 2 has had lock-free Async Loggers from its 2.0-beta5 release
> <http://logging.apache.org/log4j/2.x/changes-report.html#a2.0-beta5>,
> three years ago. If there are any serious performance drawbacks like you
> seem to think there are I hope I would have heard of them. Fortunately the
> opposite is true. People report very positive experiences
> <http://tech.finn.no/2014/07/01/log4j2-in-production-making-it-fly/>.
> People who did their own measurements reported it makes their logging as
> fast as if it was switched off
> <http://blogs.mulesoft.com/dev/mule-dev/mule-3-6-asynchronous-logging/>.
>
>
>> Finally, I really think people should (in your wiki page) explicitly be
>> *discouraged* from using this part of your framework *unless they know
>> they need it*.  It's a fantastic piece of work for people who *do* need
>> it.
>>
> Again, I think you are laboring under a misapprehension. I cannot imagine
> a scenario where lock-free logging would be a bad thing. If you think there
> is, please show evidence.
>
>
>> But 99.99% of people would be better off with a logger that just avoids
>> blocking threads when one is already in the process of logging.
>>
> Avoiding blocking is exactly what the Async Loggers are for. (So I really
> think there is some misunderstanding somewhere.)
> Based on your feedback, I've updated
> <http://home.apache.org/~rpopma/log4j/2.6/manual/async.html> the side nav
> menu and page title for the 2.6 release to clarify that Async Loggers are
> lock-free. I hope this will help avoid misunderstandings.
>
>
>>
>> (*It looks like you silently ignore misconfiguration, and default to
>> timeout wait strategy also, which is probably going to surprise some people)
>>
>>
>>
>>
>>
>> On 19 May 2016 at 00:34, Remko Popma <remko...@gmail.com> wrote:
>>
>>> Benedict, thanks for your feedback!
>>>
>>> With regards to filtering, global filters are already considered before
>>> the event is enqueued. Filters configured on the Logger and AppenderRef are
>>> applied prior to enqueueing with mixed Sync/Async
>>> <http://logging.apache.org/log4j/2.x/manual/async.html#MixedSync-Async>
>>> Loggers but when all loggers are async
>>> <http://logging.apache.org/log4j/2.x/manual/async.html#AllAsync> these
>>> filters are applied by the background thread. We can probably improve this,
>>> thanks for the suggestion!
>>>
>>> Your suggestion to run performance tests under lower loads is reasonable
>>> and we will look at this for a future release.
>>> I did experiment with this a little a while back and did see larger
>>> response time pauses. Perhaps others with more experience can chime in.
>>>
>>> My understanding of how the Disruptor works is that enqueueing the event
>>> is lock-free, so applications threads doing the logging should not
>>> experience any context switches or suffer latency from Futex calls caused
>>> by logging (regardless of the workload). The background thread is another
>>> story. Under moderate to low workloads the background thread may (depending
>>> on the wait policy) fall asleep and experience delays before waking up when
>>> work arrives. However, if there are enough cores to serve all threads I
>>> don't see how such background thread delays can impact (cause response time
>>> pauses for) the application that is doing the logging. Please correct me if
>>> my understanding is incorrect.
>>>
>>> My thinking is that using async loggers is good for reactive
>>> applications that need to respond quickly to external events. It is
>>> especially useful if the application needs to deal with occasional bursts
>>> of work (and accompanied bursts of logging). This is where async loggers
>>> can deliver value even if the normal workload is low.
>>>
>>> Remko
>>>
>>> On Wednesday, May 18, 2016 at 2:56:18 AM UTC+9, Benedict Elliott Smith
>>> wrote:
>>>>
>>>> Regrettably it seems impossible (or at least very annoying) to send to
>>>> both lists simultaneously...
>>>>
>>>> On 17 May 2016 at 18:55, Benedict Elliott Smith <bene...@apache.org>
>>>> wrote:
>>>>
>>>>> Could I suggest that you run tests for latency and throughput effects
>>>>> of using this in systems with only moderate-to-low numbers of logging
>>>>> calls?  (i.e. the vast majority of systems!)
>>>>>
>>>>
>>>>> It's very likely that in such systems messages will not reach a
>>>>> velocity to keep the Dispatcher running, and so logging calls may often 
>>>>> (or
>>>>> always) involve a Futex call - which is not a trivial cost.  There will
>>>>> almost certainly be systems out there with anti-ideal characteristics -
>>>>> logging just often enough that these costs materially impact throughput,
>>>>> but not often enough that they suddenly disappear.
>>>>>
>>>>> Even though a majority of systems *do not need this*, because it
>>>>> "async" and the new hotness, and there are no advertised downsides,
>>>>> everyone will try to use it.  It's up to those who know better to make 
>>>>> sure
>>>>> these people are informed it isn't a free lunch.  Making sure all of the
>>>>> caveats are reported on the advertising page would be a great start IMO.
>>>>>
>>>>> Might I also separately suggest you consider filtering events prior to
>>>>> placing them on the queue for processing by the dispatcher?  I've only
>>>>> briefly glanced at the code, but it seems not to be the case currently.
>>>>>
>>>>>>
>>>>>> On 17 May 2016 at 18:33, Martin Thompson <mjp...@gmail.com> wrote:
>>>>>>
>>>>>>> Hi Remko,
>>>>>>>
>>>>>>> I'd just like to say that it is a great service to the community as
>>>>>>> a whole that someone is seriously looking at improving logging.
>>>>>>>
>>>>>>> If you keep it up you'll be putting folks like me out of a job :)
>>>>>>>
>>>>>>> Martin...
>>>>>>>
>>>>>>>
>>>>>>> On 17 May 2016 at 18:13, Remko Popma <remko...@gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi all,
>>>>>>>>
>>>>>>>> First, my thanks to the many people who gave helpful advice and
>>>>>>>> feedback on how to measure Log4j response time on this list some time 
>>>>>>>> ago.
>>>>>>>>
>>>>>>>> We're about to start the Log4j 2.6 release.
>>>>>>>> If anyone is interested, a preview of the garbage-free logging
>>>>>>>> manual page is here:
>>>>>>>> http://home.apache.org/~rpopma/log4j/2.6/manual/garbagefree.html
>>>>>>>> and a preview of the updated performance page is here:
>>>>>>>> http://home.apache.org/~rpopma/log4j/2.6/performance.html
>>>>>>>>
>>>>>>>> Feedback welcome!
>>>>>>>>
>>>>>>>> Remko
>>>>>>>>
>>>>>>>> --
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> Groups "mechanical-sympathy" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>> send an email to mechanical-sympathy+unsubscr...@googlegroups.com.
>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "mechanical-sympathy" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to mechanical-sympathy+unsubscr...@googlegroups.com.
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org
> For additional commands, e-mail: log4j-dev-h...@logging.apache.org
>



-- 
[image: MagineTV]

*Mikael Ståldal*
Senior software developer

*Magine TV*
mikael.stal...@magine.com
Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com

Privileged and/or Confidential Information may be contained in this
message. If you are not the addressee indicated in this message
(or responsible for delivery of the message to such a person), you may not
copy or deliver this message to anyone. In such case,
you should destroy this message and kindly notify the sender by reply
email.

Reply via email to