My MythTV system sits on top of the television in the living room, which means that it's subject to much more rigorous noise standards than the other computers I own. While some fan noise is expected from desktop computers, the white noise is much more distracting when it comes from the home theater in the living room. My initial hardware selections had a couple of loud components that I needed to get under control once the system was stable.

To start, I assessed the sources of noise in the system. With the case open, I carefully stopped each fan to determine its contribution to the overall noise. The major offenders were the CPU heat sink fan, and the cooling fan on the north bridge.

Temperature Monitoring

Before getting started, I needed to set up temperature monitoring so that I could compare the performance of different heat sinks. The System Management Bus (SMBus) is used to link sensors built into the motherboard and other system components. SMBus is based on the Inter-Integrated Circuit (I2C) bus invented by Philips in 1992. (For more information on I2C, see this Embedded Systems Design article.)

Most CPUs, and many motherboards, have temperature sensors that can be accessed over a system management bus. Once the Linux kernel is compiled with appropriate support, it can access these sensors during system runtime with the LM Sensors package.

Kernel Configuration

The first step is to compile in support for I2C, as well as the sensor chips used on your components. Required support can be built as modules; the kernel configuration needs to include the following options:

Once the kernel is compiled correctly, the LM Sensors package can be compiled. The main configuration step is to run sensors-detect after installation, which will determine which sensor chips are used and set up configuration.

The first step in running sensors-detect is to run probes to find out what sensor chips are in use. At the end of the long list of probes, it will print out what it has found. In my Myth system, the two tuner cards show up as EEPROM devices on the PCI bus.

