nVidia PowerMizer powersaving/cooling in Linux (updated)

Driver 169.07 featured some performance enhancements for GeForce 8 series onwards, but above all features the linux port of PowerMizer powersaving feature.

PowerMizer is NVIDIA’s name for the power management features of their hardware, whose primary purpose is adaptive clocking of the core and memory to save power. The current series of NVIDIA drivers for Linux drivers enable these features by default.
PowerMizer regulates transitions between multiple performance levels which each define a set of clock frequencies It currently has three profiles, “Maximum performance”, “Balanced”, and “Maximum battery life”.

nvidia powermizer

This technology works by autosensing the graphics computation requirements and autoadjusting the graphics’ card core and memory frequency, thus providing a noticeable amount of energy saving. Despite being an automated feature you can still tweak it to some extent.

In M$ Windows the NVIDIA control panel is able to adjust the PowerMizer configuration. In Linux, the bundled nvidia-settings utility displays the current clock frequencies and PowerMizer mode, but it does not allow changes (except for latest 190 drivers, although to a very limited extent). The PowerMizer policy is stuck in the default, which is usually “maximum performance”. This may not be preferable for users wishing to conserve power. In particular, running Compiz can cause the clocks to run at the highest frequencies for extended periods of time, even if there is no noticeable performance degradation from running at a lower performance level.

Key Benefits are:

  • Extended battery life
  • Intelligently adaptation of performance based on a user’s needs so it saves power even when the notebook is plugged into the AC.
  • Runs in the background to provide the best balance of performance and battery life (but only uses a 1s wakeup)
  • Helps the notebook run cooler and quieter under normal operating conditions by dissipating less heat in the GPU

Working for both desktop and mobile chipsets, this is indeed of more interest for the latter. One additional benefit stands for laptops with somehow defective GPUs (series GeForce 8400 and 8600 mobile) which are particularly sensitive to temperature shifts. More on this here.

UPDATE

drivers 190 onwards available through PPA ppa:nvidia-vdpau/ppa along with new version of nvidia-settings-190 enable you to set either Autosensing or Always Max Performance PowerMizer governor through the NVIDIA X Server Settings applet, PowerMizer tab.

drivers 185 onwards cannot tweak either “Performance level” or “Performance Mode” settings in xorg.conf, user settings are  automatically overridden by the driver. Now you can only tune the maximum frequency by hand through CoolBits after enabling it.

drivers up to 180.60 enable you to manually tweak the PowerMizer behavior through xorg.conf registry entries as detailed below. More recent drivers despite not complaining about the strings in xorg.conf do not take into account them at all.

Since in Ubuntu Karmic 9.10 you cannot use nvidia 180 drivers directly (you need to patch the driver in order to be compilable with recent kernels) you have to use nvidia drivers 177, which by the way work pretty well, despite not having CUDA2, latest PureVideo and OpenGL support.

Tweak Nvidia PowerMizer

Setting a few strings in the Xorg configuration file in Ubuntu linux you can permanently tweak nvidia PowerMizer in order to let the GPU always run with the lowest clocks. This would enable you to run a fully functional desktop with Compiz enabled with 3D effects but at the same time preventing Compiz to always activate your graphic card. You would either keep the GPU at a sensibly lower temperature and, most importantly, at a constant temperature. Moreover you would see some battery lifetime increase. The main drawback is that you would actually have a downclocked video card and probably could not run GPU intensive games. This, however, is a small price to pay for not having to replace the entire laptop after a GPU failure.

To achieve this you have to edit your

/etc/X11/xorg.conf

as follows

Section "Device"
 Identifier    "Default Device"
 Option  "Coolbits" "1"
 Option  "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x2222; PowerMizerLevel=0x3; PowerMizerDefault=0x3; PowerMizerDefaultAC=0x3"
 Driver  "nvidia"
 Option  "NoLogo"    "True"
EndSection

Lets explain RegistryDWords field:

"PowerMizerEnable=0x1;

enables PowerMizer feature (0×0 would disable it instead). This entry may not be needed since in recent driver versions PowerMizer is enabled by default.

PerfLevelSrc=0x2222;

sets the governor approach. 0×2222 means fixed frequencies for both battery and AC mode.

PowerMizerLevel=0x3;

sets the current mode. 0×3 is the lowest, least power intensive mode.

PowerMizerDefault=0x3;

sets the default level on battery. 0×3 is the lowest, least power intensive mode.

PowerMizerDefaultAC=0x3"

sets the default level while with an AC plug. 0×3 is the lowest, least power intensive mode.

