[ Main / Projects / Docs / Files / FAQ / Links ]
I was somewhat annoyed to notice a high pitched and rather loud electronics buzz coming from my Asus A7N8X Deluxe rev2.0 motherboard. Additionally, I noticed a very audible background hiss in the analog output of my Santa Cruz soundcard. Such a sound was not present on my previous motherboard/cpu, and turned out to be related to the motherboard component whine. Since I've built my computer with nearly-silent operation in mind (even going to the arguably crazy extreme of homebuilt watercooling), such noises are very apparent. With a bit of effort and luck, I've managed to eliminate this annoying noise, and I document my solution here in hopes that the wonder of Google will allow others to benefit from my efforts.
First off, if your only problem is a buzzing in your speakers, then you should check a few things. If your speaker wires are near to power cables, surge protectors, monitor cables, or anything that could emit a magnetic field, then you have the potential of interference. Clean up the wire jungle and test. Second, if you're using an external amp or receiver, try moving it to another wall outlet, particularly if it's connected to the same circuit as your computer. Ground loop problems can cause buzzing, easily recognized by the loud 60Hz frequency it produces. Finally, make sure your connections are secure and correct. Of course, if your problem, like mine, was accompanied by a buzzing motherboard with no obvious cause, then proceed onwards.
In my case, the component whine and soundcard distortion only afflicted Linux, not Windows. Different setups will perhaps have different behaviors, depending on the motherboard BIOS in question and the drivers in use. In any case, the solution in Linux is simple: disable the bus-cpu idle disconnect by setting the right PCI register to the proper value. Using the standard setpci command (as root, since direct hardware access is necessary):
NOTE: This command will ONLY work if you're using a NForce2-based motherboard. If you are using a different northbridge/chipset, then you will need different values. I do not know the values that are required for other chipsets (although I do have the values needed for AMD761 chipsets somewhere...). Google is your friend here, as I'm sure that these values are documented somewhere. If you use the wrong values, Bad Things (tm) may happen. I take no responsibility if this procedure causes any sort of problem, regardless of your setup.
Easy enough. If your motherboard whine has the same source as mine, this command should instantly give you relative silence. If you'd like to be able to toggle back on cpu idle disconnect to compare the difference, invoke:
In my case, this simple change solved all of my buzzing/whining problems, at the cost of a slightly higher idle temperature and power draw. For me, the cost is easily justified by the benefit. If it works for you, stick the necessary command in your init scripts, and the buzz should be banished for good.
The disconnect-related lockups previously mentioned to occur on NF2 boards have since been corrected by an nvidia-blessed fix. Users of recent 2.4 and 2.6 Linux kernels can safely ignore any such issues, as the proper correction is performed automatically by the kernel.
Simply, we solve the problem by disabling cpu idle disconnect mode. Unfortunately, understanding why this change works as a solution is more complicated. Understanding why this problem happens in the first place is a bit more complex than that, and without measurements, it is probably impossible to say for sure. However, that won't stop me from making some suppositions.
Idle disconnect mode is popular with some overclockers, as it does reduce idle temperatures. However, it does so at the cost of putting a great deal of extra stress on both the power supply and the on-motherboard power regulators. Consider that modern CPUs are very power hungry devices that may oscillate between ~5W of DC power draw at disconnected idle to 70+W in time intervals best measured in nanoseconds. Further, consider that CPUs function at very low voltages (1.65V is spec on most AthXPs), and note that such power requirements necessitate very high current draws. Worse, note that AC power requirements (as seen by the PSU) will be higher, thanks to losses from unusable standing harmonics (PF mismatches) and other, lesser factors (transformer inefficiences for one). Additionally, Athlon cores predating the Athlon XP designs have a CPU bug that can cause instability when cpu-idle disconnect is enabled (if you do not trust me, check the AMD CPU errata -- they are publically available at no cost at AMD's website). For all these reasons (and a few more esoteric ones, that lead to such charming problems as sound card output degredation in some configurations), it's probably a good idea to turn off CPU idle disconnect as a general rule.
As for the source of the buzzing, I would suppose that the source of this whine is coil buzz from the inductors in the power regulation section of the motherboard. I base this speculation on the behavior I have outlined above -- rapid oscillations in power draw would be seen by inductors as being something very much like a square wave, since inductors are current-driven devices. Since the inductor would react as one would expect, by storing energy in a magnetic field so that the generated current would oppose changes in the existing magnetic field of the inductor, the generated field would oscillate along with the nearly square wave that would vary in frequency as a function of the current supplied to the CPU. With the magnetic field changes being so rapid, violent domain changes (where the dipoles of the molecules would align themselves wholly or partially along the changing magnetic field, except that the actual behavior would vary also as a function of the surrounding molecules, leading to an effect where spatial regions, called domains, of the ferrite would behave similarly) would be forced in the ferrite core of the inductor, resulting in a mechanical buzz as the molecular structure of the ferrite 'rattles' in resonance with the magnetic field of the coil. With the rapid changes in the current draw of the CPU, a lesser harmonic of the resultant frequency is audible to our ears (the primary harmonic of the frequency would be far too highly pitched for our ears to distinguish). But this is just speculation, and I could possibly be wrong (or perhaps not perfectly correct on the details).