Fix budgets for dynamic heap count and add smoothing to overhead computation (#87618)
authorPeter Sollich <petersol@microsoft.com>
Wed, 28 Jun 2023 10:41:10 +0000 (12:41 +0200)
committerGitHub <noreply@github.com>
Wed, 28 Jun 2023 10:41:10 +0000 (12:41 +0200)
commita355d5f7db162714ee19533ca55074aa2cbd8a8c
tree2b2debd9a3a7d03ada3df5c66ca9812926473112
parent293b250c9e6195a094422f4dacbd395087bcd5f3
Fix budgets for dynamic heap count and add smoothing to overhead computation (#87618)

When changing heap counts, we used to keep the budgets per heap constant - the heaps coming into service would just inherit the budgets from heap 0. Testing shows this to be inappropriate, as it causes short term peaks in memory consumption when heap count increases quickly.

It seems more appropriate therefore to keep total budget (over all heaps) constant, and, similarly, apply exponential smoothing to the total budgets, not the per-heap-budgets.

During investigation, it was found that a few more fields in the dynamic_data_table need to be initialized or recomputed when heaps are coming into service.

We also found that sometimes heap counts are changed due to small temporary fluctuations in measured GC overhead. The fix is to use a smoothed value to make decisions in situation where the estimated performance difference is small, but keep the median-of-three estimate where it shows a big difference, so we can still react fast in that situation.
src/coreclr/gc/gc.cpp
src/coreclr/gc/gcpriv.h