> This PR reduces the Thread-SMR (Safe Memory Reclamation) related cost of > starting and exiting threads. > > Both starting and exiting a thread create a new `ThreadsList` and retire the > old one. Previously, we used to scan the hazard pointers of all threads when > a `ThreadsList` was retired. This made the execution cost increasingly higher > as more threads were started. > > This PR tackles the problem in three ways: > > 1. By not scanning hazard pointers every time a new thread is started. > Instead, we defer the scanning until either 16 `ThreadsLists` have been > retired or the retired lists occupy at least 4 MB of memory. > 2. We use the scan that is performed when removing a thread to also determine > if it's safe to delete the thread, and thereby we potentially avoid a costly > re-scan in `wait_until_not_protected()`. > 3. By checking if there is no retired `ThreadsList` that can protect the > thread, `wait_until_not_protected()` can also avoid a re-scan. > > I've run the ThreadStart reproducer that is attached to > [JDK-8307970](https://bugs.openjdk.org/browse/JDK-8307970). Depending on the > number of idle threads, the changes in this PR show that threads start up to > ~63% faster (or in other words, a ~39% reduction in time to start a thread). > > To go further than this likely requires a major rewrite of the Thread-SMR > system, which would not be a walk in the park. > > Passes tier1-3 tests. > > --------- > - [x] I confirm that I make this contribution in accordance with the [OpenJDK > Interim AI Policy](https://openjdk.org/legal/ai).
Fredrik Bredberg has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains seven additional commits since the last revision: - Update for David - Merge branch 'master' into 8307970_thraedstart_is_slow - Update for Patricio - Added reproducer ThreadStartWithIdleThreads.java - Merge branch 'master' into 8307970_thraedstart_is_slow - Updated comments for David and Daniel - 8307970: Thread.start is slow with large number of threads ------------- Changes: - all: https://git.openjdk.org/jdk/pull/33166/files - new: https://git.openjdk.org/jdk/pull/33166/files/68eab105..5a8fad85 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=33166&range=02 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=33166&range=01-02 Stats: 42946 lines in 1202 files changed: 20658 ins; 17570 del; 4718 mod Patch: https://git.openjdk.org/jdk/pull/33166.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/33166/head:pull/33166 PR: https://git.openjdk.org/jdk/pull/33166
