This afternoon Oleksandr Tymoshenko posted an update on the state of FreeBSD on ARMv6 devices. The takeaway for Raspberry Pi fans is things are working out nicely. A few days ago a usable image was published allowing me to do some serious testing of the Go freebsd/arm
port.
So, what works? Pretty much everything
[root@raspberry-pi ~]# go run src/hello.go Hello, 世界
For the moment cgo
and hardware floating point is disabled. I disabled cgo
support early in testing after some segfaults, but it shouldn’t be too hard to fix. The dist
tool is currently failing to auto detect1 support for any floating point hardware.
[root@raspberry-pi ~]# go tool dist env GOROOT="/root/go" GOBIN="/root/go/bin" GOARCH="arm" GOOS="freebsd" GOHOSTARCH="arm" GOHOSTOS="freebsd" GOTOOLDIR="/root/go/pkg/tool/freebsd_arm" GOCHAR="5" GOARM="5"
This could be because the auto detection is broken on freebsd/arm
, but possibly this kernel image does not enable the floating point unit. I’ll update this post when I’ve done some more testing.
At the moment performance is not great, even by Pi standards. The SDCard runs in 1bit 25mhz mode, and I believe the caches are disabled or set to write though. The image has been stable for me, allowing me to compile Go, and various ports required by the build scripts.
[root@raspberry-pi ~/go/test/bench/go1]# go test -bench=. testing: warning: no tests to run PASS BenchmarkBinaryTree17 1 166473841000 ns/op BenchmarkFannkuch11 1 83260837000 ns/op BenchmarkGobDecode 5 518688800 ns/op 1.48 MB/s BenchmarkGobEncode 10 225905200 ns/op 3.40 MB/s BenchmarkGzip 1 16926476000 ns/op 1.15 MB/s BenchmarkGunzip 1 2849252000 ns/op 6.81 MB/s BenchmarkJSONEncode 1 3149797000 ns/op 0.62 MB/s BenchmarkJSONDecode 1 6253162000 ns/op 0.31 MB/s BenchmarkMandelbrot200 1 20880387000 ns/op BenchmarkParse 10 250097600 ns/op 0.23 MB/s BenchmarkRevcomp 5 279384200 ns/op 9.10 MB/s BenchmarkTemplate 1 7347360000 ns/op 0.26 MB/s ok _/root/go/test/bench/go1 380.408s
If you are interested in experimenting with FreeBSD on your Pi, or testing Go on freebsd/arm
, please get in touch with me.
Update: As of 6th Jan, 2013, benchmarks and IO have improved.
BenchmarkGobDecode 5 482796600 ns/op 1.59 MB/s BenchmarkGobEncode 10 226637900 ns/op 3.39 MB/s BenchmarkGzip 1 15986424000 ns/op 1.21 MB/s BenchmarkGunzip 1 2553481000 ns/op 7.60 MB/s BenchmarkJSONEncode 1 2967743000 ns/op 0.65 MB/s BenchmarkJSONDecode 1 6014558000 ns/op 0.32 MB/s BenchmarkMandelbrot200 1 19312855000 ns/op BenchmarkParse 10 238778300 ns/op 0.24 MB/s BenchmarkRevcomp 5 307852000 ns/op 8.26 MB/s BenchmarkTemplate 1 6767514000 ns/op 0.29 MB/s
1. Did you know that Go automatically detects the floating point capabilities of the machine it is built on ?
Nice! I have recently received my two Raspberries, this might be a nice excuse to get familiar with BSD.
Also, the lack of floating point (at the moment) might mean there is some use for my integer maths library after all:
http://code.google.com/p/intmath/
Excellent news. You’ll find a link to the sd card image I used in the G+ link above. While you can massage ./all.bash through its various stages with the basic FreeBSD distro tools you should at least build bash from ports. If you have a 512mb Pi you can save a bit of wear and tear on your card by adding the following to your /etc/rc.conf.
tmpmfs=”YES”
tmpsize=”32m”
Pretty nice post. I simply stumbled upon your weblog and wanted to say that I have really enjoyed browsing your blog posts. After all I will be subscribing for your rss feed and I hope you write once more very soon!
Pingback: Resizing FreeBSD GPT partitions on an SD card for Raspberry Pi | Daveish