Multicorejit unification (#48326)
authorGleb Balykov <g.balykov@samsung.com>
Fri, 14 May 2021 00:16:08 +0000 (03:16 +0300)
committerGitHub <noreply@github.com>
Fri, 14 May 2021 00:16:08 +0000 (17:16 -0700)
commit886a02c54fbd51263f2e678c4748504ebd15e90b
tree649c9e9477065b7407d65770c3ffebfbb71e1bdf
parentd156b9e58d7b09f742d4553bb5a94657cf7e28ae
Multicorejit unification (#48326)

* Unify simple and generic methods in multicorejit

* Disable NDirect methods in MulticoreJit

Current multicorejit implementation in master has multiple flaws with NDirect methods:
- exception might be thrown inside GetStubForInteropMethod at some point for NDirect method, which will kill background thread, thus, reducing effectiveness of multicorejit (for example, occurs when multicorejit is used with crossgen2)
- some NDirect methods can lead to asserts during load inside GetStubForInteropMethod (for example, EvpMdCtxDestroy (0x6000044 token) from System.Security.Cryptography.Algorithms.dll)

* Add MultiCoreJitMinNumCpus env variable with default value =2 to configure minimum allowed number of cpus for MultiCoreJit.

On arm with cpu hotplug it should be set to 1.

* Do not save overall record length for methods

This change reduces mcj profile size

* Store non-generic methods using token instead of signatures

This change reduces mcj profile size
src/coreclr/inc/clrconfigvalues.h
src/coreclr/vm/multicorejit.cpp
src/coreclr/vm/multicorejitimpl.h
src/coreclr/vm/multicorejitplayer.cpp