Ubuntu – My fan is always on but not in MSWindows (HP elitebook 8460p)

12.04atifankernelpower-management

Problem: My laptop(new) fan is ALWAYS on.


Question: What can I do to solve this issue?


Situation:

  • HP Elitebook 8460p
  • Ubuntu 12.04 LTS (clean install, no mod, nothing… really clean… no dust… not – even a little mod but the things I've tried to solve this issue)
  • intel i5-2540M
  • Kernel: 3.5.0-30-generic #51~precise1-Ubuntu SMP Wed May 15 08:48:19 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
  • 8GB
  • SSD HD
  • ATI radeon 6470M 1GB(proprietary drivers, latest but not Beta as of 21/05/2013)
  • low cpu speed (current governor: ondemand [same problem on all governor])
  • low GPU and CPU temp: around 50C
  • low cpu load
  • fan: faster when laptop is pluged to AC, slower on batteries but always on
  • the fan behave like I think it should in Win7.

What I did:

  • Search… a lot… then read… a lot… then search, then read, search,read, well I think you understand
  • read about related and not so related issues on askubuntu.
  • install cpufrequtil and set the thing properly
  • set powersaver option in catalyst to save power (I suppose it's slow down everything)
  • disable vsync in catalyst (why? I don't really know but as I told you: I've read a lot about this issue so I've tried stuff already)
  • Disabled "fan always on when on AC power" in Bios
  • Update BIOS to latest
  • tried to control fan speed directly with think like fancontrol… no luck
  • tried to control ati fan with CLI… no luck (since it's a laptop, my fan is use for both CPU and GPU so I suppose it's normal this doesn’t work but why not try 😀 )
  • tried to disable ACPI
  • I probably tried other mysterious stuff but I don't remember what.
  • I search about intel_idle, setting cpu and gpu idle speed, many related subject.
  • I heard about a possible kernel bug but haven’t tried any fix since nothing seem related to my issue.

I probably missed something somewhere then now I ask for help.

Big thanks!

Best Answer

I didn't directly solve this issue but I did minimize the fan speed and found out what cause this issue. The source was my discrete graphic card. With AMD Radeon base card I found out there is only two options: proprietary drivers(Fglrx, Catalyst) and open source(Radeon)

I tried both drivers. They both have their advantages and disadvantages. I'm not saying there's one better than the other but Radeon (ATI/AMD Radeon base graphic card, MIT license) was closer of what I needed. When I set my card to low, everything goes almost silent. This drivers package is automatically installed during a fresh install of Ubuntu 12.04.

You can then configure your GPU drivers power management feature. Here's my personal notes on how to configure those power management parameters.

There are two options for power management:

  • dynpm : (don't work with multiple screens)

    The "dynpm" method dynamically changes the clocks based on the number of pending fences, so performance is ramped up when running GPU intensive apps, and ramped down when the GPU is idle. The reclocking is attemped during vertical blanking periods, but due to the timing of the reclocking functions, doesn't not always complete in the blanking period, which can lead to flicker in the display. Due to this, dynpm only works when a single head is active.

    source: http://wiki.x.org/wiki/RadeonFeature

    echo dynpm | sudo tee /sys/class/drm/card0/device/power_method
    
  • profile (works well with multiple screens)

    This allows you to set a specific power management profile for the card. If you choose this option, you'll also have to setup the second file

    echo profile | sudo tee /sys/class/drm/card0/device/power_method
    echo <profile of choice> | sudo tee /sys/class/drm/card0/device/power_profile
    

    You'll need to replace <profile of choice> with one of the following profiles:

    • default - Uses the default clocks and does not change the power state. This is the default behavior.

    • auto - Selects between "mid" and "high" power states based on the whether the system is on battery power or not. The "low" power state are selected when the monitors are in the dpms off state.

    • low - Forces the gpu to be in the low power state all the time. Note that "low" can cause display problems on some laptops; this is why auto does not use "low" when displays are active.

    • mid - Forces the gpu to be in the "mid" power state all the time. The "low" power state is selected when the monitors are in the dpms off state.

    • high - Forces the gpu to be in the "high" power state all the time. The "low" power state is selected when the monitors are in the dpms off state.

Set your settings permanently (well until you change it)

By default echoing anything into /sys/ will be replaced at reboot (they aren't real files). So to persist these settings, you need to rewrite them at boot.

Sources:

Start by creating a new file with sudoedit /etc/init.d/ati-profiler and then pasting in the following code:

#! /bin/sh
### BEGIN INIT INFO
# Provides: ati-profiler
# Required-Start: $remote_fs $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Change GPU profile to LOW after 10 sec.
# Description: You can change your GPU profile ass you wish
### END INIT INFO

sleep 10
echo profile > /sys/class/drm/card0/device/power_method
echo low > /sys/class/drm/card0/device/power_profile

Then run:

sudo chmod +x /etc/init.d/ati-profiler
sudo update-rc.d ati-profiler defaults

If you want to revert this, just run:

sudo update-rc.d ati-profiler remove
sudo rm /etc/init.d/ati-profiler

Tip: You can change your setting when you want by just echoing to it. You don't need to set everything at boot.

Related Question