TraceTypeProfile as diagnostic option

Vladimir Kozlov vladimir.kozlov at oracle.com
Mon Sep 10 12:52:48 PDT 2012


The problem is not size on disk (yes it is also important) but memory used by VM 
during execution. Also what VM sizes you got?

Vladimir

Aleksey Shipilev wrote:
> On 09/10/2012 10:28 PM, Vladimir Kozlov wrote:
>> Aleksey Shipilev wrote:
>>> On 09/10/2012 09:22 PM, Vladimir Kozlov wrote:
>>>> We need to be careful here. It will increase product VM size (currently
>>>> that code is under #ifndef PRODUCT) and embedded group will kill us for
>>>> that. I think we should look on this case by case. You still can figure
>>>> out that it is bimorphic call since they have the same bci (@ 4).
>>> What is the reasonable increase in VM size we (they) could tolerate? I
>> None :) Seriously, they pushed several changes just to save few bytes in
>> our internal data structures.
>>
>>> can make the prototype change and figure out the actual increase. Looks
>>> like there is a single small printing subroutine and two calls.
>> The subroutine will be inlined in call sites so total size increase will
>> be bigger than one method. But increase may be disappear during linking
>> due to alignment, merge and other staff. So, please, do the experiment.
> 
> There is unexpected trouble: PrintOpto and PrintOptoInlining symbols are
> not available in product scope, so I had to go an extra mile and stop
> referencing them (hence, the patch [1] is little dirty).
> 
> Now, this is surprising:
> 
> $ du -sk ...
> 108924	linux-baseline/j2re-image/
> 108916	linux-tracetype/j2re-image/
> 174476	linux-baseline/j2sdk-image/
> 174472	linux-tracetype/j2sdk-image/
> 
> Hence, this seem to trim down the JDK size :)
> 
> -Aleksey.
> 
> [1]
>> diff -r cf0013b9698c src/share/vm/opto/doCall.cpp
>> --- a/src/share/vm/opto/doCall.cpp	Wed Sep 05 15:19:35 2012 -0700
>> +++ b/src/share/vm/opto/doCall.cpp	Mon Sep 10 23:37:25 2012 +0400
>> @@ -41,11 +41,10 @@
>>  #include "prims/nativeLookup.hpp"
>>  #include "runtime/sharedRuntime.hpp"
>>  
>> -#ifndef PRODUCT
>>  void trace_type_profile(ciMethod *method, int depth, int bci, ciMethod *prof_method, ciKlass *prof_klass, int site_count, int receiver_count) {
>> -  if (TraceTypeProfile || PrintInlining || PrintOptoInlining) {
>> +  if (TraceTypeProfile || PrintInlining) {
>>      if (!PrintInlining) {
>> -      if (!PrintOpto && !PrintCompilation) {
>> +      if (!PrintCompilation) {
>>          method->print_short_name();
>>          tty->cr();
>>        }
>> @@ -57,7 +56,6 @@
>>      tty->cr();
>>    }
>>  }
>> -#endif
>>  
>>  CallGenerator* Compile::call_generator(ciMethod* call_method, int vtable_index, bool call_is_virtual,
>>                                         JVMState* jvms, bool allow_inline,
>> @@ -233,13 +231,13 @@
>>            }
>>            if (miss_cg != NULL) {
>>              if (next_hit_cg != NULL) {
>> -              NOT_PRODUCT(trace_type_profile(jvms->method(), jvms->depth() - 1, jvms->bci(), next_receiver_method, profile.receiver(1), site_count, profile.receiver_count(1)));
>> +              trace_type_profile(jvms->method(), jvms->depth() - 1, jvms->bci(), next_receiver_method, profile.receiver(1), site_count, profile.receiver_count(1));
>>                // We don't need to record dependency on a receiver here and below.
>>                // Whenever we inline, the dependency is added by Parse::Parse().
>>                miss_cg = CallGenerator::for_predicted_call(profile.receiver(1), miss_cg, next_hit_cg, PROB_MAX);
>>              }
>>              if (miss_cg != NULL) {
>> -              NOT_PRODUCT(trace_type_profile(jvms->method(), jvms->depth() - 1, jvms->bci(), receiver_method, profile.receiver(0), site_count, receiver_count));
>> +              trace_type_profile(jvms->method(), jvms->depth() - 1, jvms->bci(), receiver_method, profile.receiver(0), site_count, receiver_count);
>>                CallGenerator* cg = CallGenerator::for_predicted_call(profile.receiver(0), miss_cg, hit_cg, profile.receiver_prob(0));
>>                if (cg != NULL)  return cg;
>>              }
>> diff -r cf0013b9698c src/share/vm/runtime/globals.hpp
>> --- a/src/share/vm/runtime/globals.hpp	Wed Sep 05 15:19:35 2012 -0700
>> +++ b/src/share/vm/runtime/globals.hpp	Mon Sep 10 23:37:25 2012 +0400
>> @@ -2894,7 +2894,7 @@
>>    develop(bool, TraceFrequencyInlining, false,                              \
>>            "Trace frequency based inlining")                                 \
>>                                                                              \
>> -  notproduct(bool, TraceTypeProfile, false,                                 \
>> +  diagnostic(bool, TraceTypeProfile, false,                                 \
>>            "Trace type profile")                                             \
>>                                                                              \
>>    develop_pd(bool, InlineIntrinsics,                                        \
> 
> 


More information about the hotspot-compiler-dev mailing list