Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: src/heap/heap.h

Issue 1175663002: Bring back high promotion mode to shrink young generation size when scavenging latency is high. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/heap/heap.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_HEAP_HEAP_H_ 5 #ifndef V8_HEAP_HEAP_H_
6 #define V8_HEAP_HEAP_H_ 6 #define V8_HEAP_HEAP_H_
7 7
8 #include <cmath> 8 #include <cmath>
9 #include <map> 9 #include <map>
10 10
(...skipping 2094 matching lines...) Expand 10 before | Expand all | Expand 10 after
2105 2105
2106 // Initializes the allocation sites scratchpad with undefined values. 2106 // Initializes the allocation sites scratchpad with undefined values.
2107 void InitializeAllocationSitesScratchpad(); 2107 void InitializeAllocationSitesScratchpad();
2108 2108
2109 // Adds an allocation site to the scratchpad if there is space left. 2109 // Adds an allocation site to the scratchpad if there is space left.
2110 void AddAllocationSiteToScratchpad(AllocationSite* site, 2110 void AddAllocationSiteToScratchpad(AllocationSite* site,
2111 ScratchpadSlotMode mode); 2111 ScratchpadSlotMode mode);
2112 2112
2113 void UpdateSurvivalStatistics(int start_new_space_size); 2113 void UpdateSurvivalStatistics(int start_new_space_size);
2114 2114
2115 enum SurvivalRateTrend { INCREASING, STABLE, DECREASING, FLUCTUATING };
2116
2115 static const int kYoungSurvivalRateHighThreshold = 90; 2117 static const int kYoungSurvivalRateHighThreshold = 90;
2118 static const int kYoungSurvivalRateLowThreshold = 10;
2116 static const int kYoungSurvivalRateAllowedDeviation = 15; 2119 static const int kYoungSurvivalRateAllowedDeviation = 15;
2117 2120
2118 static const int kOldSurvivalRateLowThreshold = 10; 2121 static const int kOldSurvivalRateLowThreshold = 10;
2119 2122
2123 bool new_space_high_promotion_mode_active_;
2120 int high_survival_rate_period_length_; 2124 int high_survival_rate_period_length_;
2121 intptr_t promoted_objects_size_; 2125 intptr_t promoted_objects_size_;
2126 int low_survival_rate_period_length_;
2127 double survival_rate_;
2122 double promotion_ratio_; 2128 double promotion_ratio_;
2123 double promotion_rate_; 2129 double promotion_rate_;
2124 intptr_t semi_space_copied_object_size_; 2130 intptr_t semi_space_copied_object_size_;
2125 intptr_t previous_semi_space_copied_object_size_; 2131 intptr_t previous_semi_space_copied_object_size_;
2126 double semi_space_copied_rate_; 2132 double semi_space_copied_rate_;
2127 int nodes_died_in_new_space_; 2133 int nodes_died_in_new_space_;
2128 int nodes_copied_in_new_space_; 2134 int nodes_copied_in_new_space_;
2129 int nodes_promoted_; 2135 int nodes_promoted_;
2130 2136
2131 // This is the pretenuring trigger for allocation sites that are in maybe 2137 // This is the pretenuring trigger for allocation sites that are in maybe
2132 // tenure state. When we switched to the maximum new space size we deoptimize 2138 // tenure state. When we switched to the maximum new space size we deoptimize
2133 // the code that belongs to the allocation site and derive the lifetime 2139 // the code that belongs to the allocation site and derive the lifetime
2134 // of the allocation site. 2140 // of the allocation site.
2135 unsigned int maximum_size_scavenges_; 2141 unsigned int maximum_size_scavenges_;
2136 2142
2143 SurvivalRateTrend previous_survival_rate_trend_;
2144 SurvivalRateTrend survival_rate_trend_;
2145
2146 void set_survival_rate_trend(SurvivalRateTrend survival_rate_trend) {
2147 DCHECK(survival_rate_trend != FLUCTUATING);
2148 previous_survival_rate_trend_ = survival_rate_trend_;
2149 survival_rate_trend_ = survival_rate_trend;
2150 }
2151
2152 SurvivalRateTrend survival_rate_trend() {
2153 if (survival_rate_trend_ == STABLE) {
2154 return STABLE;
2155 } else if (previous_survival_rate_trend_ == STABLE) {
2156 return survival_rate_trend_;
2157 } else if (survival_rate_trend_ != previous_survival_rate_trend_) {
2158 return FLUCTUATING;
2159 } else {
2160 return survival_rate_trend_;
2161 }
2162 }
2163
2164 bool IsStableOrIncreasingSurvivalTrend() {
2165 switch (survival_rate_trend()) {
2166 case STABLE:
2167 case INCREASING:
2168 return true;
2169 default:
2170 return false;
2171 }
2172 }
2173
2174 bool IsStableOrDecreasingSurvivalTrend() {
2175 switch (survival_rate_trend()) {
2176 case STABLE:
2177 case DECREASING:
2178 return true;
2179 default:
2180 return false;
2181 }
2182 }
2183
2184 bool IsIncreasingSurvivalTrend() {
2185 return survival_rate_trend() == INCREASING;
2186 }
2187
2188 bool IsLowSurvivalRate() { return low_survival_rate_period_length_ > 0; }
2189
2137 // TODO(hpayer): Allocation site pretenuring may make this method obsolete. 2190 // TODO(hpayer): Allocation site pretenuring may make this method obsolete.
2138 // Re-visit incremental marking heuristics. 2191 // Re-visit incremental marking heuristics.
2139 bool IsHighSurvivalRate() { return high_survival_rate_period_length_ > 0; } 2192 bool IsHighSurvivalRate() { return high_survival_rate_period_length_ > 0; }
2140 2193
2141 void ConfigureInitialOldGenerationSize(); 2194 void ConfigureInitialOldGenerationSize();
2142 2195
2196 void ConfigureNewGenerationSize();
2197
2143 void SelectScavengingVisitorsTable(); 2198 void SelectScavengingVisitorsTable();
2144 2199
2145 bool HasLowAllocationRate(size_t allocaion_rate); 2200 bool HasLowAllocationRate(size_t allocaion_rate);
2146 2201
2147 void ReduceNewSpaceSize(size_t allocaion_rate); 2202 void ReduceNewSpaceSize(size_t allocaion_rate);
2148 2203
2149 bool TryFinalizeIdleIncrementalMarking( 2204 bool TryFinalizeIdleIncrementalMarking(
2150 double idle_time_in_ms, size_t size_of_objects, 2205 double idle_time_in_ms, size_t size_of_objects,
2151 size_t mark_compact_speed_in_bytes_per_ms); 2206 size_t mark_compact_speed_in_bytes_per_ms);
2152 2207
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after
2727 DisallowHeapAllocation no_allocation; // i.e. no gc allowed. 2782 DisallowHeapAllocation no_allocation; // i.e. no gc allowed.
2728 2783
2729 private: 2784 private:
2730 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); 2785 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer);
2731 }; 2786 };
2732 #endif // DEBUG 2787 #endif // DEBUG
2733 } 2788 }
2734 } // namespace v8::internal 2789 } // namespace v8::internal
2735 2790
2736 #endif // V8_HEAP_HEAP_H_ 2791 #endif // V8_HEAP_HEAP_H_
OLDNEW
« no previous file with comments | « no previous file | src/heap/heap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698