When doing a superpmi replay using a Checked build, superpmi takes about 10% of replay time. The highest times are:
MethodContext::MethodInitHelper. This 'new's the LightWeightMap structure and also reads data into each map
free
MethodContext::Destroy. This just runs delete on the maps
RtlFreeHeap. called from superpmi operator delete
It looks like there could be throughput wins if we implemented an arena allocator that was more efficient with allocations (e.g., allocate large blocks from the OS, and reuse them) and more efficient with deallocation (simply free/reuse the entire arena; we never need to do partial deletes). Maybe steal/modify the JIT ArenaAllocator?
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.
Issue Details
When doing a superpmi replay using a Checked build, superpmi takes about 10% of replay time. The highest times are:
- `MethodContext::MethodInitHelper`. This 'new's the LightWeightMap structure and also reads data into each map
- `free`
- `MethodContext::Destroy`. This just runs `delete` on the maps
- `RtlFreeHeap`. called from superpmi operator delete
It looks like there could be throughput wins if we implemented an arena allocator that was more efficient with allocations (e.g., allocate large blocks from the OS, and reuse them) and more efficient with deallocation (simply free/reuse the entire arena; we never need to do partial deletes). Maybe steal/modify the JIT ArenaAllocator?
category:eng-sys
theme:super-pmi
skill-level:intermediate
cost:medium
impact:meduim
When doing a superpmi replay using a Checked build, superpmi takes about 10% of replay time. The highest times are:
MethodContext::MethodInitHelper
. This 'new's the LightWeightMap structure and also reads data into each mapfree
MethodContext::Destroy
. This just runsdelete
on the mapsRtlFreeHeap
. called from superpmi operator deleteIt looks like there could be throughput wins if we implemented an arena allocator that was more efficient with allocations (e.g., allocate large blocks from the OS, and reuse them) and more efficient with deallocation (simply free/reuse the entire arena; we never need to do partial deletes). Maybe steal/modify the JIT ArenaAllocator?
category:eng-sys theme:super-pmi skill-level:intermediate cost:medium impact:meduim