JDK-7079329 : Adjust allocation prefetching for T4
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs22
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2011-08-15
  • Updated: 2013-09-12
  • Resolved: 2011-09-30
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 6 JDK 7 Other
6u32Fixed 7u2Fixed hs22Fixed
Related Reports
Relates :  
Description
L2 cache line size is 32 bytes on T4 instead of 64 bytes on T series before. As result BIS instruction used for allocation prefetching initialize only 32 bytes. Jbb2005 runs show that prefetching 64 bytes is still better on T4 so 2 BIS instructions should be issued.

Comments
EVALUATION See main CR
12-09-2011

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/rev/1af104d6cf99
23-08-2011

PUBLIC COMMENTS L2 cache line size is 32 bytes on T4 instead of 64 bytes on T series before. As result BIS instruction prefetches only 32 bytes. Jbb2005 runs show that prefetching 64 bytes is still better on T4 so 2 BIS instructions should be issued. BIS can't be use for general prefetching since it may fault. New PrefetchAllocation node was added for allocation prefetching. Changed prefetchAlloc_bis parameter from memory to regP. Use AllocatePrefetchInstr on Sparc to allow specify what instruction to use for allocation prefetching (0: prefetch write, 1: BIS). Added new instructions on Sparc cacheLineAdrX to reduce number of instructions generated for finding next cache line address. Added new flag AllocateInstancePrefetchLines to specify number of lines to prefetch for instance allocation. L1_data_cache_line_size() renamed to prefetch_data_size(). Prefetch instructions in x86 .ad use MacroAssembler instructions. Added Abstract_VM_Version::reserve_for_allocation_prefetch() method used in ThreadLocalAllocBuffer::end_reserve(). I have to use FLAG_SET_ERGO() for AllocatePrefetchLines*2 setting since VM_Version::initialize() is called twice on Sparc.
17-08-2011

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/1af104d6cf99
17-08-2011