[release/7.0] fix lower heap hard limit condition for regions #76588
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Backport of #76407 to release/7.0
/cc @mangod9
Customer Impact
This fixes a customer reported issue here: #76199, where in the docker config specifies a memory limit (something under 512mb) but with unbound cpu, the GC correctly scales down the number of heaps, but each heap still has a minimum size of 4mb (region_size) * 19 (min_regions_per_heap). This causes an initialization failure since the memory reservation size is 2 * heap_hard_limit. We have now increased this to 5x and also dynamically adjust region size to 4, 2 or 1mb. With this change we are now at par with segments and support very low heap_hard_limits (4mb minimum, which is able to run a simple webapi app)
Testing
validated in local experiments that a heap_hard_limit of as low as 4mb can now be specified, which is similar to what it was with segments. We also adjusted the reservation size when per heap hard_limit is specified
Risk
low, only should affect scenarios where memory hard limit is low. It only affects reservation size, but actual committed sizes should be equivalent.
IMPORTANT: Is this backport for a servicing release? If so and this change touches code that ships in a NuGet package, please make certain that you have added any necessary package authoring and gotten it explicitly reviewed.