From 39ed682206332cf0ab557b715ec80c9ab2cbba5f Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Sun, 4 Oct 2015 20:16:07 -0700 Subject: [PATCH] runtime: explain why continuous assist revising is necessary Change-Id: I950af8d80433b3ae8a1da0aa7a8d2d0b295dd313 Reviewed-on: https://go-review.googlesource.com/15404 Reviewed-by: Rick Hudson --- src/runtime/mgc.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 -- 2.50.0