Egor Bogatov
Egor Bogatov
Ah looks like my approach to check whether we compile from R2R is wrong ``` Assert failure(PID 31732 [0x00007bf4], Thread: 43456 [0xa9c0]): !MethodDescBackpatchInfoTracker::IsLockOwnedByCurrentThread() || IsInForbidSuspendForDebuggerRegion() CORECLR! Thread::RareDisablePreemptiveGC + 0x131 (0x00007ff8`deafb481)...
So far I don't see any errors in the logs but it seems in a highly concurrent environment (I managed to create a small repro) it stops promoting such methods...
Looks like the problem that I have to reset callcounting cell, change its stub and its state to keep it alive. or the way it is implemented now it ends...
Correct me if I am wrong but here is what happening: Imagine A() calls B() which is R2R'd: ``` A() -> [precode] -> [callcounting] -> R2R'd B() ``` after 30...
> When I was doing tiered compilation originally one of the benchmarks I found helpful was [MusicStore](https://github.com/aspnet/MusicStore) and I had the app measure its own latency for requests 0-500, 501-1000,...
Just realized that I can also introduce a new tier for non-r2r cases: ``` tier0 -> instrumented tier0 -> tier1 ``` This solves a different problem that we have now...
For FullPGO mode where we don't have R2R my prototype shows +10% improvement for "Startup time + time to first request" while maintaining the same RPS as expected. Something like...
## `DOTNET_TieredPGO=1` ``` | application | eeeg_plaintext_mvc_Pgo_0_base | eeeg_plaintext_mvc_Pgo_0_diff | | | --------------------- | ----------------------------- | ----------------------------- | ------ | | CPU Usage (%) | 99 | 100 | +1.01%...
New workflow (hello, [github mermaid!](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/)): - moved to https://github.com/dotnet/runtime/pull/70941#issuecomment-1163471136 The only problem that we don't instrument tier0 methods with loops so when we decide to do OSR for a loop...
I assume what you suggest looks like this: ```mermaid graph TD prestub(.NET Function) --> hasAO{"Marked with[AggressiveOpts]?"} hasAO-->|Yes|tier1ao[JIT to Tier1] hasAO-->|No|hasR2R hasR2R{"Is AOT'd (R2R)"?} -->|No| tier0[JIT to Tier0] tier0 --> osr{Is...