From: Austin Clements Date: Mon, 5 Oct 2015 03:16:07 +0000 (-0700) Subject: runtime: explain why continuous assist revising is necessary X-Git-Tag: go1.6beta1~872 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=39ed682206332cf0ab557b715ec80c9ab2cbba5f;p=gostls13.git runtime: explain why continuous assist revising is necessary Change-Id: I950af8d80433b3ae8a1da0aa7a8d2d0b295dd313 Reviewed-on: https://go-review.googlesource.com/15404 Reviewed-by: Rick Hudson --- diff --git a/src/runtime/mgc.go b/src/runtime/mgc.go index b664d69548..38c3b93850 100644 --- a/src/runtime/mgc.go +++ b/src/runtime/mgc.go @@ -445,9 +445,16 @@ func (c *gcControllerState) startCycle() { // improved estimates. This should be called either under STW or // whenever memstats.heap_scan is updated (with mheap_.lock held). func (c *gcControllerState) revise() { - // Compute the expected scan work. This is a strict upper - // bound on the possible scan work in the current heap. + // Compute the expected scan work. // + // Note that the scannable heap size is likely to increase + // during the GC cycle. This is why it's important to revise + // the assist ratio throughout the cycle: if the scannable + // heap size increases, the assist ratio based on the initial + // scannable heap size may target too little scan work. + // + // This particular estimate is a strict upper bound on the + // possible scan work in the current heap. // You might consider dividing this by 2 (or by // (100+GOGC)/100) to counter this over-estimation, but // benchmarks show that this has almost no effect on mean