On Mon, 19 Oct 2026 15:42:36 GMT, Fredrik Bredberg <[email protected]> wrote:
>> 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 incrementally with one > additional commit since the last revision: > > Update for Patricio These are excellent improvements to make - great find. Changes look good to me. Thanks src/hotspot/share/runtime/threadSMR.cpp line 1162: > 1160: MutexLocker ml(Threads_lock); > 1161: // ThreadsSMRSupport::remove_thread() has removed the thread > 1162: // from the current ThreadsList. But an older retired Suggestion: // from the current ThreadsList, but an older retired ------------- Marked as reviewed by dholmes (Reviewer). PR Review: https://git.openjdk.org/jdk/pull/33166#pullrequestreview-5580588903 PR Review Comment: https://git.openjdk.org/jdk/pull/33166#discussion_r4321312879
