RFR(XS): 8024128: guarantee(codelet_size > 0 && (size_t)codelet_size > 2*K) failed: not enough space for interpreter generation
Leslie Zhai
zhaixiang at loongson.cn
Sat Sep 15 15:35:10 UTC 2018
Hi Volker,
Thanks for your patch!
http://mail.openjdk.java.net/pipermail/hotspot-dev/2017-August/028162.html
I am backporting to jdk8u-dev now :)
https://raw.githubusercontent.com/xiangzhai/jdk8u-dev/master/JDK-8166317-Backport.patch
在 2018年09月15日 10:51, Leslie Zhai 写道:
> Hi Vladimir,
>
> Thanks for your kind response!
>
> It is Server VM, I am just debugging HotSpot C2. Yes, I changed
> ReservedCodeCacheSize to 3m.
>
> It is able to reproduce by jtreg for jdk8u fastdebug when
> InterpreterCodeSize is too big, for example 640K:
>
> $ jtreg -dir:/home/xiangzhai/project/jdk8u/hotspot/test -verbose:all
> -a -ignore:quiet -timeoutFactor:5 -agentvm
> -testjdk:/home/xiangzhai/project/jdk8u/build/linux-x86_64-normal-server-fastdebug/images/j2sdk-image
> compiler/startup/SmallCodeCacheStartup.java
>
> Native memory allocation (malloc) failed to allocate 2621440 bytes for
> CodeCache: no room for Interpreter
>
> It is clear that failed to allocate BufferBlob -> CodeBlob.
>
> And it is also able to reproduce for release when too small, for
> example 200K, but *no* changing ReservedCodeCacheSize:
>
> $ jtreg -dir:/home/xiangzhai/project/jdk8u/jdk/test -verbose:all
> -exclude:/home/xiangzhai/project/jdk8u/jdk/test/ProblemList.txt
> -conc:2 -Xmx512m -a -ignore:quiet -timeoutFactor:5 -agentvm
> -testjdk:/home/xiangzhai/project/jdk8u/build/linux-x86_64-normal-server-release/images/j2sdk-image
> com/sun/jdi/AccessSpecifierTest.java
>
> It is sensible that codelet_size =
> AbstractInterpreter::code()->available_space() - 2*K is too small.
>
> And CodeBuffer might failed to verify the allocation for each section
> due to guarantee(sect->end() <= tend, "sanity");
>
> So for X86 the suitable range of InterpreterCodeSize might be [250K,
> 600K], but for AArch64 is 200K[1]. What is the root cause behind it?
> It is just like magic number by running with +PrintInterpreter to get
> the VM to print out the size. I need to dig deep-in to find the root
> cause.
>
> [1]
> http://hg.openjdk.java.net/aarch64-port/jdk8u/hotspot/file/6bc3e4922a8b/src/cpu/aarch64/vm/templateInterpreter_aarch64.hpp#l38
>
>
> 在 2018年09月15日 02:33, Vladimir Kozlov 写道:
>> Hi Leslie
>>
>> More context is needed. Is it Client or Server VM? Did you change
>> ReservedCodeCacheSize?
>> Even with *4 it is about 1Mb when CodeCache size is 48Mb and in
>> Tiered case even bigger.
>> Also we need call stack when you hit guarantee().
>>
>> Regards,
>> Vladimir
>>
>> On 9/14/18 4:31 AM, Leslie Zhai wrote:
>>> Hi,
>>>
>>> I just quoted the old thread
>>> http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2013-October/012243.html
>>>
>>> I think we should increase it more for future otherwise you will
>>> have to
>>> always catch up with interpreter changes.
>>>
>>> Increase it to 256 * 1024 and 224 * 1024
>>>
>>> Vladimir
>>>
>>> On 10/16/13 12:22 PM, Albert Noll wrote:
>>> > Hi,
>>> >
>>> > could I have a review for this patch?
>>> >
>>> > bug: https://bugs.openjdk.java.net/browse/JDK-8026708
>>> > webrev: http://cr.openjdk.java.net/~anoll/8026708/webrev.00/
>>> > <http://cr.openjdk.java.net/%7Eanoll/8026708/webrev.00/>
>>> >
>>> > Problem: Not enough room for interpreter. My last patch did not
>>> solve
>>> > the problem for solaris-amd64.
>>> > A local build (solaris-amd64) of the most recent
>>> > hotspot-comp version requires a template interpreter
>>> > size of 211K (obtained with -XX:+PrintInterpreter).
>>> > There have been some modifications to the template
>>> > interpreter in the last couple of weeks which
>>> might have
>>> > triggered this error.
>>> >
>>> > Solution: Increase interpreter size by 8k (32-bit and 64-bit).
>>> >
>>> > Testing: Failing test case in solaris-amd64
>>>
>>> ----- 8< -------- 8< -------- 8< -------- 8< -------- 8< -------- 8<
>>> ---
>>>
>>> I found that `InterpreterCodeSize` had been changed from 200K to
>>> 208K [1] , then changed from 208K to 256K [2] by Albert. But if
>>> built with-debug-level=fastdebug/slowdebug, it will be multiplied
>>> by four:
>>>
>>> NOT_PRODUCT(code_size *= 4;) // debug uses extra interpreter code
>>> space
>>>
>>> Then it might trigger Native memory allocation (malloc) failed to
>>> allocate xxx bytes for CodeCache: no room for Interpreter issue.
>>>
>>> I don't want to always catch up with interpreter changes by guessing
>>> the suitable number, not too small, not too big :) Please give me
>>> some suggestion about the root cause, thanks a lot!
>>>
>>> Leslie Zhai
>>>
>>> [1] http://hg.openjdk.java.net/jdk8u/jdk8u-dev/hotspot/rev/6d7eba360ba4
>>>
>>> [2] http://hg.openjdk.java.net/jdk8u/jdk8u-dev/hotspot/rev/74e00b98d5dd
>>>
>>>
>
--
Regards,
Leslie Zhai
More information about the jdk8u-dev
mailing list