[aarch64-port-dev ] RFR (XS) 8252096: Shenandoah: adjust SerialPageShiftCount for x86_32 and JFR
Aleksey Shipilev
shade at redhat.com
Thu Aug 20 13:03:46 UTC 2020
Hi,
Once I added bootcycle-images to x86_32 test configurations, this failure was discovered:
# Internal Error (/home/shade/trunks/shenandoah-jdk8/hotspot/src/share/vm/runtime/os.cpp:1280),
pid=490815, tid=0xf5fefb40
# assert(SerializePageShiftCount == count) failed: thread size changed, fix SerializePageShiftCount
constant
It happens when all three things hold true:
- JFR is enabled at build time
- Shenandoah is enabled at build time (i.e. the build config is not "minimal1")
- 32-bit VM is being built
Therefore, it only affects aarch64-port/jdk8u-shenandoah, and here is the minimal fix that adjusts
the constant when all three things are in effect at the same time:
diff -r ed70d5208f5f src/share/vm/utilities/globalDefinitions.hpp
--- a/src/share/vm/utilities/globalDefinitions.hpp Mon Jun 22 20:26:02 2020 +0800
+++ b/src/share/vm/utilities/globalDefinitions.hpp Thu Aug 20 13:03:44 2020 +0200
@@ -143,12 +143,18 @@
// log2_intptr(sizeof(class JavaThread)) - log2_intptr(64);
// see os::set_memory_serialize_page()
#ifdef _LP64
const int SerializePageShiftCount = 4;
#else
+#if INCLUDE_JFR && INCLUDE_ALL_GCS
+// JavaThread already has quite a few Shenandoah fields. Adding many JFR fields
+// trips sizeof(JavaThread) > 1024. Need to adjust it here.
+const int SerializePageShiftCount = 4;
+#else
const int SerializePageShiftCount = 3;
#endif
+#endif
// An opaque struct of heap-word width, so that HeapWord* can be a generic
// pointer into the heap. We require that object sizes be measured in
// units of heap words, so that that
// HeapWord* hw;
Testing: Linux {x86_64, x86_32} x {zero, minimal1, server} x {default, jfr} bootcycle-images build
--
Thanks,
-Aleksey
More information about the aarch64-port-dev
mailing list