Hi Martin,

On 18/07/2019 8:01 pm, Doerr, Martin wrote:
Hi David and Erik,

thank you for looking at my proposal.

If you try to use fast field accessors when you have to post the field
access event then how can you safely go off into a JVM TI event callback ??

We speculatively load the field and check afterwards if we can use this loaded 
value.
It is safe to use it if there was no safepoint and no JVMTI event was requested.
Otherwise, we simply discard the (possibly) loaded value and load it again in 
the slow path where we do all the synchronization and event posting.

Thanks for clarifying for me. That is all fine then.

The dynamics of this still concern me, but those concerns are also present in the existing code. Currently we don't use the quick accessors if JvmtiExport::can_post_field_access() is true during VM startup - this is a one-of initialization check that sets the use of fast accessors for the lifetime of the JVM. But that is set between the early-start and start VM events, before the live-phase. But AFAICS the capability for can_post_field_access can be set or cleared dynamically during the live phase, thus invalidating the original decision on whether to use fast accessors or not. With your changes the state of can_post_field_access is still captured during VM initialization so again the decision to check for a field access watch is hard-wired for the lifetime of the VM. But once installed that check allows for use of the fast-path if no actual watches are set - which is the whole point of this enhancement. So the issue with both old and new code is that if the capability is not present at VM startup the VM will be configured to always use the fast path, even if the capability (and field access watches) are added later.

Thanks,
David

@Erik:
Thanks for your proposal to change the function pointers. I'll look into that.

Best regards,
Martin


-----Original Message-----
From: David Holmes <david.hol...@oracle.com>
Sent: Donnerstag, 18. Juli 2019 06:39
To: Doerr, Martin <martin.do...@sap.com>; hotspot-runtime-
d...@openjdk.java.net; serviceability-dev@openjdk.java.net
Subject: Re: RFR(M): 8227680: FastJNIAccessors: Check for JVMTI field access
event requests at runtime

Hi Martin,

I need to think about this some more. A critical property of the fast
field accessors are that they are trivial and completely safe. They are
complicated by the need to check if a GC may have happened while we
directly read the field.

If you try to use fast field accessors when you have to post the field
access event then how can you safely go off into a JVM TI event callback ??

Thanks,
David

On 16/07/2019 11:31 pm, Doerr, Martin wrote:
Hi,

the current implementation of FastJNIAccessors ignores the flag -
XX:+UseFastJNIAccessors when the JVMTI capability
"can_post_field_access" is enabled.
This is an unnecessary restriction which makes field accesses
(Get<Type>Field) from native code slower when a JVMTI agent is attached
which enables this capability.
A better implementation would check at runtime if an agent actually wants
to receive field access events.

Note that the bytecode interpreter already uses this better
implementation by checking if field access watch events were requested
(JvmtiExport::_field_access_count != 0).

I have implemented such a runtime check on all platforms which currently
support FastJNIAccessors.

My new jtreg test runtime/jni/FastGetField/FastGetField.java contains a
micro benchmark:
test-
support/jtreg_test_hotspot_jtreg_runtime_jni_FastGetField/runtime/jni/Fa
stGetField/FastGetField.jtr
shows the duration of 10000 iterations with and without
UseFastJNIAccessors (JVMTI agent gets attached in both runs).
My Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz needed 4.7ms with
FastJNIAccessors and 11.2ms without it.

Webrev:

http://cr.openjdk.java.net/~mdoerr/8227680_FastJNIAccessors/webrev.00/

We have run the test on 64 bit x86 platforms, SPARC and aarch64.
(FastJNIAccessors are not yet available on PPC64 and s390. I'll contribute
them later.)
My webrev contains 32 bit implementations for x86 and arm, but
completely untested. It'd be great if somebody could volunteer to review
and test these platforms.

Please review.

Best regards,
Martin

Reply via email to