[9] RFR (S) 8157184: java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java failed with a fatal error

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Thu May 19 17:21:56 UTC 2016


Reviewed.

Best regards,
Vladimir Ivanov

On 5/19/16 8:18 PM, Vladimir Kozlov wrote:
> 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