RFR: 8254758: Change G1ServiceThread to be task based [v4]

Stefan Johansson sjohanss at openjdk.java.net
Tue Oct 20 12:59:32 UTC 2020


> Please review this enhancement to make `G1ServiceThread` task based. This thread has evolved from having a single
> responsibility to do more things. And there are plans to add more to it. To make this easier and to allow different
> tasks to run at different intervals this change adds a simple task mechanism to the service thread.  The idea is that
> the service thread keeps a list of `G1ServiceTask`-objects that are ordered by when they should execute. When no tasks
> are ready to be run the service thread check how far into the future the next task is scheduled and sleeps/waits for
> that duration. If a new task is added while the thread is waiting it will be woken up to check for ready tasks.   There
> are currently two tasks in the list. They have been extracted from the old service thread into the tasks:
> `G1PeriodicGCTask` and `G1RemSetSamplingTask`. These are more or less identical to the old code, but in the form of
> tasks. The only difference is that `G1PeriodicGCTask` no longer need to keep track of the last attempt, since it will
> be rescheduled with the correct interval.   To reschedule a task is to update the time when it should be executed next
> and adding it back to the list. This insertion is O(n) and it should be fine since the expected number of tasks handled
> by the service thread is low. If a task don't want to be rescheduled it can set a negative timeout and that will cause
> the task to be dropped from the list. There are currently no such tasks and adding such tasks come with the
> responsibility of making sure resources are taken care of when the task is no longer active.  I've added a gtest to do
> some basic VM-testing and apart from a lot of local testing I've run mach5 tier 1-4 a few times with good results.  I
> have created a few follow up tasks to look at moving the current tasks to more appropriate locations and also updated a
> few old service thread related tasks with the label:
> [`gc-g1-service-thread`](https://bugs.openjdk.java.net/issues/?jql=labels%20%3D%20gc-g1-service-thread)

Stefan Johansson has updated the pull request incrementally with two additional commits since the last revision:

 - Self review: Test cleanup
 - Albert review: Remove run_tasks and _ms post-fix

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/734/files
  - new: https://git.openjdk.java.net/jdk/pull/734/files/c29f41dd..59a06b02

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=734&range=03
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=734&range=02-03

  Stats: 41 lines in 3 files changed: 5 ins; 17 del; 19 mod
  Patch: https://git.openjdk.java.net/jdk/pull/734.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/734/head:pull/734

PR: https://git.openjdk.java.net/jdk/pull/734



More information about the hotspot-gc-dev mailing list