The adaptive controller for the concurrent refinement green zone value (the number of buffers to defer to the update_rs phase of the next pause) could be improved.
The error term that is being controlled is the difference between the desired and actual update_rs time (exclusive of the nested hot card cache scanning time). The controller should adjust the green_zone value to attempt to minimize that error.
The present controller only uses the sign of the error, ignoring its magnitude; it adjusts the old green_zone value up or down by a magic multiplier based on the sign of the error. In order to avoid large changes for small errors, the multipliers are small. One of the consequences is that the multiplication basically does nothing at low thresholds. (This was even worse when the count and thresholds were in units of buffers. The change to using card counts has mitigated this a little bit.)
The calculation also does not take into account that there is always a set of partially filled buffers attached to the threads at GC start."
A better approach might be to use a PID controller. This would provide faster response to phase changes, such as startup from a conservative initial value. It should also produce more stable and predictable control. Other controllers are also possible.