RESOLVED FIXED 167528
The mutator should be able to perform increments of GC work
https://bugs.webkit.org/show_bug.cgi?id=167528
Summary The mutator should be able to perform increments of GC work
Filip Pizlo
Reported 2017-01-27 14:31:28 PST
If you don't have a lot of cores, then running the GC in a purely concurrent way can be bad: you won't make enough progress to keep pace with the mutator's allocations. Fortunately, Riptide has most of what we need to run increments of GC work on the mutator thread. This is the most natural way to pace the mutator, since it forces the mutator to do GC work anytime it allocates.
Attachments
work in progress (16.12 KB, patch)
2017-01-27 14:32 PST, Filip Pizlo
no flags
possibly better version (32.46 KB, patch)
2017-01-30 16:17 PST, Filip Pizlo
no flags
the patch (36.53 KB, patch)
2017-01-31 10:57 PST, Filip Pizlo
keith_miller: review+
Filip Pizlo
Comment 1 2017-01-27 14:32:29 PST
Created attachment 299962 [details] work in progress
Filip Pizlo
Comment 2 2017-01-30 16:17:34 PST
Created attachment 300158 [details] possibly better version
Filip Pizlo
Comment 3 2017-01-31 10:57:55 PST
Created attachment 300235 [details] the patch
Keith Miller
Comment 4 2017-01-31 12:08:38 PST
Comment on attachment 300235 [details] the patch View in context: https://bugs.webkit.org/attachment.cgi?id=300235&action=review r=me. > Source/JavaScriptCore/heap/SlotVisitor.cpp:552 > + if (status == IterationStatus::Continue) > + break; Using IterationStatus::Continue to signal we have no more work to do is confusing but I guess that's the pattern. > Source/WTF/wtf/DataLog.cpp:131 > + s_file = new (s_lockedFileData) LockedPrintStream(std::unique_ptr<FilePrintStream>(file)); oh wow...
Filip Pizlo
Comment 5 2017-01-31 12:10:22 PST
(In reply to comment #4) > Comment on attachment 300235 [details] > the patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=300235&action=review > > r=me. > > > Source/JavaScriptCore/heap/SlotVisitor.cpp:552 > > + if (status == IterationStatus::Continue) > > + break; > > Using IterationStatus::Continue to signal we have no more work to do is > confusing but I guess that's the pattern. It's unfortunate. I will we had generators. It's actually so confusing here: we say "Continue" to tell the forEachBlah to go to the next mark stack. We do that when the mark stack we were at had no work. So, if forEachBlah returns Continue then no mark stack had work. Hence, if it says Continue, we break. > > > Source/WTF/wtf/DataLog.cpp:131 > > + s_file = new (s_lockedFileData) LockedPrintStream(std::unique_ptr<FilePrintStream>(file)); > > oh wow...
Geoffrey Garen
Comment 6 2017-01-31 12:31:27 PST
Comment on attachment 300235 [details] the patch r=me > Source/JavaScriptCore/ChangeLog:24 > + precise at keeping case as the new work-based incremental mode. keeping pace > Source/JavaScriptCore/ChangeLog:33 > + each other is a huge splay-latency speed-up on my iPad. It's also a CDjs progression. It does > + progress splay-throughput, but I think that's fine (the regression is 11%, the progression is did you mean *regress* splay-throughput?
Filip Pizlo
Comment 7 2017-01-31 12:33:04 PST
(In reply to comment #6) > Comment on attachment 300235 [details] > the patch > > r=me > > > Source/JavaScriptCore/ChangeLog:24 > > + precise at keeping case as the new work-based incremental mode. > > keeping pace Fixed. > > > Source/JavaScriptCore/ChangeLog:33 > > + each other is a huge splay-latency speed-up on my iPad. It's also a CDjs progression. It does > > + progress splay-throughput, but I think that's fine (the regression is 11%, the progression is > > did you mean *regress* splay-throughput? Yes. Fixed.
Filip Pizlo
Comment 8 2017-01-31 14:33:06 PST
Note You need to log in before you can comment on or make changes to this bug.