-
Notifications
You must be signed in to change notification settings - Fork 17.9k
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
cmd/compile: crash in newliveness in Go 1.6 #15235
Comments
Have you tried Go tip? |
Also, please provide the source code or the source code which generates the source code? If we can't reproduce, it's much less likely we'll fix it. |
I will try to produce a public version. go tip all.bash fails with a race condition for me, but make.bash was successful. Trying go tip it actually doesn't complete compiling the code and hangs.
|
Please try instead:
and get a stack trace from that. Most of the stack trace pasted is from the go tool, not from the compiler. Also, if possible, try generating a 1k or 5k or 10k or 50k or 100k line slice literal and see whether it completes, albeit slowly. If so, we could get a cpu profile out. If I had to guess, I'd say that the culprit is CSE, and that this is going to be a duplicate of #15112. |
Steps to reproduce:
50000 map entries seems to be the tipping point for me on my hardware at least. It was successful at 45000 although it took 3m10s to compile. My apologies, it wasn't a slice literal but a map[string]struct{string,int,[]string} literal |
Thanks! I have some WIP for #15112 that I'll try out on this as well. May take me a day or three. |
Great, thank you. +944a085 did compile a 50000 entry version in 85 minutes :) |
CL https://golang.org/cl/21937 mentions this issue. |
runtime.newobject never returns the same thing twice, so the resulting value will never be a common subexpression. This helps when compiling large static data structures that include pointers, such as maps and slices. No clear performance impact on other code. (See below.) For the code in issue #15112: Before: real 1m14.238s user 1m18.985s sys 0m0.787s After: real 0m47.172s user 0m52.248s sys 0m0.767s For the code in issue #15235, size 10k: Before: real 0m44.916s user 0m46.577s sys 0m0.304s After: real 0m7.703s user 0m9.041s sys 0m0.316s Still more work to be done, particularly for #15112. Updates #15112 Updates #15235 name old time/op new time/op delta Template 330ms ±11% 333ms ±13% ~ (p=0.749 n=20+19) Unicode 148ms ± 6% 152ms ± 8% ~ (p=0.072 n=18+20) GoTypes 1.01s ± 7% 1.01s ± 3% ~ (p=0.583 n=20+20) Compiler 5.04s ± 2% 5.06s ± 2% ~ (p=0.314 n=20+20) name old user-ns/op new user-ns/op delta Template 444user-ms ±11% 445user-ms ±10% ~ (p=0.738 n=20+20) Unicode 215user-ms ± 5% 218user-ms ± 5% ~ (p=0.239 n=18+18) GoTypes 1.45user-s ± 3% 1.45user-s ± 4% ~ (p=0.620 n=20+20) Compiler 7.23user-s ± 2% 7.22user-s ± 2% ~ (p=0.901 n=20+19) name old alloc/op new alloc/op delta Template 55.0MB ± 0% 55.0MB ± 0% ~ (p=0.547 n=20+20) Unicode 37.6MB ± 0% 37.6MB ± 0% ~ (p=0.301 n=20+20) GoTypes 177MB ± 0% 177MB ± 0% ~ (p=0.065 n=20+19) Compiler 798MB ± 0% 797MB ± 0% -0.05% (p=0.000 n=19+20) name old allocs/op new allocs/op delta Template 492k ± 0% 493k ± 0% +0.03% (p=0.030 n=20+20) Unicode 377k ± 0% 377k ± 0% ~ (p=0.423 n=20+19) GoTypes 1.40M ± 0% 1.40M ± 0% ~ (p=0.102 n=20+20) Compiler 5.53M ± 0% 5.53M ± 0% ~ (p=0.094 n=17+18) name old text-bytes new text-bytes delta HelloSize 561k ± 0% 561k ± 0% ~ (all samples are equal) CmdGoSize 6.13M ± 0% 6.13M ± 0% ~ (all samples are equal) name old data-bytes new data-bytes delta HelloSize 128k ± 0% 128k ± 0% ~ (all samples are equal) CmdGoSize 306k ± 0% 306k ± 0% ~ (all samples are equal) name old exe-bytes new exe-bytes delta HelloSize 905k ± 0% 905k ± 0% ~ (all samples are equal) CmdGoSize 9.64M ± 0% 9.64M ± 0% ~ (all samples are equal) Change-Id: Id774e2901d7701a3ec7a1c1d1cf1d9327a4107fc Reviewed-on: https://go-review.googlesource.com/21937 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Todd Neal <todd@tneal.org>
If you would, please give tip a try on your private code. CSE is still the bottleneck, but it should be much faster than it was. I don't see any clear further steps on this, so if the performance is workable for you, please close this issue. If not, leave it open and add updated performance numbers, and perhaps someone else will take it from here. |
Wow, great change! I'm now compiling my private code successfully in 1m21s and the 50000 sample version compiles in 5m32s! Great work! 85 to 5 :) Thank you! |
Please answer these questions before submitting your issue. Thanks!
go version
)?go version go1.6 linux/amd64
go 1.5 also fails but go 1.4 compiles the code successfully
go env
)?I used a shell script to generate some code, specifically a large ~200,000 line slice literal. Code is not public and I have not yet been able to reduce it.
The code to build successfully.
The text was updated successfully, but these errors were encountered: