[9] RFR (S) 8157184: java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java failed with a fatal error
Vladimir Kozlov
vladimir.kozlov at oracle.com
Thu May 19 17:18:29 UTC 2016
https://bugs.openjdk.java.net/browse/JDK-8157184
http://cr.openjdk.java.net/~kvn/8157184/webrev.00/
Here is possible failure scenario:
PICL is not installed on the failed SPARC machine as result
_L2_data_cache_line_size is 0 (unknown). In such situation we should not
use BIS instructions. But AllocatePrefetchInstr setting is not guarded
by cache_line_size > 0 check and BIS instruction is selected:
The default value for AllocatePrefetchStepSize is 16 when
cache_line_size is 0 which is smaller then real cache line size (32).
Flags values on crashing T5 machine:
Reserve for allocation: 24
AllocatePrefetchLines: 6
AllocateInstancePrefetchLines: 2
AllocatePrefetchDistance: 64
AllocatePrefetchStepSize: 16
AllocatePrefetchInstr: 1
AllocatePrefetchStyle: 3
_reserve_for_allocation_prefetch = (AllocatePrefetchDistance +
AllocatePrefetchStepSize * lines)
It is not multiply of real cache line size since
AllocatePrefetchStepSize =16 < 32 bytes cache line on T5.
And since we are using BIS instruction it can clean whole cache line if
it is executed for address aligned to the start of cache line and at the
end of reserved space: _reserve_for_allocation_prefetch -16. As result
it may clear values after reserved space (in following TLAB).
Solution: add missing cache_line_size > 0 checks.
Tested comp and jdk:tier1+tier2 RBT and forced _L2_data_cache_line_size = 0.
Thanks,
Vladimir
More information about the hotspot-dev
mailing list