|
N |
M |
Erlang (s) |
Go (s) |
Go x2 (s) |
Go/Erlang (%) |
Go x2/Go |
|
100 |
100 |
0.011 |
0.007249 |
0.044173 |
65.9 |
6.0936680922 |
|
100 |
1000 |
0.099 |
0.062647 |
0.411897 |
63.2797979798 |
|
|
100 |
10000 |
1.078 |
0.752017 |
4.248261 |
69.7603896104 |
5.6491555377 |
|
1000 |
100 |
0.095 |
0.070151 |
0.438409 |
73.8431578947 |
6.24950464 |
|
1000 |
1000 |
1.094 |
0.877429 |
4.482036 |
80.2037477148 |
5.1081466421 |
|
1000 |
10000 |
10.962 |
7.880481 |
44.842602 |
71.8890804598 |
5.6903381913 |
|
10000 |
100 |
1.482 |
0.921457 |
4.70202 |
62.176585695 |
5.1028100063 |
|
10000 |
1000 |
14.887 |
10.666996 |
46.764236 |
71.6530933029 |
4.3840117686 |
|
10000 |
10000 |
146.28 |
105.998892 |
458.785201 |
72.4630106645 |
4.3282075156 |
We ran into the same issue with GC a while back and basically ended
splitting our worker tasks into one process per core instead of
running a single process and GOMAXPROC=4. We saw >4x performance
increase. In our case the code and deployment changes were trivial as
the system was already distributed and we just ended up increasing
node count.
It seems prudent to increase performance for multi core Go
applications but I'm starting to think that single proces multi core
is more important for desktop applications than distributed servers.
Kai
--
Kai Backman, programmer
http://tinkercad.com - solid modeling for artists and makers