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.
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.
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:
CONFIG_I2C).CONFIG_I2C_ISA for a standard ISA bus attachment and CONFIG_I2C_NFORCE to support the nForce chip on my motherboard.CONFIG_I2C_SENSOR) is enabled when a specific hardware sensor is chosen. The Motherboard Monitor has details on the sensor chips used by different motherboards. My MSI motherboard uses a Winbond 83627THF chip, so I enabled the CONFIG_SENSORS_W83627HF option as well.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°.
|
Related Reading Linux Multimedia Hacks |