On Tue, 18 Jun 2024 21:01:15 GMT, Daniel Jeliński <djelin...@openjdk.org> wrote:

> We use 2 ParkEvent instances per thread. The ParkEvent objects are never 
> freed, but they are recycled when a thread dies, so the number of live 
> ParkEvent instances is proportional to the maximum number of threads that 
> were live at any time.
> 
> On Windows, the ParkEvent object wraps a kernel Event object. Kernel objects 
> are a limited and costly resource. In this PR, I replace the use of kernel 
> events with user-space synchronization.
> 
> The new implementation uses WaitOnAddress and WakeByAddressSingle methods to 
> implement synchronization. The methods are available since Windows 8. We only 
> support Windows 10 and newer, so OS support should not be a problem.
> 
> WaitOnAddress was observed to return spuriously, so I added the necessary 
> code to recalculate the timeout and continue waiting.
> 
> Tier1-5 tests passed. Performance tests were... inconclusive. For example, 
> `ThreadOnSpinWaitProducerConsumer` reported 30% better results, while 
> `LockUnlock.testContendedLock` results were 50% worse. 
> 
> Thoughts?

Interesting, did not know that.

Apart from the unknown performance characteristics, what about backward 
compatibility? Do we care for Windows older than 8?

I share @dholmes-ora concern about scalibility. Your patch replaces the 
underlying mechanics for ObjectMonitor, right? We can have a lot of OMs, 
depending on how fast deflation is. Not many of them would be contended though.

IIRC The Renaissance philosophers benchmark is a good example of mass 
synchronisation. If you run this with UseHeavyMonitors, it would be a good test.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/19778#issuecomment-2178072230

Reply via email to