Enjoy the silence

I enjoy silence. So I like it when a laptop is quiet. The noise of a spinning hard disk is something I'll have to live with, but fans can be silenced. How? I'll tell you (note: I run Windows XP on the desktop, but these tips also apply to, for example, Linux desktops, only the tool set will differ):

First, generate as little heat as possible:

  • Setup your graphics card to the lowest possible speed and voltage. I do not use any special tool for this, just the ATI CCC tool bundled with the Ati Catalyst driver. Set it to "Maximize Battery Life".
  • Undervolt your processor. This means that you run it at a lower voltage than the datasheet recommends. This can be done safely, if not overdone. I use RMclock for this. You can usually go 0.1 to 0.2 volts under the recommended voltage. Almost every CPU family has it's own unique set of recommended voltages, so I can not tell you the exact voltages to use. I have added a screenshot of my particular setup.
  • Run the CPU at the lowst necessary frequency by using a CPU frequency manager. RMclock is also the weapon of choice for this. At low loads, the CPU will run at low frequencies and the frequency will be increased according to the CPU's workload.

rmclock voltages

rmclock settings
Here is a screenshot showing what type of CPU is being used here:

cpuz

Second, and most important, but most complicated: Patch your ACPI tables. These tables are located in the PC's BIOS and define, among other things, the speed at which the fans are to turn and the temperature thresholds at which to change the fanspeed. In short, the procedure goes like this:

  • Make a dump of the tables. Iinstall cygwin with vim and do: "reg query 'HKLM\HARDWARE\ACPI\DSDT\HPQOEM\30E9____\00000001'|  grep REG_BINARY|sed 's/.*BINARY.//'|xxd -r -ps > dsdt.orig" . Note that the path after HKLM\HARDWARE\ACPI\DSDT\ may differ for each machine.
  • Disassemble the tables with the Intel ACPI dissassemble. Install the Intel ACPI (dis)assembler and do "iasl -d dsdt.aml".
  • Find the fanspeed parameters in the sourcecode
  • Modify the parameters to your needs
  • Re-assemble the tables with the Microsoft ACPI assembler. Do "iasl dsdt.dsl".
  • If you have a previous patch installed, remove it with "asl3.exe /loadtable -v -d dsdt.aml"
  • Tell your OS to ignore the BIOS tables and to load your modified version of them. Install the Micrsoft ACPI assembler (asl3.exe) and do "asl3.exe /loadtable -v dsdt.aml".

This procedure is not for everyone. It usually requires quite some experience in reverse engineering, or a lot of nerve and luck. The details of this are explained very nicely in the following pages:

http://avkrok.net/nw8240/windows.html
http://notebookequus.blogspot.com/
http://eddietse.blogspot.com/2008/03/patching-dsdt-table-for-8510p-to-reduce.html

A very big thank you to the authors of these pages for taking the time to document this procedure! For those interrested, here is the fanspeed table of my current laptop, an HP 6830s. First the original, then the patched version:

Original:
Name (CPFS, Package (0x06)
{
0x64,
0x46,
0x3C,
0x32,
0x00,
0x00
})

Modified version:
Name (CPFS, Package (0x06)
{
0x64,
0x46,
0x20,
0x08,
0x00,
0x00
})

What this tells us is that the fans in my laptop will now turn at much lower speeds. After activating the modified tables, the laptop is silent as can be. At a roomtemperature of about 17 degrees Celsius (yes, that is a bit chilly), the machine idles at about 55 degrees, with no fans turning. Here is a screenshot:

mobilemeter

Probably not many people can or want to go this far, but I find it more than worth the trouble... aaaaaaahhh... silence....

Hurray for silence!