Ceki Gulcu wrote:
>
>
> Joern Huxhorn wrote:
>
>> Nope, a discussion like that is really necessary because this whole
>> issue is pretty crucial and will essentially decide how well Logback
>> will perform in environments with >1 CPU-cores.
>> This will become more and more important with more cores added in every
>> new CPU generation. The more cores are present, the more relevant the
>> issue of unfairness will become, since waiting threads will  mean idling
>> CPUs.
>
> While open to further investigation and new data, evidence collected
> indicates that threads in Sun's JDK on multi-core CPU
> on Linux as well as other platforms can make other threads
> starve but that is *not* a logback issue. Moreover, it would be unfair to
> penalize *all* logback users using fair locking which is much slower
> than synchronization or unfair locks.
>
I copied your results over from your test for the sake of discussion:
java.runtime.version = 1.6.0_11-b03
java.vendor          = Sun Microsystems Inc.
java.version         = 1.6.0_11
os.name              = Linux
os.version           = 2.6.25-gentoo-r6
Sync:   139698775, or 35 nanos per cycle
Unfair: 87028802, or 57 nanos per cycle
Fair:   4106449, or 1217 nanos per cycle

java.runtime.version = jvmxa6460-20081105_25433
java.vendor          = IBM Corporation
java.version         = 1.6.0
os.name              = Linux
os.version           = 2.6.25-gentoo-r6
Sync:   356946629, or 14 nanos per cycle
Unfair: 91892449, or 54 nanos per cycle
Fair:   7380308, or 677 nanos per cycle

So yes, the locking itself is significantly slower.

The following numbers are the max amount of wasted time of my example app:
2959018000 synchronized
2078606000 unfair lock
27691000 fair lock
The maximum wasted time of all threads is ~100 times smaller in case of
the fair lock!! This means that the overall system is running *waaay*
smoother... regardless of the additional nanos spent for the fair lock.
The main problem is that *every* CPU has to access the appender,
degrading multi-core-systems to semi-single-core.
Minimizing the amount of time a thread (and therefore one of the other
cores) has to wait is crucial.
> As a side note, and if my memory serves me well, you gather caller
> data for every log call which can have significant impact on
> performance. Are you collecting caller data?
Yes, I do, but performance was absolutely sufficient on a single-core
system - which is quite ironic. Let's just forget about my appender for
the moment. The behavior is similar but less dramatic in case of
FileAppender.

Regards,
Joern.
_______________________________________________
logback-dev mailing list
logback-dev@qos.ch
http://qos.ch/mailman/listinfo/logback-dev

Reply via email to