I recently rebuilt my 5 year old computer. I upgraded all core components, in particular from an Athlon 64 X2 4600+ at 2.4 GHz with DDR2 800 to a Phenom II 965 BE (quad core) at 3.6 GHz with DDR3 1333 (actually 1600, but testing consistently detected memory errors at 1600). The motherboard is also much newer and better.
The HDD's (x3), DVD writer and card reader are the same. The BIOS memory config is auto-everything except the base timing which I overrode to 1T instead of 2T. The BIOS CPU multiplier is slightly over-clocked to 3.6 GHz from the stock 3.4 GHz.
I noticed compiling Java is slower than I expected. As it happens I have some (single-threaded) Java pattern-matching code which is CPU and memory bound and for which I have performance numbers recorded on a number of hardware platforms, including my old system. So I did a test run on the new equipment and was stunned to find that the numbers are only slightly better than my old system, about 25%.
The data set it is operating on is a 148,975 character array, which should easily fit in caches, but in any event the new CPU has larger caches all around. The system was, of course, otherwise idle for the test and the test run is a timed 10 seconds to eliminate scheduling anomalies. A long while ago, when I upgraded only memory from DD2 667 to DDR2 800 there was no change in performance of this test, which subjectively supports that the test cycle does not need to (significantly) access main memory, but yes it is creating and garbage collecting a large number of objects in the process of this test (low millions of matches are found for the pattern set).
I am about 99.999% certain the code hasn't changed since I last ran it on 2009-03-17 - but I can't easily retest the old hardware, because it is currently in pieces on my work-bench waiting to be built into a new computer for my kids.
Note that Windows (XP) reports a CPU speed of 795 MHz unless I have some thing running. With stuff running it seems to jump all over the place each time I use ALT-Pause to display the system properties, everywhere from 795 MHz to 3.4 Ghz.
So why might my shiny new hardware under-performing so badly?
EDIT: The old memory was Mushkin DDR2 800 with timings set for auto which should have been 5-5-5-12. The new memory is Corsair DDR3 1600, running at 1333 with timings also auto which are 9-9-9-21. In both cases they are a paired set of dual channel DIMMs. I was waiting to ensure my system was stable before tweaking with memory timings.
Answer
I believe I may have found the answer. When I disabled the BIOS setting for AMD Cool n Quiet, my performance jumped to 178% of my old system, which is a little bit faster than my very comparable work hardware. A lucky catch, really, since I only tried disabling C&Q because I have beeen having occasional crashes. I also pushed the memory from 1T to 2T and re-enabled memory spread spectrum.
So the problem appears to be AMD Cool n Quiet... which leads to a new question.
EDIT: I have reenabled spread spectrum and 1T and the system is still stable and fast.
EDIT: I have done further testing and have confirmed beyond question that enabling AMD CnQ definitely has a serious negative impact on performance even on sustained loading. And the system has not had a single crash or spontaneous reboot since I disabled CnQ last week (either under load or idle). Previously it would not last 24 hours without one or the other.
EDIT 2010-05-18: After a driver update from AMD CnQ no longer has a negative performance impact. But it still seems to cause system instability, although not as frequently as previously - every few days instead of consistently within 24 hours. A manual crash-dump generated when the system stopped responding revealed all CPU cores to be executing within the AMD CPU driver, so no real luck there except to implicate CnQ without definite proof.
EDIT 2010-12-23: After upgrading to Windows 7 all power saving functions are working properly and the system has been totally stable.
No comments:
Post a Comment