The Current State Of Radeon Power Management
It's been a while since last looking at the state of power management for Radeon GPUs, but here's an updated look at the various options surrounding power management for modern ATI/AMD graphics processors and their effectiveness. Various drivers, graphics cards, and tuning options are compared.
On the Linux open-source side for the Radeon driver, the support is generally better than on the NVIDIA side with the community-developed Nouveau driver (there's still missing re-clocking support for Fermi, etc) but it's not generally as good as the proprietary Catalyst driver under Linux. The open-source Radeon driver does not engage in any dynamic power management by default, but it must be manually controlled. What makes matters worse is that these options must be controlled by writing to sysfs nodes, which isn't exactly great for making the Linux desktop very friendly compared to just firing up the AMD Catalyst Control Center and toggling a few options from a polished user-interface. The default behavior for the open-source Radeon KMS driver is to just run the graphics card at its default clocks without changing the power state. Regardless of whether the system is under load or idling, the same core and memory clocks are used and at the same voltage stepping.
The dynamic power management of the open-source Radeon driver comes via writing dynpm to the /sys/class/drm/card0/device/power_method interface. The "DynPM" option results in the clocks / voltage states being dynamically adjusted based upon the GPU load (the number of pending fences is used to calculate this), which allows most Radeon GPUs to run with lower clock speeds and voltages when the GPU is idling. Partly why this option is not used by default is that the support is not perfect and can produce some visual deficiencies. Clock speeds need to be adjusted during vertical blanks when nothing is being scanned out from video memory, but this doesn't always happen, so at times there can be a screen flicker when stepping between states. This option also only works in single-display configurations.
The Radeon driver can also use a profile-based power management method. This is done by writing profile to the /sys/class/drm/card0/device/power_method interface and then writing a value of default, auto, low, mid, or high to the /sys/class/drm/card0/device/power_profile interface. The default value is the same as what is the default when the graphics card boots up and the Radeon DRM driver loaded. The automatic mode attempts to switch between mid and high power states when the mobile system switches between battery states, so that you're running with reduced speed and power when on battery power but can switch to better performance when on AC power.
The low power profile obviously forces the graphics card to operate in its lowest power state at all times regardless of GPU load. The mid power profile puts the GPU into its middle power state constantly, but not all graphics cards tested could support this mode. The high power profile then forces the graphics card to run in its highest power/performance states. The only time these static profiles are changed is when all displays are in a DPMS off state, in which case the GPU automatically is lowered to its low-power state. These options are talked about on the X.Org Wiki.
The Catalyst Linux driver meanwhile fully supports PowerPlay and other power savings features as found in the Windows Catalyst driver. This power management can be seamless and manually toggled via AMD's utilities. The Catalyst driver also supports OverDrive for pushing the graphics card further, but I digress. None of these options is new to Linux, but just a recap before running the new Radeon power tests.