Disable TLH prefetching for portable AOT code - #20027
Conversation
dsouzai
left a comment
There was a problem hiding this comment.
Overall LGTM, minor change requested.
|
On a cascadelake machine I created two OpenJ9 containers, one with no fix and one with the fix from this PR. |
|
jenkins test sanity all jdk17 |
I guess that flag is defined on a per-codegen basis..., in OMR no less.. |
|
Looking at the code, there are many inconsistencies:
|
|
I will fix the build error on aarch64 in this PR by using the old code. We may want to create a 0.46.1 release with this fix and changing the OMR component will complicate things. In separate PRs (omr and openj9) I will address the inconsistencies above. |
Current code for x86 disables TLH prefething globally for Intel CPUs newer than Broadwell architecture and enables it globally for Broadwell or older CPUs. If a container image is generated on a newer architecture, then TLH prefetch will be off and this information is written into the AOT header for the shared class cache embedded in the container. If that container image is run on an older architecture, the JVM will set TLH prefetch off, and the AOT compatibility check will fail, rendering the embedded AOT code useless. This commit disables TLH prefething for portable AOT code. Signed-off-by: Marius Pirvu <mpirvu@ca.ibm.com>
|
Testing results here: https://openj9-jenkins.osuosl.org/job/PullRequest-OpenJ9/5947/ |
|
jenkins test sanity amac,alinux,win64 jdk17 |
|
jenkins test sanity amac,alinux,win jdk17 |
|
alinux had 2 failures for JITServer, unrelated to this PR |
|
Win not running because there's no nodes online, merging. |
|
These changes will need to be quad-delievered to 0.46.1, 0.47.0 and 0.48 |
|
I will wait one day for nightly testing to do its thing and tomorrow I'll start delivering this changes to the other branches. |
|
Please tag me on the 0.46.1 PR |
Current code for x86 disables TLH prefething globally for Intel CPUs newer than Broadwell architecture and enables it globally for Broadwell or older CPUs.
If a container image is generated on a newer architecture, then TLH prefetch will be off and this information is written into the AOT header for the shared class cache embedded in the container. If that container image is run on an older architecture, the JVM will set TLH prefetch off, and the AOT compatibility check will fail, rendering the embedded AOT code useless.
This commit disables TLH prefething for portable AOT code.