question about JDK-8172231: SPARC CPU features detection
Lindenmaier, Goetz
goetz.lindenmaier at sap.com
Tue Apr 20 06:43:11 UTC 2021
Hi David,
do you mind sharing the patch?
As the change was made in OracleJDK, we can
not reach the changeset from JBS.
Thanks!
Goetz
> -----Original Message-----
> From: jdk-updates-dev <jdk-updates-dev-retn at openjdk.java.net> On
> Behalf Of David Buck
> Sent: Tuesday, April 20, 2021 4:26 AM
> To: Ilarion Nakonechnyy <ilarion at azul.com>; jdk-updates-
> dev at openjdk.java.net
> Subject: RE: question about JDK-8172231: SPARC CPU features detection
>
> Hi Ilarion!
>
> The OpenJDK community may want to consider a fix similar to what we did in
> Oracle JDK 11 [0].
>
> Cheers,
> -Buck
>
> [0] https://bugs.openjdk.java.net/browse/JDK-8263407
>
> -----Original Message-----
> From: jdk-updates-dev <jdk-updates-dev-retn at openjdk.java.net> On
> Behalf Of Ilarion Nakonechnyy
> Sent: Tuesday, April 20, 2021 4:21 AM
> To: jdk-updates-dev at openjdk.java.net
> Subject: FW: question about JDK-8172231: SPARC CPU features detection
>
> Dear sirs, good day.
> My name is Ilarion, I’m new contributor for OpenJDK project.
>
> I have some questions about implementation of fix for bug JDK-8172231:
> SPARC CPU features detection, probably somebody may shed some lights on
> it.
>
> I’m doing my exercises on JDK 11 and noticed that on exact SPARC CPU block
> zeroing detection feature determines wrong.
> Having system with SPARC64-X CPU, java fails with segmentation violation
> error, on the very beginning of the java run.
> My investigations lead me to MacroAssembler::bis_zeroing() routine. Where
> begin and end of memory area is cleared by stx instruction, and the rest – via
> stxa(G0, to, G0, Assembler::ASI_ST_BLKINIT_PRIMARY), that supposed to
> zeroing memory, but it doesn’t.
> Turning off block zeroing feature via flag -XX:-UseBlockZeroing helps to avoid
> the crash.
>
>
>
>
> Decision if CPU has the CPU_blk_zeroing_msk feature based on determining
> another cpu flag, ISA_ima_msk
>
> + // Niagara Core S3 supports fast RDPC and block zeroing.
>
> + if (has_ima()) {
>
> + synthetic |= (CPU_fast_rdpc_msk | CPU_blk_zeroing_msk);
>
> + }
>
> But there is also mentioned special flag, that corresponds to Block
> initialization feature: ISA_blk_init_msk. That actually isn’t checked at all.
> ( Other than in reporting ) I looked in JDK 8, and figured out, that block
> zeroing capacity there was decided not only by ISA flags, but with referring
> on CPU model also:
>
> - // On T4 and newer Sparc BIS to the beginning of cache line always zeros it.
>
> - static bool has_block_zeroing() { return has_blk_init() && is_T4(); }
>
>
> JDK 8 works well for my case, because BIS instruction isn’t used Despite ISA
> flags that is returned by getisax reports that block initialization is supported
> ( AV_SPARC_ASI_BLK_INIT 0x0080 )
>
> [0.172s][info][os,cpu ] getisax(2) returned 1 words:
>
> [0.172s][info][os,cpu ] word 0: 0xc001b1f0
>
> So, as I can see, the CPU version ( “cpu brand” in jdk 8 ) has main role in
> detecting CPU block zeroing feature.
> Do you have some more information, probably any doc, where noted why
> CPU version plays such a role in feature detecting for JVM? In CPU
> specifications I didn’t found any clues about this.
> Thank you in advance.
More information about the jdk-updates-dev
mailing list