Artem has written a very useful and detailed explanation on the meaning of these and others nvidia registry words here: http://tutanhamon.com.ua/technovodstvo/NVIDIA-UNIX-driver Thanks for contributing!

Additional possible variables are:

  • EnableMClkSlowdown
  • EnableCoreSlowdown
  • EnableNVClkSlowdown
  • PerfLevelSrc
  • PowerMizerEnable
  • PowerMizerDefault
  • PowerMizerDefaultAC
  • PowerMizerLevel
  • PowerMizerHardLevel
  • PowerMizerLevelAC
  • PowerMizerHardLevelAC
  • PowerSaverHsyncOn

Given that the nvidia kernel driver in linux uses an internal windows registry parser to load settings, the xorg driver includes the RegistryDwords and RegistryBinary options. These are all DWORD (32 bit) values. It seems they accept the following syntax Key1=value, multiple keys can be separated with semicolons. Hexadecimal values can use the “0x” (zero ex) prefix. The last value of the string should not have any semicolon on linux.

PowerMizer 7.0 Mobile Technology (specific to NVIDIA GeForce 8M Series of GPUs) delivers numerous mobile power management techniques to manage the power consumption of both the GPU and the entire notebook:
  • Adaptive clocking and engine gating ensure the GPU is only consuming as much power as is necessary for the task at hand
  • The GeForce 8M Series architecture is significantly more power efficient and utilizes the latest advances in chip process technology to achieve this
  • Dedicated HD video processor to playback Blu-ray and HD DVD with the highest quality requiring less use of the CPU and thereby extending battery life
  • More circuits using lower voltage rails
  • More clocking and voltage scaling steps for finer control
  • Support for GDDR3 memory at 1.8V
  • NVIDIA SmartDimmer™ technology for intelligent, granular display brightness control for maximum battery life.
  • ASLM (Active State Link Management) technology for ultra efficient use of the PCI Express link
  • Uncompromised power management support for MXM-based notebooks
http://www.nvidia.com/object/feature_powermizer.html

Even though Intel X3100 chipsets has features somehow similar, I must thank nVidia for putting this effort in developing good linux drivers.

(As many linux supporters I opted in buying nVidia powered laptops for the better support provided to the community, even though no OpenSource code is released yet).

Thoughts must also go to the United Nations awakening campaign for evironmentally aware citizens carried out last autumn. We must take action against environmental threats, saving energy is an important step towards providing a better future for our children.

Related posts:

  1. nVidia GeForce8 powersaving features
  2. enable nVidia CoolBits (frequency tuner)
  3. Linux Power Saving Tweaks for HP Pavilion laptops
  4. compiling gnome sensors-applet with nVidia support
  5. HP Pavilion overclock nVidia video card
  6. Ottimizzazioni per il Risparmio Energetico per portatili HP Pavilion su Ubuntu Linux
  7. HP Pavilion and the broken nVidia chips affair
| Print This Post Print This Post | Email This Post Email This Post
RSS 2.0 | Trackback | Comment

