Many thanks to oldnapalm and especially camoguy! This wouldn't be possible without you.
I think my results can be transferred to the GTX 580 as well. I don't know about other GTX 5xx series cards. They might have 4 or more power modes. GTX 570 only has three. I noticed that when looking on total PC power consumption and G-state switches.
So if you are not a GTX 570 or GTX 580 user, be careful, the following values ignores the G-state 0 and won't get invoked. This is usually the highest mode possible for most other graphics card. Um, speaking of the ancient nvidia 9500 (GT120?) and GTX 260.... Here lies the real problem, aren't all those values that someone took from this or that card outdated for the GTX 4xx or 5xx series? They might work nonetheless, but I wanted a more optimized power management, especially when I saw my "Mac" sucking more than 200W just for surfing the web or video watching. At idle my machine uses ~130W.
Let's get started, I wrote a long explanation why and how to edit these thresholds. You may want to read all of this or just copy and paste these values to your AppleGraphicsPowerManagement.kext and change to your vendor device.
I might add, these values are not written into stone. I have used the power efficiency thresholds for a week and I am very happy with them. You however, might find thresholds that works better for your everyday usage. I encourage to edit these values and run tests on them. I added a high performance mode as well, to show the difference.
Power efficiency thresholds:
(focused to stay in G-state 2 during everyday usage and therefore saves up to 55W~110W)
Threshold_High
0
45
75
100
Threshold_Low
0
0
87
98
<key>MacPro5,1</key> <dict> <key>Vendor10deDevice1081</key> <dict> <key>Heuristic</key> <dict> <key>ID</key> <integer>0</integer> <key>IdleInterval</key> <integer>250</integer> <key>SensorOption</key> <integer>1</integer> <key>SensorSampleRate</key> <integer>4</integer> <key>TargetCount</key> <integer>5</integer> <key>Threshold_High</key> <array> <integer>0</integer> <integer>45</integer> <integer>75</integer> <integer>100</integer> </array> <key>Threshold_Low</key> <array> <integer>0</integer> <integer>0</integer> <integer>87</integer> <integer>98</integer> </array> </dict> <key>LogControl</key> <integer>1</integer> <key>control-id</key> <integer>18</integer> </dict> <key>default-control-id</key> <integer>18</integer> </dict>
High performance thresholds:
(focused on G-state 1 (caution) this mode still switches quickly between 2 and 1
Threshold_High
0
85
75
100
Threshold_Low
0
0
95
98
<key>MacPro5,1</key> <dict> <key>Vendor10deDevice1081</key> <dict> <key>Heuristic</key> <dict> <key>ID</key> <integer>0</integer> <key>IdleInterval</key> <integer>250</integer> <key>SensorOption</key> <integer>1</integer> <key>SensorSampleRate</key> <integer>4</integer> <key>TargetCount</key> <integer>5</integer> <key>Threshold_High</key> <array> <integer>0</integer> <integer>85</integer> <integer>75</integer> <integer>100</integer> </array> <key>Threshold_Low</key> <array> <integer>0</integer> <integer>0</integer> <integer>95</integer> <integer>98</integer> </array> </dict> <key>LogControl</key> <integer>1</integer> <key>control-id</key> <integer>18</integer> </dict> <key>default-control-id</key> <integer>18</integer> </dict>
How and why to edit thresholds for AppleGraphicsPowerManagement.kext (AGPM)
I based my research on the GTX 570 but the basics should be valid to any other nvidia card, e.g. Fermi based: 460/470/480/550/560 too.
First of all the bad news. I couldn't get Lion as smooth as I had hoped for. I still think my previous Ati 5770 was better in that regards. Although in Novabench it only reaches ~800fps whereas the GTX 570 easily hits more than 2500fps!! Oh, don't get me started on cinebench. I get about 37fps with the Ati 5770 and only 30fps with the GTX 570 with both modes above.
G-state 1 (maximum speed) (Total power consumption at Idle: ~190W)
Core: 732 MHz
Memory: 950 MHz
Shader: 1464 MHz
High performance mode doesn't make much of a difference. Lagging occasionally still happens.
To test lagging I did one of the following tests:
1. Scrolling down/up in a Numbers document or long Firefox web page.
2. Open up more than 15 Finder windows and while in Finder switch to a desktop without any open windows and switch back. There should be quite a heavy lag at the 'ease out' movement animation, no matter what G-state the card has switched to.
Conclusion:
For everyday usage there are no real benefits using the threshold values from high performance mode. Test 1 generates above 20% GPU load if you are at G-state 2. Then it jumps to G-state 1 because of 85 (Threshold_High value of G-state 1). Still under load the card has switched to its highest clocks possible and so the GPU load goes down to ~7%. It stays at G-state 1 because of 95 (Threshold_Low value of G-state 2).
G-state 3 (lowest speed) (Idle: ~130W)
Core: 50 MHz
Memory: 76 MHz
Shader: 100 MHz
Mac OS X lags most of the time at this G-state. So I made the range for this G-state very small.
Because of 98 (Threshold_Low value of G-state 3) the GPU Idle % must be greater than 98 to get into G-state 3. During every use, a GPU load smaller than 2% is very unlikely, so in reality the G-state won't get invoked at all.
G-state 2 (medium speed) (Idle: ~135W)
Core: 405 MHz
Memory: 162 MHz
Shader: 810 MHz
This is the best mode for Lion. The user interface is pretty much smooth. During idle GPU it costs only 5 Watts more than G-state 3. So I adjusted the threshold values to get easy in and stay at this G-state for the power efficiency thresholds.
Let's see how G-state changes occur
how to get into G-state 2 from G-state 3:
GPU Idle % must be less than 75 says the Threshold_High value or in other words: GPU load greater than 25%
how to get from G-state 1 to G-state 2
GPU idle % must be greater than 87 or let's say: less than 13% GPU load.
Let's see how G-state 2 sticks to its own
It likes to stay there, because the Threshold_High value of G-state 1 actually defines the "get out of G-state 2" value.
It's 45. So a GPU Idle % lower than 45% is needed to invoke a change to G-state 1.
Basically you can say about the two different thresholds:
The Threshold_Low says: "To all G-states above me, you may enter my G-state only, if you decrease your GPU Load below my limit value."
The Threshold_High says: "To all G-states below me, you may come up here only, if you raise GPU Load and exceed my limit value."



Sign In
Create Account













