Closed Bug 1005396 Opened 10 years ago Closed 10 years ago

Only do ScanAndCollectWhitePhase at the start of a slice

Categories

(Core :: XPCOM, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla32

People

(Reporter: mccr8, Assigned: mccr8)

References

(Blocks 1 open bug)

Details

Attachments

(1 file, 1 obsolete file)

One problem I noticed with ICC is that we can spend most of our 10ms slice, say 8ms, on MarkRoots, then we run ScanRoots() and CollectWhite(), which have to be run atomically, which can easily take 5ms or more, and we end up blowing our time budget.

A simple way to deal with this issue is to just stop the current slice if we have run MarkRoots() to completion, and we're in at least the, say, third slice.  The latter condition ensures that for short CCs we don't end up using multiple slices for no good reason.

This could be made a little more sophisticated by seeing how much time we've actually run so far, and coming up with some heuristic for when we want to do this. If we're only 1ms into a slice, maybe we're okay with starting unlinking, but if we're 6ms, maybe not.

Anyways, with this crude rule in place, and the Lazy Rule Destroyer (bug 861449) the max CC pause I'm seeing in an opt debug build is 11ms, and that's from a MarkRoots slice, so we could probably lower it further easily.
That needs to be fixed so that it properly deals with the unlimited budget case.

Also, it looks like 11ms is about how long the Scan/CollectWhite slice takes, so lowering the budget doesn't reduce max pause any.
This would also be good to do for the Scan/CollectWhite slice, as graph cleanup can take a millisecond or two, so it might as well be shifted to the next slice.  With the Lazy Content Destroyer and my patch to speed up ScanRoots(), this slice is only taking something like 4ms, so it is possible it won't blow the budget by itself, and we could end up blowing the budget with the cleanup phase.  Of course, the cleanup phase could also be made incremental without too much trouble.
Blocks: 1005685
Depends on: 1009118
try run: https://tbpl.mozilla.org/?tree=Try&rev=6aa15826b120

I'll probably wait a few days to land this, to let the telemetry from bug 1005500
to settle down a bit.

I decided to not bother doing the same thing for the transition from the Scan+CollectWhite
phase to the Finish phase, because the Finish phase doesn't take more than a ms or two,
and if we're doing a lot of stuff, we've probably exceeded the budget with Scan+Collect
already so it doesn't matter.
Attachment #8421803 - Flags: review?(bugs)
Attachment #8416800 - Attachment is obsolete: true
Attachment #8421803 - Flags: review?(bugs) → review+
https://hg.mozilla.org/mozilla-central/rev/00893ce2203c
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla32
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: