summary refs log tree commit diff stats
path: root/results/classifier/108/other/1763536
diff options
context:
space:
mode:
Diffstat (limited to 'results/classifier/108/other/1763536')
-rw-r--r--results/classifier/108/other/1763536167
1 files changed, 167 insertions, 0 deletions
diff --git a/results/classifier/108/other/1763536 b/results/classifier/108/other/1763536
new file mode 100644
index 00000000..6c647f0f
--- /dev/null
+++ b/results/classifier/108/other/1763536
@@ -0,0 +1,167 @@
+other: 0.852
+vnc: 0.824
+performance: 0.817
+PID: 0.772
+device: 0.751
+KVM: 0.741
+files: 0.738
+graphic: 0.731
+socket: 0.731
+debug: 0.726
+semantic: 0.724
+permissions: 0.720
+network: 0.639
+boot: 0.636
+
+go build fails under qemu-ppc64le-static (qemu-user)
+
+I am using qemu-user (built static) in a docker container environment.  When running multi-threaded go commands in the container (go build for example) the process may hang, report segfaults or other errors.  I built qemu-ppc64le from the upstream git (master).
+
+I see the problem running on a multi core system with Intel i7 processors.
+# cat /proc/cpuinfo | grep "model name"
+model name	: Intel(R) Core(TM) i7-2760QM CPU @ 2.40GHz
+model name	: Intel(R) Core(TM) i7-2760QM CPU @ 2.40GHz
+model name	: Intel(R) Core(TM) i7-2760QM CPU @ 2.40GHz
+model name	: Intel(R) Core(TM) i7-2760QM CPU @ 2.40GHz
+model name	: Intel(R) Core(TM) i7-2760QM CPU @ 2.40GHz
+model name	: Intel(R) Core(TM) i7-2760QM CPU @ 2.40GHz
+model name	: Intel(R) Core(TM) i7-2760QM CPU @ 2.40GHz
+model name	: Intel(R) Core(TM) i7-2760QM CPU @ 2.40GHz
+
+Steps to reproduce:
+1) Build qemu-ppc64le as static and copy into docker build directory named it qemu-ppc64le-static.
+
+2) Add hello.go to docker build dir.
+
+package main
+import "fmt"
+func main() {
+	fmt.Println("hello world")
+}
+
+3) Create the Dockerfile from below:
+
+FROM ppc64le/golang:1.10.1-alpine3.
+COPY qemu-ppc64le-static /usr/bin/
+COPY hello.go /go
+
+4) Build container
+$ docker build -t qemutest -f Dockerfile ./go 
+
+5) Run test
+$ docker run -it qemutest
+
+/go # /usr/bin/qemu-ppc64le-static --version
+qemu-ppc64le version 2.11.93 (v2.12.0-rc3-dirty)
+Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers
+
+/go # go version
+go version go1.10.1 linux/ppc64le
+
+/go # go build hello.go
+fatal error: fatal error: stopm holding locksunexpected signal during runtime execution
+
+panic during panic
+[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1003528c]
+
+runtime stack:
+runtime: unexpected return pc for syscall.Syscall6 called from 0xc42007f500
+stack: frame={sp:0xc4203be840, fp:0xc4203be860} stack=[0x4000b7ecf0,0x4000b928f0)
+
+syscall.Syscall6(0x100744e8, 0x3d, 0xc42050c140, 0x20, 0x18, 0x10422b80, 0xc4203be968[signal , 0x10012d88SIGSEGV: segmentation violation, 0xc420594000 code=, 0x00x1 addr=0x0 pc=0x1003528c)
+]
+
+runtime stack:
+	/usr/local/go/src/syscall/asm_linux_ppc64x.s:61runtime.throw(0x10472d19, 0x13)
+ +	/usr/local/go/src/runtime/panic.go:0x6c616 +0x68
+
+
+runtime.stopm()
+	/usr/local/go/src/runtime/proc.go:1939goroutine  +10x158
+ [runtime.exitsyscall0semacquire(0xc42007f500)
+	/usr/local/go/src/runtime/proc.go:3129 +]:
+0x130
+runtime.mcall(0xc42007f500)
+	/usr/local/go/src/runtime/asm_ppc64x.s:183 +0x58sync.runtime_Semacquire
+(0xc4201fab1c)
+	/usr/local/go/src/runtime/sema.go:56 +0x38
+
+----
+Note the results may differ between attempts,  hangs and other faults sometimes happen.
+----
+If I run "go: single threaded I don't see the problem, for example:
+
+/go # GOMAXPROCS=1 go build -p 1 hello.go 
+/go # ./hello
+hello world
+
+I see the same issue with arm64.  I don't think this is a go issue, but don't have a real evidence to prove that.  This problem looks similar to other problem I have seen reported against qemu running multi-threaded applications.
+
+I missed a step for reproduction.  Step 1 should be:
+docker run --rm --privileged multiarch/qemu-user-static:register
+This modprobes binfmt and registers qemu-ppc64le-static as the interpreter for ppc64le executables.
+
+FYI: To workaround this issue you can limit the docker container to a single cpu like this:
+
+docker run --cpuset-cpus 0 -it cross-test3 go build hello.go
+
+This works for docker build as well.
+
+docker build--cpuset-cpus 0 .....
+
+Do you have a simpler repro case (ie one that doesn't require docker) ?
+
+
+I will attempt to find an way to re-create without docker.  The key is we need a way to create a ppc64le (or arm64) fakeroot with go that we can chroot into.  That is easy to do with docker.  BTW: the use case using docker and qemu-user-static is becoming fairly common way to cross build container images.
+
+I care more about the arm64 case, so if you're going to do one then that would be my preference.
+
+
+Using QEMU from tag v2.12.0-rc4 on Ubuntu Xenial ppc64el, it works.
+
+muriloo@jaspion1:~/go-docker$ sudo docker run --rm -it qemutest
+/go # /usr/bin/qemu-ppc64le-static --version
+qemu-ppc64 version 2.11.94 (v2.12.0-rc4-dirty)
+Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers
+/go # go version
+go version go1.10.1 linux/ppc64le
+/go # go build hello.go
+/go # ./hello
+hello world
+/go #
+
+Here is how I configured QEMU:
+
+muriloo@jaspion1:~/sources/qemu$ ./configure --target-list=ppc64-linux-user --disable-system --disable-tools --static
+
+muriloo@jaspion1:~$ uname -a
+Linux jaspion1 4.4.0-119-generic #143-Ubuntu SMP Mon Apr 2 16:08:02 UTC 2018 ppc64le ppc64le ppc64le GNU/Linux
+
+With QEMU from tag v2.12.0-rc4 on Fedora 27 x86_64, it works too.
+
+muriloo@laptop$ docker run --rm -it qemutest
+/go # qemu-ppc64le-static --version
+qemu-ppc64le version 2.11.94 (v2.12.0-rc4)
+Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers
+/go # go version
+go version go1.10.1 linux/ppc64le
+/go # go build hello.go
+/go # ./hello
+hello world
+/go #
+
+muriloo@laptop$ uname -a
+Linux laptop 4.15.17-300.fc27.x86_64 #1 SMP Thu Apr 12 18:19:17 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
+
+muriloo@laptop$ rpm -q docker
+docker-1.13.1-51.git4032bd5.fc27.x86_64
+
+Thanks for the update,  I will test that version and report back ( it may be a few days)
+
+We recently fixed bug #1696773 which was a cause of various crashes or other problems when trying to run go binaries under linux-user, including "go build hello.go". So I strongly suspect this is a duplicate of that bug. Could you test with the QEMU v4.1.0 rc3 or later, please?
+
+
+Have you ever tried with a newer version of QEMU?
+
+[Expired for QEMU because there has been no activity for 60 days.]
+