- Notifications
You must be signed in to change notification settings - Fork5.1k
Change allocation ofMethodData
structures to do less unnecessary work#96857
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Merged
davidwrighton merged 7 commits intodotnet:mainfromdavidwrighton:tweak_methoddataobject_allocation_pathJan 25, 2024
Merged
Change allocation ofMethodData
structures to do less unnecessary work#96857
davidwrighton merged 7 commits intodotnet:mainfromdavidwrighton:tweak_methoddataobject_allocation_pathJan 25, 2024
Uh oh!
There was an error while loading.Please reload this page.
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
- Compute exact amount of memory to allocate- Only generate data for virtuals in most cases
…aobject_allocation_path
…ompute MethodData at all
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
…, and interfaces always only expose virtuals in the MethodData
3 tasks
2 tasks
AaronRobinsonMSFT approved these changesJan 25, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account?Sign in.
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.
While debugging performance issues with process startup from a customer, I noticed that we spent a measurable amount of time in the OS memory allocator allocating the memory for
MethodData
structures.I found a couple of things
MethodDataObject
structures that contained information about all methods (including non-virtuals) when most uses within the type loader were both non-cacheable creations, and ignored all non-virtual functions.MethodDataObject
or one that only had virtuals in it.MethodDataInterfaceImpl
structures we were allocating it based on the number of methods on the type, but we were only utilizing the memory associated with the number of virtuals on the type. Change to allocate the correct size.MethodData
if it existed in the cache, and update the cached copy. Adjust the path so that it can avoid allocating theMethodData
at all in that case.