Posted at

goを1.5にアップデートして1.4とベンチを取る

More than 3 years have passed since last update.


コンパイル

ダウンロードページからsrcを適当なディレクトリに落として解凍します。

[root@hogehoge ~]# cd /tmp                                                                                                                                                                                                          

[root@hogehoge tmp]# wget https://storage.googleapis.com/golang/go1.5.src.tar.gz
--2015-08-20 19:28:01-- https://storage.googleapis.com/golang/go1.5.src.tar.gz
Resolving storage.googleapis.com... 216.58.221.16, 2404:6800:4004:815::2010
Connecting to storage.googleapis.com|216.58.221.16|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12045689 (11M) [application/octet-stream]
Saving to: “go1.5.src.tar.gz”

100%[=====================>] 12,045,689 10.2M/s in 1.1s

2015-08-20 19:28:02 (10.2 MB/s) - “go1.5.src.tar.gz” saved [12045689/12045689]
[root@hogehoge tmp]# tar xzf go1.5.src.tar.gz

srcに入って./all.bash実行

[root@hogehoge tmp]# cd go/src/

[root@hogehoge src]# ./all.bash
##### Building Go bootstrap tool.
cmd/dist
ERROR: Cannot find /root/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
./make.bash: line 121: /root/go1.4/bin/go: No such file or directory

/root/go1.4/bin/goにgo 1.4が無いと怒られたので、GOROOTから/root/go1.4へコピー

[root@hogehoge src]# cp -r /usr/local/go /root/go1.4

再度実行

[root@hogehoge src]# ./all.bash

##### Building Go bootstrap tool.
cmd/dist

##### Building Go toolchain using /root/go1.4.
bootstrap/internal/obj
bootstrap/internal/obj/arm
bootstrap/internal/obj/arm64
bootstrap/internal/obj/ppc64
--- 省略 ---
##### API check
Go version is "go1.5", ignoring -next /tmp/go/api/next.txt

ALL TESTS PASSED

---
Installed Go for linux/amd64 in /tmp/go
Installed commands in /tmp/go/bin
*** You need to add /tmp/go/bin to your PATH.

特に問題がなければ数分でビルドが終わります。

GOROOTを上書き

[root@hogehoge src]# mv /usr/local/go /usr/local/go1.4

[root@hogehoge src]# cp -r /tmp/go /usr/local/

バージョンを確認

[root@hogehoge src]# go version

go version go1.5 linux/amd64

1.5になってます。


ベンチマーク

go1.5gcロジックが見直された、メモリをさらに効率的に使うようになったなど、より速く省メモリになったと言われています。

ので、go1.4で作った稼働中のプログラムでベンチを取ってみます。


go1.4の時のbench

[root@hogehoge project]# go test src/main/main.go src/main/main_test.go -bench=Bench

PASS
BenchmarkMain 20000 67906 ns/op 7730 B/op 61 allocs/op
ok command-line-arguments 1.563s


go1.5の時のbench

[root@hogehoge project]# go test src/main/main.go src/main/main_test.go -bench=Bench

PASS
BenchmarkMain 30000 58165 ns/op 7189 B/op 56 allocs/op
ok command-line-arguments 2.571s

プログラムの中身については詳しくは書けませんが、1.4に比べて1.5は2割ほどメモリの使用量が減り、処理速度も向上するという結果になりました。

バージョンを上げるだけで2割も性能が上がるのは大変喜ばしいですね。

あとはメモリリークのチェック、負荷試験を経て問題なければ本番投入しても良いかと思います。