RFR (S): CR 8005926: (thread) Merge ThreadLocalRandom state into java.lang.Thread
Chris Hegarty
chris.hegarty at oracle.com
Mon Jan 14 13:52:21 UTC 2013
For what it is worth, it is on my list for today.
-Chris.
On 14/01/2013 13:31, Aleksey Shipilev wrote:
> I understand everyone is busy with JDK8 milestone, but maybe some
> critical people have missed this note? It would be terrific if someone
> could review this (or even sponsor it!).
>
> Thanks,
> Aleksey.
>
> On 01/11/2013 02:31 AM, Aleksey Shipilev wrote:
>> Hi,
>>
>> Submitting this on behalf of Doug Lea. The webrev is here:
>> http://cr.openjdk.java.net/~shade/8005926/webrev.00/
>>
>> Bottom-line: merge ThreadLocalRandom state into Thread, to optimize many
>> use cases around j.u.c.* code. The simple performance tests on 2x2 i5,
>> Linux x86_64, 4 threads, 5 forks, 3x3s warmup, 5x3s measurement:
>>
>> JDK8 (baseline)
>> TLR.nextInt(): 6.4 +- 0.1 ns/op
>> TLR.current().nextInt(): 16.1 +- 0.4 ns/op
>> TL.get().nextInt(): 19.1 +- 0.6 ns/op
>>
>> JDK8 (patched)
>> TLR.nextInt(): 6.5 +- 0.2 ns/op
>> TLR.current().nextInt(): 6.4 +- 0.1 ns/op
>> TL.get().nextInt(): 17.2 +- 2.0 ns/op
>>
>> First line shows the peak performance of TLR itself, everything over
>> that is the ThreadLocal overhead. One can see the patched version
>> bypasses ThreadLocal machinery completely, and the overhead is slim to none.
>>
>> N.B. It gets especially interesting when there are many ThreadLocals
>> registered. Making 1M ThreadLocals and pre-touching them bloats the
>> thread-local maps, and we get:
>>
>> JDK8 (baseline), contaminators = 1M:
>> TLR.nextInt(): 6.4 +- 0.1 ns/op
>> TLR.current().nextInt(): 21.7 +- 5.3 ns/op
>> TL.get().nextInt(): 28.7 +- 1.1 ns/op
>>
>> JDK8 (patched), contaminators = 1M:
>> TLR.nextInt(): 6.6 +- 0.2 ns/op
>> TLR.current().nextInt(): 6.5 +- 0.1 ns/op
>> TL.get().nextInt(): 29.4 +- 0.5 ns/op
>>
>> Note that patched version successfully dodges this pathological case.
>>
>> Testing:
>> - Doug tested on his platforms
>> - Tested Linux x86_64 to build and run successfully
>> - JPRT builds are OK
>> - JPRT tests are OK (modulo some weird lambda/default-methods test
>> failures in jdk8/tl)
>>
>> Attribution:
>> - dl: original patch
>> - shade: testing, copyright headers, etc.
>>
>> -Aleksey.
>>
>
More information about the core-libs-dev
mailing list