[aarch64-port-dev ] JCStress Failure -WCAS_WCAS

Stuart Monteith stuart.monteith at linaro.org
Fri Sep 16 15:49:34 UTC 2016


Thanks for that Aleksey - I'm new to this OpenJDK thing, so that's all
good to know.

I do wonder what the case is for "-XX:-RestrictContended" if Jigsaw
restricts access anyway.

On 16 September 2016 at 16:02, Aleksey Shipilev <shade at redhat.com> wrote:
> Hi Stuart,
>
> On 09/16/2016 02:52 PM, Stuart Monteith wrote:
>>    I've have tests-chapter-1a compiling by generating a jar to use
>> "--add-patch" against so that @sun.misc.Contended will apparently be
>> in the jdk.unsupported module, but of course, that's not the problem
>> once you actually try to run.
>
> Yes, but I would prefer to have all these little Jigsaw pummeling
> options out, if possible.
>
>> Your changes look good to me, with the exception of the Padding. There
>> is an Aarch64 system that requires 128 bytes of padding to avoid
>> contention. If I interpret what you've written correctly, the booleans
>> you use for padding will be 64 bytes in length. Am I correct in
>> thinking booleans are 4 bytes in Hotspot fields?
>
> No. Booleans are 1-byte fields in HotSpot. But Padding plus two classes
> generates 16x16 = 256 booleans on each side of the protected field,
> which yields 256 bytes around it. See e.g.:
>
> $ java --add-exports java.base/jdk.internal.vm.annotation=ALL-UNNAMED
> -jar jol-cli.jar internals -cp tests-custom/target/jcstress.jar
> org.openjdk.jcstress.infra.results.CharResult1_jcstress
>
> org.openjdk.jcstress.infra.results.CharResult1_jcstress object internals:
>  OFFSET  SIZE    TYPE DESCRIPTION                    VALUE
>       0     4         (object header)                ...
>       4     4         (object header)                ...
>       8     4         (object header)                ...
>      12     2    char CharResult1.r1                 \00
>      14     2         (alignment/padding gap)        N/A
>      16     1 boolean CharResult1_jcstress_c2.p000   false
>      17     1 boolean CharResult1_jcstress_c2.p001   false
>      18     1 boolean CharResult1_jcstress_c2.p002   false
> ...
>     270     1 boolean CharResult1_jcstress_c2.p254   false
>     271     1 boolean CharResult1_jcstress_c2.p255   false
>     272     4     int CharResult1_jcstress_c1.trap   0
>     276     1 boolean CharResult1_jcstress.p000      false
>     277     1 boolean CharResult1_jcstress.p001      false
> ...
>     530     1 boolean CharResult1_jcstress.p254      false
>     531     1 boolean CharResult1_jcstress.p255      false
>     532     4         (loss due to the next object alignment)
> Instance size: 536 bytes
>
>
>> The @Contended flag has the correct behaviour as it can query the
>> appropriate granule size.
>
> Yes, I know about the benefits of @Contended. Alas, using it in
> compatible manner outside JDK is a nuisance. Granted, this is partially
> my own fault for not pressing this hard enough during the original
> development, but hey, I *was* suggesting java.util.concurrent.Contended
> :) Hierarchy trick is the next best thing.
>
> Thanks,
> -Aleksey
>


More information about the aarch64-port-dev mailing list