RFR: Use timed wait to sleep control thread
earthling-amzn
github.com+71722661+earthling-amzn at openjdk.java.net
Wed Apr 7 18:49:59 UTC 2021
On Wed, 7 Apr 2021 17:21:55 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:
>> Using a timed `wait` rather than a naked sleep allows the control thread to be more responsive to requests from mutators and the regulator thread to start GC cycles. The sleep time is also changed from `ShenandoahControlIntervalMin` to `ShenandoahControlIntervalMax` to reduce unnecessary polling cycles. We could use a plain `wait`, but the control thread is responsible for periodically sending allocation metrics to the `pacer`.
>
> src/hotspot/share/gc/shenandoah/shenandoahControlThread.cpp line 768:
>
>> 766: _gc_requested.set();
>> 767: _requested_gc_cause = cause;
>> 768: notify_control_thread();
>
> So this thing holds `_gc_waiters_lock`. I noticed it when trying to implement JDK-8264851. Fastdebug builds would fail with: `# assert(false) failed: Attempting to acquire lock ShenandoahControlWaitGC_lock/11 out of order with lock ShenandoahRequestedGC_lock/11 -- possible deadlock`. How is that handled here?
Looking into this.
-------------
PR: https://git.openjdk.java.net/shenandoah/pull/28
More information about the shenandoah-dev
mailing list