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

Unified Diff: src/heap/heap.cc

Issue 1167563005: Make old generation allocation throughput stats independent from the new space allocation throughpu… (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: cast 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/heap/heap.h ('k') | src/heap/mark-compact.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap/heap.cc
diff --git a/src/heap/heap.cc b/src/heap/heap.cc
index 37eb00485f7ae463aadeb41b3a5d3a6b4143a70b..f2783cf48297e0c26e35cb2169153e008e02e301 100644
--- a/src/heap/heap.cc
+++ b/src/heap/heap.cc
@@ -470,7 +470,6 @@ void Heap::GarbageCollectionPrologue() {
}
CheckNewSpaceExpansionCriteria();
UpdateNewSpaceAllocationCounter();
- UpdateOldGenerationAllocationCounter();
}
@@ -738,8 +737,7 @@ void Heap::GarbageCollectionEpilogue() {
new_space_top_after_last_gc_ = new_space()->top();
last_gc_time_ = MonotonicallyIncreasingTimeInMs();
- ReduceNewSpaceSize(
- tracer()->CurrentAllocationThroughputInBytesPerMillisecond());
+ ReduceNewSpaceSize();
}
@@ -1214,18 +1212,19 @@ bool Heap::PerformGarbageCollection(
}
if (collector == MARK_COMPACTOR) {
+ UpdateOldGenerationAllocationCounter();
// Perform mark-sweep with optional compaction.
MarkCompact();
sweep_generation_++;
old_gen_exhausted_ = false;
old_generation_size_configured_ = true;
+ // This should be updated before PostGarbageCollectionProcessing, which can
+ // cause another GC.
+ old_generation_size_at_last_gc_ = PromotedSpaceSizeOfObjects();
} else {
Scavenge();
}
- // This should be updated before PostGarbageCollectionProcessing, which can
- // cause another GC.
- old_generation_size_at_last_gc_ = PromotedSpaceSizeOfObjects();
UpdateSurvivalStatistics(start_new_space_size);
ConfigureInitialOldGenerationSize();
@@ -4509,15 +4508,38 @@ void Heap::MakeHeapIterable() {
}
-bool Heap::HasLowAllocationRate(size_t allocation_rate) {
- static const size_t kLowAllocationRate = 1000;
- if (allocation_rate == 0) return false;
- return allocation_rate < kLowAllocationRate;
+bool Heap::HasLowYoungGenerationAllocationRate() {
+ const double high_mutator_utilization = 0.995;
+ double mutator_speed = static_cast<double>(
+ tracer()->NewSpaceAllocationThroughputInBytesPerMillisecond());
+ double gc_speed =
+ static_cast<double>(tracer()->ScavengeSpeedInBytesPerMillisecond());
+ if (mutator_speed == 0 || gc_speed == 0) return false;
+ double mutator_utilization = gc_speed / (mutator_speed + gc_speed);
+ return mutator_utilization > high_mutator_utilization;
}
-void Heap::ReduceNewSpaceSize(size_t allocation_rate) {
- if (!FLAG_predictable && HasLowAllocationRate(allocation_rate)) {
+bool Heap::HasLowOldGenerationAllocationRate() {
+ const double high_mutator_utilization = 0.995;
+ double mutator_speed = static_cast<double>(
+ tracer()->OldGenerationAllocationThroughputInBytesPerMillisecond());
+ double gc_speed = static_cast<double>(
+ tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond());
+ if (mutator_speed == 0 || gc_speed == 0) return false;
+ double mutator_utilization = gc_speed / (mutator_speed + gc_speed);
+ return mutator_utilization > high_mutator_utilization;
+}
+
+
+bool Heap::HasLowAllocationRate() {
+ return HasLowYoungGenerationAllocationRate() &&
+ HasLowOldGenerationAllocationRate();
+}
+
+
+void Heap::ReduceNewSpaceSize() {
+ if (!FLAG_predictable && HasLowAllocationRate()) {
new_space_.Shrink();
UncommitFromSpace();
}
@@ -4573,11 +4595,9 @@ GCIdleTimeHandler::HeapState Heap::ComputeHeapState() {
heap_state.new_space_capacity = new_space_.Capacity();
heap_state.new_space_allocation_throughput_in_bytes_per_ms =
tracer()->NewSpaceAllocationThroughputInBytesPerMillisecond();
- heap_state.current_allocation_throughput_in_bytes_per_ms =
- tracer()->CurrentAllocationThroughputInBytesPerMillisecond();
+ heap_state.has_low_allocation_rate = HasLowAllocationRate();
intptr_t limit = old_generation_allocation_limit_;
- if (HasLowAllocationRate(
- heap_state.current_allocation_throughput_in_bytes_per_ms)) {
+ if (heap_state.has_low_allocation_rate) {
limit = idle_old_generation_allocation_limit_;
}
heap_state.can_start_incremental_marking =
« no previous file with comments | « src/heap/heap.h ('k') | src/heap/mark-compact.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698