RFR: 8308094: Add a compilation timeout flag to catch long running compilations [v3]
Dean Long
dlong at openjdk.org
Thu Aug 7 01:14:25 UTC 2025
On Wed, 6 Aug 2025 13:19:33 GMT, Manuel Hässig <mhaessig at openjdk.org> wrote:
>> This PR adds `-XX:CompileTaskTimeout` on Linux to limit the amount of time a compilation task can run. The goal of this is initially to be able to find and investigate long-running compilations.
>>
>> The timeout is implemented using a POSIX timer that sends a `SIGALRM` to the compiler thread the compile task is running on. Each compiler thread registers a signal handler that triggers an assert upon receiving `SIGALRM`. This is currently only implemented for Linux, because it relies on `SIGEV_THREAD_ID` to get the signal delivered to the same thread that timed out.
>>
>> Since `SIGALRM` is now used, the test `runtime/signal/TestSigalrm.java` now requires `vm.flagless` so it will not interfere with the compiler thread signal handlers.
>>
>> Testing:
>> - [ ] Github Actions
>> - [ ] tier1, tier2 on all platforms
>> - [ ] tier3, tier4 and Oracle internal testing on Linux fastdebug
>> - [ ] tier1 through tier4 with `-XX:CompileTaskTimeout=60000` (one minute timeout) to see what fails (`compiler/codegen/TestAntiDependenciesHighMemUsage2.java`, `compiler/loopopts/TestMaxLoopOptsCountReached.java`, and `compiler/c2/TestScalarReplacementMaxLiveNodes.java` fail)
>
> Manuel Hässig 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:
>
> - Merge branch 'master' into JDK-8308094-timeout
> - No acquire release semantics
> - Factor Linux specific timeout functionality out of share/
> - Move timeout disarm above if
> - Merge branch 'master' into JDK-8308094-timeout
> - Fix SIGALRM test
> - Add timeout functionality to compiler threads
Looks good. However, you might want to simply remove _timeout_armed, or put it inside a #ifdef ASSERT, since it is only used in an assert.
-------------
Marked as reviewed by dlong (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/26023#pullrequestreview-3094752418
More information about the hotspot-dev
mailing list