-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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 our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GCStress works slower with R2R on tests with deep recursion. #11947
Comments
Actually maybe it is a CodeGen issue if we use TailCall in one case and don't in the other. Let me check. |
Yes, the difference is that we do not do tail call optimization for crossgen. I think it is by design that |
…22340) Fixes #20460. See issue #22339.
@janvorli has been working on a new design for tail calls. I don't think that this feature will be implemented for .NET Core 3.0. |
This still takes a long time even with CrossGen2. Resetting the issue state to be triaged again. |
#35423 tracks R2R support for tail calls. |
Do we only run gcstress for x64/arm64 on this test? It's unclear to me why it wouldn't hit the same slowness on x86/arm32 that do not support fast tailcalls, regardless of crossgen. FWIW we do support fast tailcalls with crossgen2 now after #56669, so this issue is probably fixed. But would like to understand why we only see the slowness with crossgen if this is due to fast tailcalls. |
That issue came from #11252, there we hit timeout when run b
aseservices\exceptions\regressions\V1\SEH\VJ\RecursiveException
withGCStress=0xf
andRunCrossGen=1
. The issue doesn't repro when you do not run CrossGen.The small repro is to run this test with
GCStress=0x2
andRunCrossGen=1
, on my machine it takes ~3 mins, the run withoutRunCrossGen=1
takes 2 secs.a small repro:
run with
GCStress=0x2, RunCrossGen=1, TieredCompilation=0
:Finish recurse 3077, 3083, 3083
and It takes ~70 seconds.run
GCStress=0x2, RunCrossGen=0, TieredCompilation=0
:Finish recurse 3110, 3116, 3116
and it takes ~2 seconds.So with the same number of GC collections each takes much longer when we use CrossGen.
Xperf shows strange results (for example for both runs it shows 0 GC cpu time:
functions that are in top of exclusively time are:
that are expensive functions but it looks like we call them more often when use
RunCrossGen=1
and it is not clear why.All steps are for checked x64, release generates different code and numbers there are different.
I was not able to repro this issue without
GCStress
(with manual calls toGC.Collect()
).I think it is a R2R or GCStress issue, @sergiy-k PTAL.
cc @dotnet/jit-contrib, @Maoni0, @davidwengier .
The text was updated successfully, but these errors were encountered: