On Tue, 22 Sep 2020 03:12:01 GMT, David Holmes <dhol...@openjdk.org> wrote:
>> Looks mostly good to me! > > Hi Robbin, > > I've gone back to refresh myself on the previous discussions and (internal) > design walk-throughs to get a better sense > of these changes. Really the "asynchronous handshake" aspect is only a small > part of this. The fundamental change here > is that handshakes are now maintained via a per-thread queue, and those > handshake operations can, in the general case, > be executed by any of the target thread, the requestor (active_handshaker) > thread or the VMThread. Hence the removal of > the various "JavaThread::current()" assumptions. Unless constrained > otherwise, any handshake operation may be executed > by the VMThread so we have to take extra care to ensure the code is written > to allow this. I'm a little concerned that > our detour into direct-handshakes actually lulled us into a false sense of > security knowing that an operation would > always execute in a JavaThread, and we have now reverted that and allowed the > VMThread back in. I understand why, but > the change in direction here caught me by surprise (as I had forgotten the > bigger picture). It may not always be > obvious that the transitive closure of the code from an operation can be > safely executed by a non-JavaThread. Then on > top of this generalized queuing mechanism there is a filter which allows some > control over which thread may perform a > given operation - at the moment the only filter isolates "async" operations > which only the target thread can execute. > In addition another nuance is that when processing a given thread's handshake > operation queue, different threads have > different criteria for when to stop processing the queue: > - the target thread will drain the queue completely > - the VMThread will drain the queue of all "non-async" operations** > - the initiator for a "direct" operation will drain the queue up to, and > including, the synchronous operation they > submitted > - the initiator for an "async" operation will not process any operation > themselves and will simply add to the queue and > then continue on their way (hence the "asynchronous") > > ** I do have some concerns about latency impact on the VMThread if it is used > to execute operations that didn't need to be > executed by the VMThread! > > I remain concerned about the terminology conflation that happens around > "async handshakes". There are two aspects that > need to be separated: > - the behaviour of the thread initiating the handshake operation; and > - which thread can execute the handshake operation > > When a thread initiates a handshake operation and waits until that operation > is complete (regardless of which thread > performed it, or whether the initiator processed any other operations) that > is a synchronous handshake operation. When > a thread initiates a handshake operation and does not wait for the operation > to complete (it does the > target->queue()->add(op); and continues on its way) that is an asynchronous > handshake operation. The question of > whether the operation must be executed by the target thread is orthogonal to > whether the operation was submitted as a > synchronous or asynchronous operation. So I have problem when you say that > an asynchronous handshake operation is one > that must be executed by the target thread, as this is not the right > characterisation at all. It is okay to constrain > things such that an async operation is always executed by the target, but > that is not what makes it an async operation. > In the general case there is no reason why an async operation might not be > executed by the VMThread, or some other > JavaThread performing a synchronous operation on the same target. I will go > back through the actual handshake code to > see if there are specific things I would like to see changed, but that will > have to wait until tomorrow. Thanks, David Hi David, you are correct and you did a fine job summarizing this, thanks! > I will go back through the actual handshake code to see if there are specific > things I would like to see changed, but > that will have to wait until tomorrow. Great thanks! > > Thanks, > David # ------------- PR: https://git.openjdk.java.net/jdk/pull/151