RFR(m): 8220351: Cross-modifying code

David Holmes david.holmes at oracle.com
Mon Mar 11 05:05:13 UTC 2019


Hi Robbin,

Sorry but I find it hard to understand how we suddenly need to sprinkle 
instruction stream synchronization operations all around the VM. I can't 
even see how some of these locations relate to "code modification". Can 
you please explain in more detail exactly what the problem is.

Thanks,
David

On 9/03/2019 1:24 am, Robbin Ehn wrote:
> Hi all, please review.
> 
> Issue:
> https://bugs.openjdk.java.net/browse/JDK-8220351
> Changeset:
> http://cr.openjdk.java.net/~rehn/8220351/webrev/
> 
> After a JavaThread have been in a safepoint/(handshake) safe state it 
> can start
> executing updated code. E.g. an oop in the instruction stream can have been
> updated.
> 
> Most hardware's require a barrier or that the code cross modified is far 
> away to
> guarantee that the thread executing the updated instruction stream sees the
> modification.
> 
> What far away is and how far an update instruction stream is from a 
> safepoint
> safe state is not clear.
> 
> To be compliant with those architectures an instruction stream barrier 
> must be
> added when leaving the safepoint safe state.
> 
> There may be crashes today due to this missing barrier.
> A new CPU with deeper pipeline or changes to the VM which moves a 
> safepoint safe
> state closer to a nmethod can increase changes of a crash.
> 
> A few benchmarks will see a performance regression with the extra 
> serializing,
> such as Octane-Crypto -5% (x86).
> 
> With a much more elaborate fix, such as changing the local poll to have 
> more
> than two states (armed/disarmed), it would be possible to only emit such
> instruction stream barrier when the poll have been armed while the 
> thread was
> safepoint safe.
> 
> Passes t1-3 on our platforms, and test built what I can.
> 
> Thanks, Robbin


More information about the hotspot-dev mailing list