View Single Post
Old 04-01-08, 06:40 PM   #1
Triskelios
Registered User
 
Join Date: Aug 2004
Posts: 6
Lightbulb PowerMizer configuration in NVIDIA Unix drivers

"PowerMizer", as you probably know, 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 Unix (Solaris, Linux, FreeBSD) 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".

In Windows, the NVIDIA control panel is able to adjust the PowerMizer configuration. In Unix, the bundled nvidia-settings utility displays the current clock frequencies and PowerMizer mode, but it does not allow changes. 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.


The interesting thing is that it is evident that the kernel driver in Unix uses an internal Windows registry parser to load settings. The Xorg/XFree86 driver includes the "RegistryDwords" and "RegistryBinary" options. The Linux kernel driver also has similar options (it's unclear if the Solaris kernel driver accepts options). These allow specifying Windows registry key names and values which are loaded by the kernel driver. Posts in nvnews show they're specified as "Key1=value", multiple keys can be separated with semicolons. Hexadecimal values can use the "0x" prefix.

Some Windows registry keys which may affect PowerMizer include:
  • EnableMClkSlowdown
  • EnableCoreSlowdown
  • EnableNVClkSlowdown
  • PerfLevelSrc
  • PowerMizerEnable
  • PowerMizerDefault
  • PowerMizerDefaultAC
  • PowerMizerLevel
  • PowerMizerHardLevel
  • PowerMizerLevelAC
  • PowerMizerHardLevelAC
  • PowerSaverHsyncOn
Judging from the Windows drivers, these are all DWORD (32 bit) values.
The PowerMizer modes are numbered 1, 2, and 3 respectively in the software.
(See http://developer.download.nvidia.com...lPanel_API.pdf )
In Windows, PowerMizerLevel* and PowerMizerDefault* seem to adjust the mode (not sure what the difference is between them), and PerfLevelSrc determines whether adaptive clocking is enabled for battery and AC.

To test if these affected PowerMizer settings in the Unix driver, I added the following to the appropriate Device section of xorg.conf:
Code:
Options "RegistryDwords" "PowerMizerLevel=0x2"
On my laptop, nvidia-settings seems to always report the power source as "battery", so I didn't set PowerMizerLevelAC.

It appears to work. When I am only running Compiz, nvidia-settings shows that only the lower performance levels are being used, although it incorrectly reports the PowerMizer mode as "Maximum performance". The performance in games seems to be the same as before the change.

This was tested on a Solaris Express (snv_81) system. Feedback is appreciated, especially if someone knows a bit more about the meanings of each the registry keys.

-Albert
Triskelios is offline   Reply With Quote