I've been working with the folks working on OpenSolaris for a few months now providing advice and input on getting MySQL and the connectors (C/ODBC and C/J) installed as a standard component. Having got the basics in, the team are now looking at adding both 32-bit and 64-bit packages.
The question raised at the end of last week was whether OpenSolaris should enable 64-bit builds by default in 64-bit installations, and whether there was a noticeable performance difference that would make this worthwhile.
I did some initial tests on Friday which showed that there was a small increase (10-15%) of the packaged 64-bit installations over 32-bit under x86 using snv_81. Tests were executed using the included sql-bench tool, and this was a single execution run of each package for 5.0.56. Transactions are missing because I hadn't enabled transactions in the tests.
| Test (x86, binary packages) |
32-bit |
64-bit |
+/- |
| ATIS |
20 |
17 |
17.65% |
| alter-table |
18 |
15 |
20.00% |
| big-tables |
14 |
11 |
27.27% |
| connect |
134 |
121 |
10.74% |
| create |
348 |
348 |
0.00% |
| insert |
1038 |
885 |
17.29% |
| select |
399 |
257 |
55.25% |
| transactions |
| wisconsin |
10 |
8 |
25.00% |
There are some significant differences there (like the 55% increase on SELECT speeds, for example), but a single execution is never a good test. Also, it's unclear whether the differences are between the compilations, the platform or just pure coincidence. This requires further investigation.
As a coincidence, Krish Shankar posted
these notes on using SunStudio 11 and SunStudio 12 and the right compiler flags to get the best optimization.
I decided to do 10-pass iterations of sql-bench and compare both 32-bit and 64-bit standard builds, the 32-bit standard builds against Krish's optimizations, and finally 32-bit and 64-bit optimized builds.
Some notes on all the tests:
- All builds are 5.0.56
- All tests are run on SunOS 5.11, snv_81
- Tests are executed on the same OS and machine running in 64-bit. The SPARC tests are on an UltraSPARC IIIi@1.28GHz Workstation with 1GB RAM; x86 are on a Dell T105, Opteron 1212 with 4GB RAM. Of course we're not comparing machine speed, just 32-bit binaries over 64-bit.
- All results are in seconds; lower values mean faster performance.
- In all tests I'm using the built-in defaults (i.e. no my.cnf anywhere) so as to simulate a standardized installation.
Let's first look at x86 and the 32-bit standard and 32-bit optimized builds:
| Test (x86, 32-bit) |
32-bit (standard) |
32-bit (optimized) |
+/- |
| ATIS |
15.4 |
21 |
-26.67% |
| alter-table |
15 |
16.3 |
-7.98% |
| big-tables |
13.7 |
12.5 |
9.60% |
| connect |
77.6 |
133 |
-41.65% |
| create |
343.7 |
350.6 |
-1.97% |
| insert |
760.3 |
1043.8 |
-27.16% |
| select |
394.8 |
384.2 |
2.76% |
| transactions |
10.8 |
18.6 |
-41.94% |
| wisconsin |
6.6 |
10.1 |
-34.65% |
The standard build uses gcc instead of SunStudio, but I don't get the same performance increases that Krish saw - in fact, I see reductions in performance, not improvements at all. I'm going to rebuild and retest, because I'm convinced there's a problem here with the builds that I'm not otherwise seeing. I certainly don't expect to get results that show a 27% reduction in insert speed. That said, a 10% big-table increase is interesting. I'll redo these builds and find out if the slow down is as marked as it here.
Here's the comparison for standard builds between 32-bit and 64-bit standard builds on x86:
| Test (x86, standard) |
32-bit |
64-bit |
+/- |
| ATIS |
15.4 |
13.5 |
14.07% |
| alter-table |
15 |
10.6 |
41.51% |
| big-tables |
13.7 |
10.6 |
29.25% |
| connect |
77.6 |
76.4 |
1.57% |
| create |
343.7 |
346 |
-0.66% |
| insert |
760.3 |
681.6 |
11.55% |
| select |
394.8 |
254.8 |
54.95% |
| transactions |
10.8 |
10.7 |
0.00% |
| wisconsin |
6.6 |
5.8 |
13.79% |
There are some incredible differences here - more than 50% increase in SELECT, and 30% for the big-tables test show that there is some advantage to having the 64-bit builds on x86 enabled.
Unfortunately I've had problems with the 64-bit optimized builds on my machine, so I haven't completed optimized test comparisons.
On SPARC, Sun Studio is used as the default compiler, and the standard 32-bit and 64-bit show little difference:
| Test (SPARC, standard) |
32-bit |
64-bit |
+/- |
| ATIS |
28.6 |
27.5 |
4.00% |
| alter-table |
27 |
26.7 |
1.12% |
| big-tables |
26.9 |
29.4 |
-8.50% |
| connect |
166.3 |
173.6 |
-4.21% |
| create |
155 |
143.1 |
8.32% |
| insert |
1577.3 |
1572.3 |
0.32% |
| select |
807.4 |
761.6 |
6.01% |
| transactions |
19.5 |
18.75 |
4.00% |
| wisconsin |
11.1 |
11.4 |
-2.63% |
Overall, a pretty insignificant difference here.
Now let's compare the standard and optimized builds using Krish's flags on SPARC:
| Test (SPARC) |
32-bit (standard) |
32-bit (optimized) |
+/- |
| ATIS |
28.6 |
27.75 |
3.06% |
| alter-table |
27 |
26.25 |
2.86% |
| big-tables |
26.9 |
25 |
7.60% |
| connect |
166.3 |
162.5 |
2.34% |
| create |
155 |
145.25 |
6.71% |
| insert |
1577.3 |
1551.5 |
1.66% |
| select |
807.4 |
769.625 |
4.91% |
| transactions |
19.5 |
16.875 |
15.561% |
| wisconsin |
11.1 |
10.875 |
2.07% |
The tests here show little significant difference between the standard and the optimized builds, although 6-7% would probably be enough to prefer an optimized build if you wanted to build your own.
Now let's compare the optimized, Sun Studio 12 builds running in 32-bit and 64-bit:
| Test (SPARC, optimized) |
32-bit |
64-bit |
+/- |
| ATIS |
27.75 |
27.3 |
1.65% |
| alter-table |
26.25 |
26.6 |
-1.32% |
| big-tables |
25 |
25 |
0.00% |
| connect |
162.5 |
162 |
0.31% |
| create |
145.25 |
154.3 |
-5.87% |
| insert |
1551.5 |
1535.1 |
1.07% |
| select |
769.625 |
771.2 |
-0.20% |
| transactions |
16.875 |
19.1 |
-11.65% |
| wisconsin |
10.875 |
10.7 |
1.64% |
The differences are virtually non-existent, and taking the reductions and increases in performance overall, there's probably little difference.
The overall impression is that on x86 the improvement of 64-bit over 32-bit is significant enough that it's probably a good idea to make 64-bit the default. On SPARC, the difference in the optimized builds is so slight that for compatibility reasons alone, 32-bit would probably make a better default.
I'll probably be re-running these tests over the next week or so (particularly the x86 so I can get a true comparison of the 64-bit optimized improvements), and I'll try the T1000 which I upgraded to snv_81 over the weekend, but I think indications are good enough to make a reasonable recommendation of 64-bit over 32-bit.