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

Side by Side Diff: src/incremental-marking.h

Issue 10974003: Make the speed of incrmental marking depend also on the rate (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 8 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 void Finalize(); 88 void Finalize();
89 89
90 void Abort(); 90 void Abort();
91 91
92 void MarkingComplete(CompletionAction action); 92 void MarkingComplete(CompletionAction action);
93 93
94 // It's hard to know how much work the incremental marker should do to make 94 // It's hard to know how much work the incremental marker should do to make
95 // progress in the face of the mutator creating new work for it. We start 95 // progress in the face of the mutator creating new work for it. We start
96 // of at a moderate rate of work and gradually increase the speed of the 96 // of at a moderate rate of work and gradually increase the speed of the
97 // incremental marker until it completes. 97 // incremental marker until it completes.
98 // Do some marking every time this much memory has been allocated. 98 // Do some marking every time this much memory has been allocated or this many
99 static const intptr_t kAllocatedThreshold = 65536; 99 // heavy (color-checking) write barriers have been invoked.
100 static const intptr_t kIncrementalMarkingThreshold = 65536;
100 // Start off by marking this many times more memory than has been allocated. 101 // Start off by marking this many times more memory than has been allocated.
101 static const intptr_t kInitialAllocationMarkingFactor = 1; 102 static const intptr_t kInitialMarkingSpeed = 1;
102 // But if we are promoting a lot of data we need to mark faster to keep up 103 // But if we are promoting a lot of data we need to mark faster to keep up
103 // with the data that is entering the old space through promotion. 104 // with the data that is entering the old space through promotion.
104 static const intptr_t kFastMarking = 3; 105 static const intptr_t kFastMarking = 3;
105 // After this many steps we increase the marking/allocating factor. 106 // After this many steps we increase the marking/allocating factor.
106 static const intptr_t kAllocationMarkingFactorSpeedupInterval = 1024; 107 static const intptr_t kMarkingSpeedAccellerationInterval = 1024;
107 // This is how much we increase the marking/allocating factor by. 108 // This is how much we increase the marking/allocating factor by.
108 static const intptr_t kAllocationMarkingFactorSpeedup = 2; 109 static const intptr_t kMarkingSpeedAccelleration = 2;
109 static const intptr_t kMaxAllocationMarkingFactor = 1000; 110 static const intptr_t kMaxMarkingSpeed = 1000;
110 111
111 void OldSpaceStep(intptr_t allocated) { 112 void OldSpaceStep(intptr_t allocated) {
112 Step(allocated * kFastMarking / kInitialAllocationMarkingFactor, 113 Step(allocated * kFastMarking / kInitialMarkingSpeed,
113 GC_VIA_STACK_GUARD); 114 GC_VIA_STACK_GUARD);
114 } 115 }
115 116
116 void Step(intptr_t allocated, CompletionAction action); 117 void Step(intptr_t allocated, CompletionAction action);
117 118
118 inline void RestartIfNotMarking() { 119 inline void RestartIfNotMarking() {
119 if (state_ == COMPLETE) { 120 if (state_ == COMPLETE) {
120 state_ = MARKING; 121 state_ = MARKING;
121 if (FLAG_trace_incremental_marking) { 122 if (FLAG_trace_incremental_marking) {
122 PrintF("[IncrementalMarking] Restarting (new grey objects)\n"); 123 PrintF("[IncrementalMarking] Restarting (new grey objects)\n");
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 } 205 }
205 206
206 MarkingDeque* marking_deque() { return &marking_deque_; } 207 MarkingDeque* marking_deque() { return &marking_deque_; }
207 208
208 bool IsCompacting() { return IsMarking() && is_compacting_; } 209 bool IsCompacting() { return IsMarking() && is_compacting_; }
209 210
210 void ActivateGeneratedStub(Code* stub); 211 void ActivateGeneratedStub(Code* stub);
211 212
212 void NotifyOfHighPromotionRate() { 213 void NotifyOfHighPromotionRate() {
213 if (IsMarking()) { 214 if (IsMarking()) {
214 if (allocation_marking_factor_ < kFastMarking) { 215 if (marking_speed_ < kFastMarking) {
215 if (FLAG_trace_gc) { 216 if (FLAG_trace_gc) {
216 PrintPID("Increasing marking speed to %d " 217 PrintPID("Increasing marking speed to %d "
217 "due to high promotion rate\n", 218 "due to high promotion rate\n",
218 static_cast<int>(kFastMarking)); 219 static_cast<int>(kFastMarking));
219 } 220 }
220 allocation_marking_factor_ = kFastMarking; 221 marking_speed_ = kFastMarking;
221 } 222 }
222 } 223 }
223 } 224 }
224 225
225 void EnterNoMarkingScope() { 226 void EnterNoMarkingScope() {
226 no_marking_scope_depth_++; 227 no_marking_scope_depth_++;
227 } 228 }
228 229
229 void LeaveNoMarkingScope() { 230 void LeaveNoMarkingScope() {
230 no_marking_scope_depth_--; 231 no_marking_scope_depth_--;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 269
269 int steps_count_; 270 int steps_count_;
270 double steps_took_; 271 double steps_took_;
271 double longest_step_; 272 double longest_step_;
272 int64_t old_generation_space_available_at_start_of_incremental_; 273 int64_t old_generation_space_available_at_start_of_incremental_;
273 int64_t old_generation_space_used_at_start_of_incremental_; 274 int64_t old_generation_space_used_at_start_of_incremental_;
274 int steps_count_since_last_gc_; 275 int steps_count_since_last_gc_;
275 double steps_took_since_last_gc_; 276 double steps_took_since_last_gc_;
276 int64_t bytes_rescanned_; 277 int64_t bytes_rescanned_;
277 bool should_hurry_; 278 bool should_hurry_;
278 int allocation_marking_factor_; 279 int marking_speed_;
279 intptr_t bytes_scanned_; 280 intptr_t bytes_scanned_;
280 intptr_t allocated_; 281 intptr_t allocated_;
282 intptr_t write_barriers_invoked_since_last_step_;
281 283
282 int no_marking_scope_depth_; 284 int no_marking_scope_depth_;
283 285
284 DISALLOW_IMPLICIT_CONSTRUCTORS(IncrementalMarking); 286 DISALLOW_IMPLICIT_CONSTRUCTORS(IncrementalMarking);
285 }; 287 };
286 288
287 } } // namespace v8::internal 289 } } // namespace v8::internal
288 290
289 #endif // V8_INCREMENTAL_MARKING_H_ 291 #endif // V8_INCREMENTAL_MARKING_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698