-
Notifications
You must be signed in to change notification settings - Fork 5.9k
8334779: Test compiler/c1/CanonicalizeArrayLength.java is timing out #19871
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
👋 Welcome back kvn! A progress list of the required criteria for merging this PR into |
@vnkozlov This change now passes all automated pre-integration checks. ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details. After integration, the commit message for the final commit will be:
You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed. At the time when this comment was updated there had been 39 new commits pushed to the
As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details. ➡️ To integrate this PR with the above commit message to the |
Webrevs
|
Where are these strings actually located? Do they need to be relocated if the CodeBuffer expands? Can we assert that uses of ExternalAddress do not point inside the CodeBuffer/CodeBlob? You might catch additional cases. |
Thank you, @dean-long, for looking. But structure which keep track of these strings is part of CodeBlob |
To clarify, these strings are externals and using ExternalAddress for them is correct. But we don't need to use relocation for them (no need to patch) because they don't move and |
I did experiment to see if ExternalAddress reference address in CodeCache. There are few places where it can be changed but it is for different RFE. |
How will Leyden relocate these references if they are changed to relocInfo::none? Maybe these strings should be moved to the nmethod's _immutable_data? |
Very nice idea. I was already think about moving oop_maps and relocation info from CodeBlob into _immutable_data. I will include these strings too. In a separate RFE. Until then Leyden will not support |
I may need to use section_word relocation for that and add additional section type for _immutable_data. |
I did more investigation and there is an other way to solve this. I think I can use I did local testing and it works. I will test it more and update PR. Thank you, @dean-long, for this discussion. |
I forgot about spec_for_immediate(). I think it will work. For relocating in Leyden, you may need to enhance |
Yes, I need add code similar too Actually I may not need add anything. For immediate values |
I ran tier7 which uses |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good as stop-the-gap solution. Do you think there are opportunities to improve the GrowableArray situation?
I have already RFE for that: https://bugs.openjdk.org/browse/JDK-8334691 |
Ah, perfect! Thanks. |
@dean-long, are you fine with latest version? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good.
Thank you, Dean and Tobias, for reviews. |
/integrate |
Going to push as commit 6682305.
Your commit was automatically rebased without conflicts. |
The timeout is cause by running the test with
-Xcomp -XX:+VerifyOops -XX:+PatchALot
.The test continuously deoptimize and recompile
java.lang.Throwable::<init>
method.-XX:+VerifyOops
adds a lot of external addresses because it use ExternallAddress for error messages.These messages are unique for each call to
verify_oop()
because they are constructed locally.I reduced number of loop iteration by 10 to get reasonable execution time (2 mins instead of 20 mins) and got next data:
Looks like most of the time VM is spending to grow/reallocate big growable array added by JDK-8333819.
Before that change these addresses were recorded locally in nmethod's relocation info. When nmethod was deoptimized, its relocation info was discarded together with nmethod.
Only on x86 we declared message address as ExternalAddress. Aarch64 uses movptr() to store address as simple pointer. ARM uses own InlineAddress with RelocInfo::none type of relocation. I verified other platforms: none is using ExternalAddress.
I suggest to use AddressLiteral with RelocInfo::none for x86. With that the global table is small even with -XX:+VerifyOops:
Tested tier1, run test with corresponding flags to verify that time is similar to before JDK-8333819
Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/19871/head:pull/19871
$ git checkout pull/19871
Update a local copy of the PR:
$ git checkout pull/19871
$ git pull https://git.openjdk.org/jdk.git pull/19871/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 19871
View PR using the GUI difftool:
$ git pr show -t 19871
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/19871.diff
Webrev
Link to Webrev Comment