RFR: 8331185: Enable compiler memory limits in debug builds [v4]
Vladimir Kozlov
kvn at openjdk.org
Mon Apr 29 18:33:07 UTC 2024
On Mon, 29 Apr 2024 17:49:38 GMT, Thomas Stuefe <stuefe at openjdk.org> wrote:
>> See [1] for previous discussions.
>>
>> We'd like to introduce a default memory limit for compilations in debug builds. That way, we can catch pathological compiler errors that have an unreasonably high per-compilation memory footprint early during testing.
>>
>> The default limit affects all compilations, unless the method is subject to a memory limit set from command line. Meaning, `-XX:CompileCommand=MemLimit,...` overrules the default.
>>
>> Examples:
>>
>> This lowers the memlimit for j.l.String methods - all methods will have the default 1GB limit in a debug JVM. Only j.l.String will run with a 100M limit: `-XX:CompileCommand=MemLimit,java.lang.String::*,100m`
>>
>> This disables the default memlimit globally: `-XX:CompileCommand=MemLimit,*.*,0`
>>
>>
>> ---
>>
>> The patch:
>>
>> 1) adds a debug-only default memory limit of **1GB** (as proposed by @vnkozlov). The limit action is "crash", meaning we will assert.
>> 2) To test the mechanics, we now print out the memory limit for each compilation in the compilation cost record.
>> 3) Adapted and extended tests
>>
>> I also fixed up some copyrights that I overlooked last year when adding the compiler memory statistics this patch builds atop of.
>>
>>
>> Tested:
>>
>> - manually on Mac m1 (debug and release)
>> - GHAs are running
>> - but Oracle will do more testing before this goes in
>>
>> [1] https://mail.openjdk.org/pipermail/hotspot-compiler-dev/2024-April/074787.html
>
> Thomas Stuefe has updated the pull request incrementally with one additional commit since the last revision:
>
> fix jdk note number in test comment
test/hotspot/jtreg/compiler/loopopts/TestDeepGraphVerifyIterativeGVN.java line 30:
> 28: * @summary Test which causes a stack overflow segmentation fault with -XX:VerifyIterativeGVN=1 due to a too deep recursion in Node::verify_recur().
> 29: *
> 30: * @run main/othervm/timeout=600 -Xcomp -XX:VerifyIterativeGVN=1 -XX:CompileCommand=compileonly,compiler.loopopts.TestDeepGraphVerifyIterativeGVN::* -XX:CompileCommand=memlimit,TestFindNode::test,0
Why you list TestsFindNode here?
It is mistake in JDK-8331295 Description referencing TestsFindNode failure output. I added comment in JBS with correct TestDeepGraphVerifyIterativeGVN failure output.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/18969#discussion_r1583551705
More information about the hotspot-compiler-dev
mailing list