Remove defer for improved inlining in v1.20+ using PGO #218
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.
Go launched Profile-Guided Optimization (PGO) with v1.20.
With this, inlining optimization now uses a threshold called
inlineHotMaxBudget
which has a default value of 2000 for PGO-based inlining [Line 76, inl.go]. This will enable more inling. However, inlining continues not to work if a function/method containsdefer
statements [Line 619, inl.go]This PR eliminates many
defer
constructs inscope.go
andscope_registry.go
in order to enable more inlining. For example, smaller functions such asscope::counter(sanitizedName string)
andscope::gauge(name string)
should be inlined after removingdefer
s in them.I should also mention that I have gone to the extreme in removing many
defer
s. We should vet all the changes keeping in mindpanic
behaviors and make sure they are correct before merging this PR.