15 Responses to “nVidia PowerMizer powersaving/cooling in Linux (updated)”

  1. Motin says:

    Great, thanks for informing about PowerMizer!

    In this thread: http://ubuntuforums.org/showthread.php?p=5265688 the following is stated:
    Hi, I have also the same issue.

    All I found in web is PowerMizerLevel option, that only works without power for me:
    Code:
    Option “RegistryDwords” “PowerMizerLevel=0×3″
    there 0×1 is performance, 0×2 balanced and 0×3 powersave.

    I don’t know how to change “Performance Mode: Desktop” to something like “throttle”.

    That seems to indicate that there is some way to control PowerMizers performance mode. Have you looked into this anywhat?

    Also, I see that you have a Power Savings Settings entry for your Geforce 8400M GS card. I have the same card and the latest drivers for Hardy but I can’t see that settings entry. Have you done anything special to make it show?

    Thanks man,

    Cheers

    • aldeby says:

      Glad to see this post has been of some help for you!

      The Power Savings Settings entry is obtained with this line in xorg.conf (this is described also here)
      Option “OnDemandVBlankInterrupts” “True”
      basically there is only a checkbox inside enabling you to disable vBlank interrupts, thus reducing by 60 the number of CPU wakeups.

      For what concerns PowerMizer it should be already enabled with a ‘throttling’ method. If not you should probably set those strings:
      Option "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x3333"
      Where PerfLevelSrc=0x3333; stands for autosensing dynamic of frequency.
      You can also add PowerMizerLevel=0x2; PowerMizerDefault=0x2; PowerMizerDefaultAC=0x2 where 0×2 means medium performance.

  2. Artem says:

    I tried to gather all power saving info in one place – http://tutanhamon.com.ua/technovodstvo/NVIDIA-UNIX-driver/

  3. [...] information: nVidia PowerMizer powersaving in Linux enable nVidia CoolBits (frequency tuner) NVIDIA™ driver for X.org: performance and power saving [...]

  4. soul.. says:

    Section "Device"
    VendorName "NVIDIA Corporation"
    BoardName "GeForce 7600 GS"
    Option "NvAGP" "1" #0 123 #"1" agp x8
    Option "NoFlip" "1" # flip what ?
    Option "Coolbits" "1" #en overcl.
    Option "NoLogo" "1" #logo
    Option "backingstore" "1" # ?
    Option "RenderAccel" "1" # ? :)
    Option "UseEDIDFreqs" "0" #if u wish set manualy freq.for monit
    Option "UseEDIDDpi" "0" #if u wish set manualy
    Option "UseEDID" "0" #if u wish set manualy
    Option "metamodes" "CRT: 1600x1200 +0+0; CRT: 1280x1024 +0+0; CRT: 1024x768 +0+0; CRT: 800x600 +0+0; CRT: 640x480 +0+0" #

    hm what else is available ?
    maybe someone knows how to set overclocked frequencies at system start-up automatically ?

    • aldeby says:

      NoFlip is an option that enables you to actually flip your screen upside down. Its “A Mirror image” not a rotation.

      Unfortunately I haven’t figured out how to set persistent clocks. They presumably involve setting the clock frequencies into /etc/X11/xorg.conf but actually cannot give you any specific advice at the moment. I’m sorry.

  5. soul.. says:

    one more question, with nvidia-setings i sett-up x server color correction, but after every x restart they are reset-ed howto save them for both monitors independently ?

  6. alfC says:

    it seems that the modifications on the xorg.conf work with Karmic 9.10 and nvidia 195.22 (not tried 190). now nvidia-settings reports perfomance level: 0 and 100 Mhz for NV clock and Memory Clock (although it gives Performance Mode: Maximum Performance and clock frequencies tab does not modify the clock even after ‘apply’). I had to do all this because my crappy tx2000 shutsdown if the video chip gets too hot. Let’s see if it helps. BTW never buy HP.

    my xorg.conf says:

    Section “Device”
    Identifier “Device0″
    Option “Coolbits” “1″
    Option “RegistryDwords” “PowerMizerEnable=0×1; PerfLevelSrc=0×2222; PowerMizerLevel=0×3; PowerMizerDefault=0×3; PowerMizerDefaultAC=0×3″
    Driver “nvidia”
    Option “NoLogo” “True”
    VendorName “NVIDIA Corporation”
    EndSection

    • aldeby says:

      alfC, thank you for your feedback!
      Unfortunately I haven’t clearly undestood what you are referring about.
      You mean that after manually setting the GPU&Memory clock they do not reset after reboot? Instead PowerMizer fuctions always stay at Performance level?

      • alfC says:

        Sorry for not being clear. It is difficult to explain, in the PowerMizer tab both
        clock speeds appears at 100Mhz everytime I have checked.
        So in that sense it works. However in the Clock Frequencies tab,
        after I enable Overclocking and moving the slide (in 2D or 3D options)
        after I click in the Apply button the slide is reset to the default frequency
        100 MHz for 2D and 425MHz for 3D. This also happens if I run nvidia-settings
        with sudo.
        So, at the end I don’t know if it works or not. At least I have been running
        the laptop for several hours without crashes. (before it never lasted more
        than 10 minutes).
        Is it more clear now?

        • aldeby says:

          Thanks for the explanation alfC!
          Through this nvidia-settings command line you can check the current frequency values:
          nvidia-settings -q GPUCurrentClockFreqs

          You can also see the actual settings and much more data with
          nvidia-settings -q all

  7. Aikimox says:

    HI,
    I have a problem running my GPUs (GTX 280M SLI) at their max clocks, it seems that there is no option to force the max power level in Nvidia X-server (195.30 drivers), so regardless of the application/game demands the power level only goes from 0 to 1 ( 275/301MHz). Even if I put maximum performance instead of adaptive it only goes to power level 1…
    Would appreciate an advice on this issue.
    Thanks,
    Aikimox

    • aldeby says:

      Thank you for your comment Aikimox,
      I’d suggest you to type in the terminal the following command: nvidia-settings --query all over there you should read the current and maximum frequencies of your graphic card. If you need some help in interpreting the data please contact me. (to directly paste the output to a text file you may type nvidia-settings --query all >> GPUreport.txt
      Cheers!

Leave a Reply

XHTML: You can use these tags: b, cite, code, em, i, q cite="", strike, strong.