diff options
-rw-r--r-- | runtime/jit/jit.cc | 17 | ||||
-rw-r--r-- | runtime/jit/jit.h | 12 | ||||
-rw-r--r-- | runtime/parsed_options.cc | 3 | ||||
-rw-r--r-- | runtime/runtime_options.def | 1 |
4 files changed, 27 insertions, 6 deletions
diff --git a/runtime/jit/jit.cc b/runtime/jit/jit.cc index 1a5621e4a0..e9317a5435 100644 --- a/runtime/jit/jit.cc +++ b/runtime/jit/jit.cc @@ -102,6 +102,20 @@ JitOptions* JitOptions::CreateFromRuntimeArguments(const RuntimeArgumentMap& opt static_cast<size_t>(1)); } + if (options.Exists(RuntimeArgumentMap::JITInvokeTransitionWeight)) { + if (jit_options->invoke_transition_weight_ > jit_options->warmup_threshold_) { + LOG(FATAL) << "Invoke transition weight is above the warmup threshold."; + } else if (jit_options->invoke_transition_weight_ == 0) { + LOG(FATAL) << "Invoke transition ratio cannot be 0."; + } + jit_options->invoke_transition_weight_ = + *options.Get(RuntimeArgumentMap::JITInvokeTransitionWeight); + } else { + jit_options->invoke_transition_weight_ = std::max( + jit_options->warmup_threshold_ / Jit::kDefaultInvokeTransitionWeightRatio, + static_cast<size_t>(1));; + } + return jit_options; } @@ -161,8 +175,7 @@ Jit* Jit::Create(JitOptions* options, std::string* error_msg) { jit->warm_method_threshold_ = options->GetWarmupThreshold(); jit->osr_method_threshold_ = options->GetOsrThreshold(); jit->priority_thread_weight_ = options->GetPriorityThreadWeight(); - jit->transition_weight_ = std::max( - jit->warm_method_threshold_ / kDefaultTransitionRatio, static_cast<size_t>(1)); + jit->invoke_transition_weight_ = options->GetInvokeTransitionWeight(); jit->CreateThreadPool(); diff --git a/runtime/jit/jit.h b/runtime/jit/jit.h index 954a1f7f8f..3455972b70 100644 --- a/runtime/jit/jit.h +++ b/runtime/jit/jit.h @@ -44,7 +44,7 @@ class Jit { static constexpr bool kStressMode = kIsDebugBuild; static constexpr size_t kDefaultCompileThreshold = kStressMode ? 2 : 10000; static constexpr size_t kDefaultPriorityThreadWeightRatio = 1000; - static constexpr size_t kDefaultTransitionRatio = 100; + static constexpr size_t kDefaultInvokeTransitionWeightRatio = 100; virtual ~Jit(); static Jit* Create(JitOptions* options, std::string* error_msg); @@ -115,12 +115,12 @@ class Jit { void NotifyInterpreterToCompiledCodeTransition(Thread* self, ArtMethod* caller) SHARED_REQUIRES(Locks::mutator_lock_) { - AddSamples(self, caller, transition_weight_, false); + AddSamples(self, caller, invoke_transition_weight_, false); } void NotifyCompiledCodeToInterpreterTransition(Thread* self, ArtMethod* callee) SHARED_REQUIRES(Locks::mutator_lock_) { - AddSamples(self, callee, transition_weight_, false); + AddSamples(self, callee, invoke_transition_weight_, false); } // Starts the profile saver if the config options allow profile recording. @@ -195,7 +195,7 @@ class Jit { uint16_t warm_method_threshold_; uint16_t osr_method_threshold_; uint16_t priority_thread_weight_; - uint16_t transition_weight_; + uint16_t invoke_transition_weight_; std::unique_ptr<ThreadPool> thread_pool_; DISALLOW_COPY_AND_ASSIGN(Jit); @@ -216,6 +216,9 @@ class JitOptions { uint16_t GetPriorityThreadWeight() const { return priority_thread_weight_; } + size_t GetInvokeTransitionWeight() const { + return invoke_transition_weight_; + } size_t GetCodeCacheInitialCapacity() const { return code_cache_initial_capacity_; } @@ -250,6 +253,7 @@ class JitOptions { size_t warmup_threshold_; size_t osr_threshold_; uint16_t priority_thread_weight_; + size_t invoke_transition_weight_; bool dump_info_on_shutdown_; bool save_profiling_info_; diff --git a/runtime/parsed_options.cc b/runtime/parsed_options.cc index 755159f88c..44e870742c 100644 --- a/runtime/parsed_options.cc +++ b/runtime/parsed_options.cc @@ -172,6 +172,9 @@ std::unique_ptr<RuntimeParser> ParsedOptions::MakeParser(bool ignore_unrecognize .Define("-Xjitprithreadweight:_") .WithType<unsigned int>() .IntoKey(M::JITPriorityThreadWeight) + .Define("-Xjittransitionweight:_") + .WithType<unsigned int>() + .IntoKey(M::JITInvokeTransitionWeight) .Define("-Xjitsaveprofilinginfo") .WithValue(true) .IntoKey(M::JITSaveProfilingInfo) diff --git a/runtime/runtime_options.def b/runtime/runtime_options.def index 4e47953f3f..2a96703109 100644 --- a/runtime/runtime_options.def +++ b/runtime/runtime_options.def @@ -72,6 +72,7 @@ RUNTIME_OPTIONS_KEY (unsigned int, JITCompileThreshold, jit::J RUNTIME_OPTIONS_KEY (unsigned int, JITWarmupThreshold) RUNTIME_OPTIONS_KEY (unsigned int, JITOsrThreshold) RUNTIME_OPTIONS_KEY (unsigned int, JITPriorityThreadWeight) +RUNTIME_OPTIONS_KEY (unsigned int, JITInvokeTransitionWeight) RUNTIME_OPTIONS_KEY (MemoryKiB, JITCodeCacheInitialCapacity, jit::JitCodeCache::kInitialCapacity) RUNTIME_OPTIONS_KEY (MemoryKiB, JITCodeCacheMaxCapacity, jit::JitCodeCache::kMaxCapacity) RUNTIME_OPTIONS_KEY (bool, JITSaveProfilingInfo, false) |