KEMBAR78
Adding more GHA jobs to cover JDK versions on ARM by Baraa-Hasheesh · Pull Request #1508 · async-profiler/async-profiler · GitHub
Skip to content

Conversation

@Baraa-Hasheesh
Copy link
Contributor

Description

Adding GHA runners to cover JDKs 17,21, & 25 on ARM & Also replacing JDK24 with 25 on x86

we recently found some issues on more recent JDK versions on ARM that would have been found by simply running the integration tests

Related issues

#1496

Motivation and context

Increase the coverage & early detection of bugs on ARM

How has this been tested?

GHA runners & make test


By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@fandreuz
Copy link
Contributor

@Baraa-Hasheesh I think you're adding "GHA jobs", not runners

jvmArgs = "-Xcomp",
jvm = Jvm.HOTSPOT
jvm = Jvm.HOTSPOT,
jvmVer = {8, 24} // TODO: Enable on next JDK25 is released JDK-8367689
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unclear comment, what does it mean?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After JDK-8367689 is released in next JDK25 LTS release we need to enable this test back to run on all JDKs

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see, the comment is quite unclear tho

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO: remove version filter after the fix for JDK-8367689 is released

mainClass = StringBuilderTest.class,
debugNonSafepoints = true,
arch = {Arch.ARM64, Arch.ARM32},
// C2 Inlining can cause some issues when aggressive inlining happens
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the problem is inlining, why can't we run this with -XX:-Inline on the versions affected by this behavior?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's not hide bugs here
I can make the test "pass" in many ways
The problem should be ideally fixed then we can re-enable the tests

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's not hide bugs here

I'm not proposing to hide it. I'm saying that instead of disabling the test altogether on modern JDK versions running on ARM, we could think of having a separate test which runs with -XX:-Inline, if that really solves the problem. It could still help us catching possible regressions, especially since there isn't a clear timeline towards a fix.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the idea,

@apangin what are you're thoughts about adding a separate test with -XX:-Inline just to capture possible issues/regressions in Intrinsics on newer JDKs?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment sounds hand-waving. How can you claim something about aggressive inlining if you haven't got to the root cause yet?
You can frame it like "C2 often loses PcDesc mapping from arraycopy intrinsic to the original bytecode."
Link JBS issue when you create it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to note, I will rephrase the comment
As we've yet to find the exact root cause
But we noticed that the issue is always accompanied with aggressive inlines
Disabling the inline does make the test "pass"

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Testing with -XX:-Inline has no practical benefit.

image: public.ecr.aws/async-profiler/asprof-builder-arm:latest
- runson:
display: linux-arm64
# There is no "latest" tag available (yet) as ARM runners are still in public preview
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think one of these comments is enough, especially because it does not seem to be a real problem for us.

@Baraa-Hasheesh Baraa-Hasheesh changed the title Adding more GHA runners to cover JDK versions on ARM Adding more GHA jobs to cover JDK versions on ARM Sep 24, 2025
@krk
Copy link
Contributor

krk commented Sep 25, 2025

Please wait for #1502 to be merged.

# Conflicts:
#	.github/workflows/test-and-publish-nightly.yml
@Baraa-Hasheesh Baraa-Hasheesh marked this pull request as draft September 26, 2025 14:08
@Baraa-Hasheesh Baraa-Hasheesh marked this pull request as ready for review September 29, 2025 13:52
@apangin apangin merged commit 0eba17e into async-profiler:master Sep 29, 2025
24 checks passed
jvm = Jvm.HOTSPOT
jvm = Jvm.HOTSPOT,
// TODO: remove version filter after the fix for JDK-8367689 is released
jvmVer = {8, 24}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
jvmVer = {8, 24}
jvmVer = {8, 25}

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

    private static boolean applicable(Test test) {
        Os[] os = test.os();
        Arch[] arch = test.arch();
        Jvm[] jvm = test.jvm();
        int[] jvmVer = test.jvmVer();
        return (os.length == 0 || Arrays.asList(os).contains(currentOs)) &&
                (arch.length == 0 || Arrays.asList(arch).contains(currentArch)) &&
                (jvm.length == 0 || Arrays.asList(jvm).contains(currentJvm)) &&
                (jvmVer.length == 0 || (currentJvmVersion >= jvmVer[0] && currentJvmVersion <= jvmVer[jvmVer.length - 1]));
    }

values are inclusive, we don't want to run on 25 as it's currently broken until next release

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants