I've pushed the benchmark here:
https://github.com/apache/logging-log4j2/pull/209

Is the extended stack trace benchmark committed somewhere? I don't see
it in log4j-perf.
My benchmark isn't very pretty either, I'm open to ideas for cleaning
up the implementation.

-ck

On Thu, Aug 9, 2018 at 1:56 PM, Ralph Goers <ralph.go...@dslextreme.com> wrote:
> I created a micro benchmark for the extended stack trace. It isn’t pretty.
>
> Ralph
>
>> On Aug 9, 2018, at 10:53 AM, Carter Kozak <cko...@apache.org> wrote:
>>
>> That's true, as long as we collect the stack trace when the
>> ThrowableProxy is created, the rest can be deferred. I can take a look
>> at this.
>>
>> I'm working on a benchmark with a larger stack to simulate conditions
>> in a real application as well.
>>
>> -ck
>>
>> On Thu, Aug 9, 2018 at 12:47 PM, Ralph Goers <ralph.go...@dslextreme.com> 
>> wrote:
>>> What I don’t understand is that ThrowableProxy seems to be doing a whole 
>>> bunch of stuff in the constructor. I would think a lot of that could be 
>>> deferred until the Throwable is being rendered.
>>>
>>> Ralph
>>>
>>>> On Aug 9, 2018, at 8:10 AM, Carter Kozak <c4kof...@gmail.com> wrote:
>>>>
>>>> The piece I'd like to avoid is ThrowableProxy.loadClass invocations,
>>>> which can be expensive depending on the ClassLoader implementation.
>>>> The ThrowablePatternConverter implementations all fall back to the
>>>> default implementation which operates directly on a Throwable rather
>>>> than the proxy object.
>>>>
>>>> I would prefer to make ThrowableProxy work better rather than
>>>> disabling it entirely, which would open the flood gates for issues
>>>> with the Jackson and Serializable layouts, though the counterargument
>>>> is that without loading classes, there is no additional information
>>>> provided by ThrowableProxy over a Throwable.
>>>>
>>>> I will take a look at flagging ThrowableProxy class loading instead of
>>>> disabling ThrowableProxy entirely when I have a moment.
>>>>
>>>> Thanks,
>>>> -ck
>>>>
>>>> On Thu, Aug 9, 2018 at 1:36 AM, Ralph Goers <ralph.go...@dslextreme.com> 
>>>> wrote:
>>>>> What is the purpose of disabling ThrowableProxy? All the throwable 
>>>>> pattern converters rely on it.
>>>>>
>>>>> Ralph
>>>>>
>>>>>> On Aug 8, 2018, at 8:34 AM, Carter Kozak <cko...@apache.org> wrote:
>>>>>>
>>>>>> I'm curious what you would think of a system property to disable
>>>>>> ThrowableProxy creation?
>>>>>> My initial preference was to avoid this type of flag and make the
>>>>>> common case cleaner, however
>>>>>> without providing a mechanism to disable the functionality that
>>>>>> differentiates it from Throwable
>>>>>> I'm not sure that's feasible.
>>>>>>
>>>>>> An alternative approach may be to allow custom implementations of the
>>>>>> logic surrounding
>>>>>> ThrowableProxy.toCacheEntry which could potentially disable classloader 
>>>>>> lookups,
>>>>>> or implement something like the request in github pull/195. This 
>>>>>> extension point
>>>>>> would make ThrowableProxy refactors significantly more difficult in the 
>>>>>> future.
>>>>>>
>>>>>> -ck
>>>>>>
>>>>>> On Tue, Aug 7, 2018 at 11:10 PM, Carter Kozak <c4kof...@gmail.com> wrote:
>>>>>>> My guess is that StackWalker provides additional information beyond
>>>>>>> the array of classes
>>>>>>> supplied by the SecurityManager, though I've not done a thorough 
>>>>>>> analysis yet.
>>>>>>>
>>>>>>> A quick targeted benchmark of our current implementations:
>>>>>>>
>>>>>>> Benchmark                                               Mode  Cnt
>>>>>>> Score        Error  Units
>>>>>>> StackTraceBenchmark.defaultJava8        thrpt    3  113965.921 ±
>>>>>>> 119706.986  ops/s
>>>>>>> StackTraceBenchmark.securityManager  thrpt    3  788004.237 ±  
>>>>>>> 82578.567  ops/s
>>>>>>> StackTraceBenchmark.stackWalker         thrpt    3  182902.031 ±
>>>>>>> 39018.395  ops/s
>>>>>>>
>>>>>>>
>>>>>>> -ck
>>>>>>>
>>>>>>> On Tue, Aug 7, 2018 at 7:20 PM, Ralph Goers 
>>>>>>> <ralph.go...@dslextreme.com> wrote:
>>>>>>>> I have to wonder why using the security manager is faster than using 
>>>>>>>> StackWalker. StackWalker was created just for this purpose. Is the way 
>>>>>>>> it is implemented the problem?
>>>>>>>>
>>>>>>>> Ralph
>>>>>>>>
>>>>>>>>
>>>>>>>>> On Aug 7, 2018, at 1:34 PM, cakofony <g...@git.apache.org> wrote:
>>>>>>>>>
>>>>>>>>> GitHub user cakofony opened a pull request:
>>>>>>>>>
>>>>>>>>> https://github.com/apache/logging-log4j2/pull/202
>>>>>>>>>
>>>>>>>>> [LOG4J2-2391] Improve ThrowableProxy performace on java 9+
>>>>>>>>>
>>>>>>>>> Share the SecurityManager implementation of getCurrentStackTrace
>>>>>>>>> with the java 9 implementation.
>>>>>>>>>
>>>>>>>>> You can merge this pull request into a Git repository by running:
>>>>>>>>>
>>>>>>>>> $ git pull https://github.com/cakofony/logging-log4j2 
>>>>>>>>> java9_getcurrentstacktrace
>>>>>>>>>
>>>>>>>>> Alternatively you can review and apply these changes as the patch at:
>>>>>>>>>
>>>>>>>>> https://github.com/apache/logging-log4j2/pull/202.patch
>>>>>>>>>
>>>>>>>>> To close this pull request, make a commit to your master/trunk branch
>>>>>>>>> with (at least) the following in the commit message:
>>>>>>>>>
>>>>>>>>> This closes #202
>>>>>>>>>
>>>>>>>>> ----
>>>>>>>>> commit 52bf8569e8e9881d0999156c31d99b99f28e6e73
>>>>>>>>> Author: Carter Kozak <ckozak@...>
>>>>>>>>> Date:   2018-08-07T20:27:10Z
>>>>>>>>>
>>>>>>>>> [LOG4J2-2391] Improve ThrowableProxy performace on java 9+
>>>>>>>>>
>>>>>>>>> Share the SecurityManager implementation of getCurrentStackTrace
>>>>>>>>> with the java 9 implementation.
>>>>>>>>>
>>>>>>>>> ----
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ---
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>

Reply via email to