-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
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
Support for linux/arm64 (ARMv8, aarch64) #466
Comments
test fails; looking into this:
|
Run from command line works just fine - at least the server comes up. Is there a particularly good client you'd recommend to exercise the server, @kozlovic ? Happy to bash on it to see if I can trigger whatever this issue is. |
Just realized that it worked for
|
The |
With
|
Looking in a little more detail, here are all of the error messages:
|
You may want to try with a newer version of Go, just to make sure. |
Oh, that's because the timeouts are too small. |
Let me see in which place you would have to increase this timeout to make sure that's only that. |
Two things you could try:
And
Could you please try and report back? |
Single test still fails:
My version of Go is 1.6.3 which is older than the one you recommend; I'll report back separately testing under Go 1.8.
|
When you ran the test, have you override the timeouts? For that test specifically, if you do not want to tweak the code, you can modify the config file used in this test:
Change both |
Wtih longer timeouts, the 10 second times patched in above into client.c and server.c, we pass a test:
|
Ok, now the problem re-running the whole test suite with the override is that you may then get some test failures because the test expect the timeout to occur say within 2 seconds. But we should be able to figure out if that's the case based on the test name. |
All the TLS tests now pass, but there's one test that fails:
The code in auth_test.go:80 reads // This is timing dependent..
time.Sleep(server.AUTH_TIMEOUT) |
Yes, like I said. So it means that the only failures you got were due to timeout. What surprises me is that you go the failures in the first place. Even with current values (sometimes as low as 0.5 is some config files), it works even when running the suite on Travis, which sometimes is way slower than when we run on our personal laptops. So it is a bit surprising considering the spec of your machine? |
The timeouts are very surprising given the spec of the machine. I'm going to rebuild with Go 1.8 next, because I know I've seen speed improvements overall with that, and maybe that is enough to help. With one failed test, I get this as an overall test time:
and it looks like the last log on Travis runs the same tests in
|
With Go 1.8 it fails a little faster
still failing in
I'm sure that's because Go is using software crypto on arm64, rather than the hardware instructions on the chip. The |
Nope, gnatsd doesn't use the I'll chase this upstream, for the moment let's mark this issue as "on hold", and I'll work to get a performance improvement. |
Go 1.9 beta 1 is out and has a binary build for ARM64 (yay). According to the referenced issue golang/go#19840 the opportunity for this particular performance issue to be resolved in Go for ARM will come in the Go 1.10 timeframe. However there may be other performance improvements in Go 1.9 so that's worth a quick test. |
Is it possible for you to summarise the state of the aarch64 server build, we are very interested in using it on our embedded aarch64 platform as a control plane enabler. |
@salerio - what are the specs for your aarch64 platform? The concern expressed above was that some of the crypto instruction in Go on aarch64 are not hardware accelerated, and that the soft versions of the algorithms have poor performance on one system (Cavium ThunderX). |
Its a Xilinx UltraScale+ MPSoC which has 4 x Cortex-A53 CPU complex. Although there are crypto accelerators in the SoC I doubt anyone (any standard software that is) will make sure of them yet as the part is very new. See https://www.xilinx.com/products/silicon-devices/soc/zynq-ultrascale-mpsoc.html |
@ghost does this MPSoC from Xilinx have an FPGA in it? |
Go 1.11beta1 is out, I would like to test performance with it. |
We would be interested in what you find, keep us posted. |
Thanks @derekcollison I have opened up #695 to address the question of "how do you test performance". |
Thanks. |
OS/Container environment:
ARMv8 server is a Packet 2A (Cavium ThunderX, 96-core at 2 Ghz)
Steps or code to reproduce the issue:
Expected result:
linux-arm64 supported release
Actual result:
No files found.
As of 2017-04-04, build works fine, tests fail until timeouts are extended, and we've identified a performance issue on ARMv8 Go 1.8
crypto/tls
. Further work pending Go performance improvements on ARMv8.Feature Requests
Use Case:
Two use cases: one for ARMv8 single-board computers (e.g. Raspberry Pi 3, Odroid C2, Pine64); another for ARMv8 in the data center (e.g. Cavium ThunderX).
Proposed Change:
Build and test for arm64, validate that it works, add as supported release.
Who Benefits From The Change(s)?
Users of arm64 (ARMv8) platforms as listed above.
Alternative Approaches
Planning to build from source and see how that goes; I'll use this issue to identify anything that comes up.
The text was updated successfully, but these errors were encountered: