No more mysteries: Apple's G5 versus x86, Mac OS X versus Linux
by Johan De Gelas on June 3, 2005 7:48 AM EST- Posted in
- Mac
Mac OS X versus Linux
Lmbench 2.04 provides a suite of micro benchmarks that measure the bottlenecks at the Unix operating system and CPU level. This makes it very suitable for testing the theory that Mac OS X might be the culprit for the terrible server performance of the Apple platform.Signals allow processes (and thus threads) to interrupt other processes. In a database system such as MySQL 4.x where so many processes/threads (60 in our MySQL screenshot) and many accesses to the kernel must be managed, signal handling is a critical performance factor.
Larry McVoy (SGI) and Carl Staelin (HP):
" Lmbench measure both signal installation and signal dispatching in two separate loops, within the context of one process. It measures signal handling by installing a signal handler and then repeatedly sending itself the signal."
Host | OS | Mhz | null | null call |
open I/O |
stat | slct clos |
sig TCP |
sig inst |
Xeon 3.06 GHz | Linux 2.4 | 3056 | 0.42 | 0.63 | 4.47 | 5.58 | 18.2 | 0.68 | 2.33 |
G5 2.7 GHz | Darwin 8.1 | 2700 | 1.13 | 1.91 | 4.64 | 8.60 | 21.9 | 1.67 | 6.20 |
Xeon 3.6 GHz | Linux 2.6 | 3585 | 0.19 | 0.25 | 2.30 | 2.88 | 9.00 | 0.28 | 2.70 |
Opteron 850 | Linux 2.6 | 2404 | 0.08 | 0.17 | 2.11 | 2.69 | 12.4 | 0.17 | 1.14 |
All numbers are expressed in microseconds, lower is thus better. First of all, you can see that kernel 2.6 is in most cases a lot more efficient. Secondly, although this is not the most accurate benchmark, the message is clear: the foundation of Mac OS X server, Darwin handles the signals the slowest. In some cases, Darwin is even several times slower.
As we increase the level of concurrency in our database test, many threads must be created. The Unix process/thread creation is called "forking" as a copy of the calling process is made.
lmbench "fork" measures simple process creation by creating a process and immediately exiting the child process. The parent process waits for the child process to exit. The benchmark is intended to measure the overhead for creating a new thread of control, so it includes the fork and the exit time.
lmbench "exec" measures the time to create a completely new process, while " sh" measures to start a new process and run a little program via /bin/ sh (complicated new process creation).
Host | OS | Mhz | fork hndl |
exec proc |
Sh proc |
Xeon 3.06 GHz | Linux | 3056 | 163 | 544 | 3021 |
G5 2.7 GHz | Darwin | 2700 | 659 | 2308 | 4960 |
Xeon 3.6 GHz | Linux | 3585 | 158 | 467 | 2688 |
Opteron 850 | Linux | 2404 | 125 | 471 | 2393 |
Mac OS X is incredibly slow, between 2 and 5(!) times slower, in creating new threads, as it doesn't use kernel threads, and has to go through extra layers (wrappers). No need to continue our search: the G5 might not be the fastest integer CPU on earth - its database performance is completely crippled by an asthmatic operating system that needs up to 5 times more time to handle and create threads.
116 Comments
View All Comments
Icehawk - Friday, June 3, 2005 - link
Interesting stuff. I'd like to see more data too. Mmm Solaris.Unfortunately the diagrams weren't labeled for the most part (in terms of "higher is better") making it difficult to determine the results.
And the whole not displaying on FF properly... come on.
NetMavrik - Friday, June 3, 2005 - link
You can say that again! NT shares a whole lot more than just similarites to VMS. There are entire structures that are copied straight from VMS. I think most people have forgotten or never knew what "NT" stood for anyway. Take VMS, increment each letter by one, and you get WNT! New Technology my a$$.Guspaz - Friday, June 3, 2005 - link
Good article. But I'd like to see it re-done with the optimal compiler per-platform, and I'd like to see PowerPC Linux used to confirm that OSX is the cause of the slow MySQL performance.melgross - Friday, June 3, 2005 - link
I was just thinking back about this and remembered something I've seenComputerworld has had articles over the past two years or so about companies who have gone to XServes. They are using them with Apache, SYbase or Oracle. I don't remember any complaints about performance.
Also Oracle itself went to XServes for its own datacenter. Do you think they would have done that if performance was bad? They even stated that the performance was very good.
Something here seems screwed up.
brownba - Friday, June 3, 2005 - link
johan, i always appreciate your articles.you've been /.'d !!!!
and anandtech is holding up well.
good job
bostrov - Friday, June 3, 2005 - link
Since so much effort went in to vector facilities and instruction sets ever since the P54 days, shouldn't "best effort" on each CPU be used (use the IBM compiler on G5 and the Intel compiler on x86) - by using gcc you're using an almost artifically bad compiler and there is no guarantee that gcc will provide equivilant optimizations for each platform anyway.I think it'd be very interesting to see an article with the very best available compilers on each platform running the benchmarks.
Incidently, intel C with the vector instruction sets disabled still does better.
JohanAnandtech - Friday, June 3, 2005 - link
bostrov: because the Intel compiler is superb at vectorizing code. I am testing x87 FPU and gcc, you are testing SSE-2 performance with the Intel compiler.JohanAnandtech - Friday, June 3, 2005 - link
minsctdp: A typo which happened during final proofread. All my original tables say 990 MB/s. Fixed now.bostrov - Friday, June 3, 2005 - link
My own results for flops 2.0: (compiled with Intel C 8.1, 3.2 Ghz Prescott with 160 Mhz - 5:4 ratio - FSB)flops20-c_prescott.exe
FLOPS C Program (Double Precision), V2.0 18 Dec 1992
Module Error RunTime MFLOPS
(usec)
1 1.7764e-013 0.0109 1288.7451
2 -1.4166e-013 0.0082 852.7242
3 8.1046e-015 0.0067 2531.7045
4 9.0483e-014 0.0052 2858.2062
5 -6.2061e-014 0.0140 2065.6650
6 3.3640e-014 0.0100 2906.2439
7 -5.7980e-012 0.0327 366.4559
8 3.7692e-014 0.0111 2700.8968
Iterations = 512000000
NullTime (usec) = 0.0000
MFLOPS(1) = 1088.7826
MFLOPS(2) = 854.7579
MFLOPS(3) = 1609.7508
MFLOPS(4) = 2753.5016
Why are the anandtech results so poor?
melgross - Friday, June 3, 2005 - link
I thought that GCC comes with Tiger. I have read Apple's own info, and it definitely mentions GCC 4. Perhaps that would help the vectorization process.Altivec is such an important part of the processor and the performance of the machine that I would like to see properly written code used to compare these machines.