Hi,
In my tests the application compiled with Go 1.6beta2 doesn't scale as well as the same application compiled with Go 1.5.3. The problem becomes more visible on a server with larger numbers of cores. However with GOGC=800 both versions scale similarly. This makes me think that the some changes to GC in 1.6 are responsible.
I benchmarked the following TechEmpower tests:
For benchmarking I used three m4.4xlarge (16 cores, 60GB of RAM) EC2 instances in the same datacenter. The database (MySQL), the load testing program (wrk and wrk2) and the application itself were running on separate servers.
Additionally I recorded latency distribution for /fortune at 20k reqs/sec and 30k reqs/sec. At 20k reqs/sec latency distribution is roughly the same. However at 30k reqs/sec Go 1.6beta2 performs worse:
Latency 1.5.3 1.6beta2
50.000% 2.03ms 3.55ms
75.000% 2.76ms 5.38ms
90.000% 3.66ms 8.49ms
99.000% 5.27ms 18.01ms
99.900% 6.44ms 27.06ms
99.990% 7.46ms 32.72ms
99.999% 8.30ms 35.84ms
100.000% 8.77ms 36.83ms
After that I repeated the same test on three m4.10xlarge (40 cores, 60 GB of RAM) servers. The results are similar:
Is it expected that Go 1.6 GC doesn't scale as well as Go 1.5 GC with small heap size on servers with large number of CPUs? Or perhaps there is something wrong with my benchmarking approach?
Regards,
Konstantin