TraceTypeProfile as diagnostic option

Aleksey Shipilev aleksey.shipilev at oracle.com
Mon Sep 10 12:38:19 PDT 2012


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