Driver `eeprom' (should be inserted):
  Detects correctly:
  * Bus `SMBus nForce2 adapter at 4c00'
    Busdriver `i2c-nforce2', I2C address 0x50
    Chip `SPD EEPROM' (confidence: 8)
  * Bus `SMBus nForce2 adapter at 4c00'
    Busdriver `i2c-nforce2', I2C address 0x51
    Chip `SPD EEPROM' (confidence: 8)

Driver `w83627hf' (should be inserted):
  Detects correctly:
  * ISA bus address 0x0290 (Busdriver `i2c-isa')
    Chip `Winbond W83627THF Super IO Sensors' (confidence: 9)

Following the probe list, sensors-detect will show required commands to configure sensors on boot-up, including module configurations.

To make the sensors modules behave correctly, add the lines between the "cut here" to /etc/modules.conf:

#----cut here----
# I2C module options
alias char-major-89 i2c-dev
#----end cut here----

WARNING! If you have some things built into your kernel, the list above
will contain too many modules. Skip the appropriate ones! You really should
try these commands right now to make sure everything is working properly.
Monitoring programs won't work until it's done.
To load everything that is needed, execute the commands above...

#----cut here----
# I2C adapter drivers
modprobe i2c-nforce2
modprobe i2c-isa
# I2C chip drivers
# For status of 2.6 kernel ports see http://secure.netroedge.com/~lm78/supported.html
# If driver is built-in to the kernel, or unavailable, comment out the following line.
modprobe eeprom
modprobe w83627hf
# sleep 2 # optional
/usr/bin/sensors -s # recommended
#----end cut here----

The last command, /usr/bin/sensors -s, runs the command to configure the readout from the sensor chip to make it human-readable. To see the output, simply run the sensors command. Before I started the project, I used the command to get a baseline temperature reading so that I could ensure that my noise reduction did not come at the expense of heat.

myth# sensors
w83627thf-isa-0290
Adapter: ISA adapter
VCore:     +1.09 V  (min =  +1.93 V, max =  +1.93 V)
+12V:     +11.80 V  (min = +10.82 V, max = +13.19 V)
+3.3V:     +3.12 V  (min =  +3.14 V, max =  +3.47 V)
+5V:       +4.96 V  (min =  +4.75 V, max =  +5.25 V)
-12V:     -14.91 V  (min = -10.80 V, max = -13.18 V)
V5SB:      +5.03 V  (min =  +4.76 V, max =  +5.24 V)
VBat:      +2.67 V  (min =  +2.40 V, max =  +3.60 V)
fan1:     5075 RPM  (min = 9642 RPM, div = 2)
CPU Fan:  3461 RPM  (min = 337500 RPM, div = 2)
fan3:        0 RPM  (min = 6750 RPM, div = 2)
M/B Temp:    +18 C  (high =   +29 C, hyst =   +44 C)   sensor = thermistor
CPU Temp:  +37.5 C  (high =   +80 C, hyst =   +75 C)   sensor = diode
temp3:     +31.0 C  (high =   +80 C, hyst =   +75 C)   sensor = thermistor

At the time the command was run, the CPU was idling. The line labeled fan1 is connected to the north bridge fan sensor; fan3 is a system fan output that I am not using. Under load, the CPU temperature rose to 55°.

Killing the Noise

The six fans in my MythTV system are the main source of noise:

  • Two 60mm exhaust fans. These are noisy if they are run at full speed from the 12V power supply output, so I run them at 5V.
  • One 120mm exhaust fan in the power supply. The power supply has very sophisticated controls over the speed of the fan, and it generally runs low enough to be nearly silent.
  • One 80mm case fan. The fan that I purchased with the case is so noisy that I disconnected it entirely.
  • The CPU heat sink fan. This is the largest source of noise in the system, even at idle. The initial CPU heat sink came in the AMD retail box, so it is not surprising that its noise performance is not all that good. At idle, it runs at approximately 3,500 rpm, and goes to 4,700 rpm as the processor clock speed increases.
  • The fan on the north bridge heat sink. This is the second-noisiest fan because it typically runs above 5,000 rpm.

Figure 1 shows the stock retail CPU heat sink and the north bridge fan before starting the project.

figure 1
Figure 1: The existing major noise sources

The largest source of noise is the CPU heat sink fan, so that's where to start with noise reduction. The best way to reduce noise is to slow the fan down. Large fans move more air than small fans, so I went searching for a larger heat sink that still fit the motherboard. The best place to find information on quiet components is Silent PC Review. I started with their recommended list of CPU coolers and looked for the most effective heat sink that would fit on the MSI K8N Neo2 Platinum motherboard.

For an AMD64, there were four obvious choices to consider: the Zalman 7000 and 7700, and the Thermalright XP-90 and XP-120. Many manufacturers maintain compatibility lists of heat sinks with motherboards. The two heatsinks based on 120mm fans, the Zalman 7700 and Thermalright XP-120, are too large for the motherboard. In the end, my decision was made easy by the compatibility lists. Zalman's compatibility list stated that the 7000 is compatible with my motherboard, but the Thermalright compatibility list did not list a compatible unit.

The Zalman 7000 comes in two versions: an aluminum/copper hybrid, and a pure copper version. Aluminium is cheaper and lighter, but does not conduct heat as well. In a heat sink the size of the 7000, the extra weight can add up. AMD specifies a maximum heat sink weight of 450 grams, and the all-copper 7000 is a hefty 773 grams. While it might not present a problem in operation, it would be necessary to take care when moving the computer. Heat dissipation is not a problem, so the extra weight of the all-copper version is not necessary. I settled on the hybrid version.

As part of the same search, I looked for passive north bridge coolers. Zalman's NB-47J is a passive heat sink that attaches using the motherboard mounting holes. The mounting clips are fully adjustable, and easily fit a variety of motherboards, including mine.

figure 2
Figure 2: The new coolers

Removing the old CPU heat sink was easy. Flip the clip holding it to the motherboard and pull it off. Looking at the old heat sink next to the new one, as in Figure 3, is a strong hint at the cooling power of the Zalman. With much more fin area, heat dissipation without the fan will be better, and the larger fan can move more air while rotating more slowly (and hence, quietly).

figure 3
Figure 3: CPU heat sink comparison

Replacing the north bridge was a complex operation because many north bridge coolers do not attach with screws. Plastic "spears" poke through holes in the motherboard to hold the north bridge heat sink in place; removing the old heat sink required completely dismantling the computer to get at the underside of the motherboard. Figure 4 shows the underside of the motherboard. In the photo, my two fingers are pointing at the north bridge retention holes. By squeezing the plastic spears, the north bridge fan came out easily.

figure 4
Figure 4: Underside of motherboard

Figure 4 also shows the CPU backplate, which is glued onto the motherboard. It's designed to accommodate many of the CPU coolers on the market, but there's a slight incompatibility with the Zalman. The backplate is glued on to the motherboard, and has two posts that stick through to attach heat sink retention brackets to. Zalman includes with the 7000 the brass standoffs shown in Figure 5 (left photo). With the added height from the backplate posts, however, the heat sink does not clamp tightly enough to the CPU for maximum cooling power.

I initially tried using the standoffs as-is. With the slight additional height, they did not allow the CPU cooler to press down hard enough. In this configuration, the idle temperature of the CPU was 42°, almost four degrees hotter than the stock cooler. At this point, I had to either remove the motherboard again to replace the CPU backplate, or find an alternative.

After searching through Zalman and MSI user forums, I decided that removing the backplate was not for the faint of heart. Removing the stock backplate requires heating the glue and gently prying it away from the motherboard, taking care not to damage any circuit traces on it. I opted for a simpler solution. The stock motherboard heat sink retention bracket comes with two long screws. I used the long screws from the motherboard to attach the CPU cooler, as shown in Figure 5 (right photo). With more pressure applied to the CPU, heat transfer improved enough to drop the idle temperature by eight degrees.

In Figure 5, the cylindrical post from the backplate can be seen rising through the motherboard. The clamp from the cooler must be horizontal to press the cooler tightly enough to the CPU to absorb heat. If the brass standoffs are used, it is not possible to get enough leverage to press the cooler on to the CPU.

figure 5afigure 5b
Figure 5: Attachment of the CPU cooler. Brass standoffs (left) from Zalman did not work as well as the stock motherboard screws (right).

Figure 6 shows the new CPU heat sink in place. Note the exposed north bridge and empty mounting holes at the right side of the picture. (There is a slight white smear from the small amount of thermal paste used with the stock north bridge cooler.) The CPU heat sink barely fits. On the left side of the photo, it is very close to the memory slots, and on the right side of the photo, it is very close to the video card slot. Although the fit is tight, Zalman's compatibility list was absolutely correct.

figure 6
Figure 6: CPU heat sink in place

Installing the north bridge heat sink is straightforward. After positioning the clip arms to fit the mounting holes on the motherboard, apply some thermal paste and snap it in. Figure 7 shows the position of the north bridge heat sink. I suspect the reason why MSI chose to use a cooler with a fan is that it allows for the use of full-length PCI cards. The heat sink is quite tall, and will obstruct the use of full-length cards. However, the tuner cards are quite short. If it were necessary to use a longer card, I could easily shift one of the tuner cards right to free up an unobstructed slot.

figure 7
Figure 7: North bridge heat sink

The Results

Naturally, replacing the cooler is only worthwhile if the temperature can be kept steady (or better, reduced). Table 1 shows the results, unscientifically measured by recording the output from sensors when the system was idle and when it was under load. To create MythTV load, I waited for an hour-long program to finish recording and for the commercial flagging process to reach 80 percent completion, and measured the temperature again. Commercial flagging requires significant processing resources, and always runs the CPU at maximum (2GHz) speed for extended periods of time.

CPU temp,
idle
CPU temp,
MythTV load
Retail AMD cooler 38 55
Zalman cooler 34 48

Table 1: CPU temperature

As an extra check of thermal stability, I used CPU Burn-in, which uses processor-intensive floating-point calculations to generate a much more demanding load than MythTV. (The better known CPUburn is written in assembly code, and is not available for the AMD K8 architecture.) After running CPU Burn-in for half an hour, the CPU temperature measured 52, which is still lower than the typical CPU temperature measured with the retail heat sink and fan.

As a final note, the system appears to run slightly cooler all around. The motherboard temperature sensor reads a degree lower (18° instead of 19°), and the third temperature sensor also reads slightly lower as well (28-29° rather than 31-33°).


Return to digitalmedia.oreilly.com