does C1+CMS miss a storestore membar in jdk8u-shenandoah?
Doerr, Martin
martin.doerr at sap.com
Thu Dec 12 09:36:51 UTC 2019
Hi lx,
seems like the following issue should get backported:
https://bugs.openjdk.java.net/browse/JDK-8135018
Btw. I believe PPC is fine because C1 is not supported in 8u (at least not in the official repo).
Best regards,
Martin
> -----Original Message-----
> From: jdk8u-dev <jdk8u-dev-bounces at openjdk.java.net> On Behalf Of Liu
> Xin
> Sent: Donnerstag, 12. Dezember 2019 08:40
> To: aarch64-port-dev at openjdk.java.net; ppc-aix-port-
> dev at openjdk.java.net; jdk8u-dev at openjdk.java.net
> Subject: does C1+CMS miss a storestore membar in jdk8u-shenandoah?
>
> Hi, Aarch64 & PowerPC community,
>
> I think this is only for arm and ppc because only they are use relaxed
> memory ordering. x86 and sparc use TSO so storestore membar doesn't
> matter
> for them. please correct me if I am wrong.
>
> I feel that C1's
> LIRGenerator::CardTableModRef_post_barrier(c1_LIRGenerator.cpp) misses
> a
> storestore membar for CMS on jdk8u. Could you review my observation? If I
> am right, I'd like to file a bug and fix it.
>
> One reference is oop.inline.hpp. CMS uses the following function:
> template <class T> inline void oop_store(volatile T* p, oop v)
> It will emit a write_mem_barrier before cardTable updates.
>
> Another reference is C2 code. GraphKit::write_barrier_post generates
> storeCM for CMS.
> // Smash zero into card
> if( !UseConcMarkSweepGC ) {
> __ store(__ ctrl(), card_adr, zero, bt, adr_type, MemNode::release);
> } else {
> // Specialized path for CM store barrier
> __ storeCM(__ ctrl(), card_adr, zero, oop_store, adr_idx, bt, adr_type);
> }
>
> Actually, it's not only C1 has this bug. Template interpreter has this
> problem too. It only happens for aarch64. do_oop_store in
> templateTable_aarch64.cpp doesn't have any membar for CMS. By contrast,
> ppc64 does have a membar(StoreStore).
>
> (macroAssembly_ppc.cpp)
>
> // Write the card table byte.
> void MacroAssembler::card_table_write(jbyte* byte_map_base, Register
> Rtmp,
> Register Robj) {
> assert_different_registers(Robj, Rtmp, R0);
> load_const_optimized(Rtmp, (address)byte_map_base, R0);
> srdi(Robj, Robj, CardTableModRefBS::card_shift);
> li(R0, 0); // dirty
> if (UseConcMarkSweepGC) membar(Assembler::StoreStore);
> stbx(R0, Rtmp, Robj);
> }
>
> I also check the jdk11 and jdk14, c1 and template interpreter both
> consider concurrent_scanning case. please check out the following
> functions. so only jdk8u is at risk.
> CardTableBarrierSetC1::post_barrier
> CardTableBarrierSetAssembler::store_check
>
> thanks,
> --lx
More information about the ppc-aix-port-dev
mailing list