Since the iMac System Definitions tend to give you almost an on/off processor frequency power management, I created a SSDT to go with my iMac14,2 SysDef.
So, here's how you create and use an SSDT which will give you much better processor power management. The below method does not require a custom DSDT - matter of fact, it uses your native DSDT in your BIOS. toleda has a excellent
Guide which I've summarized here. If you have question(s) or need help with creating and using an SSDT or using a SSDT with a custom DSDT, I recommend you post your question(s) on toldea's thread (sorry 'bout that toleda
).
Repair Permissions using the Disk Utility on the drive to be updated;*
Backup your current installation using Carbon Copy Cloner or SuperDuper;
Download
AppleIntelCPUPowerManagementInfo.kext, unzip, put on the Desktop and install it with Kext Utility or KextBeast.
Download PikeRAlpha's
ssdtPRGen.sh SSDT generation application (click on the Download ZIP menu item, last on right);
In the Downloads folder, double click on the ssdtPRGen.sh-master.zip if you browser didn't give you the option to unzip it;
Open the /Applications/Utilities/Terminal application and input the following (you can copy and paste each command):
Code:
cd Downloads/ssdtPRGen.sh-master
sudo chmod 755 ssdtPRGen.sh
./ssdtPRGen.sh
Enter the Administrator's password (probably yours);
Then, answer n (No) and n (No) to the two questions the ssdtPRGen.sh application asks you; you should see something like this example of my run:
Code:
Hector:~ Stork$ ./ssdtPRGen.sh
This script must be run as root!
Password:
ssdtPRGen.sh v0.9 Copyright (c) 2011-2012 by † RevoGirl
v6.6 Copyright (c) 2013 by † Jeroen
v13.5 Copyright (c) 2013-2014 by Pike R. Alpha
-----------------------------------------------------------
Bugs > https://github.com/Piker-Alpha/ssdtPRGen.sh/issues <
System information: Mac OS X 10.9.3 (13D65)
Brandstring 'Intel(R) Core(TM) i5-4690 CPU @ 3.50GHz'
Scope (_PR_) {220 bytes} with ACPI Processor declarations found in the DSDT (ACPI 1.0 compliant)
Generating ssdt.dsl for a 'iMac14,2' with board-id [Mac-27ADBB7B4CEE8E61]
Haswell Core i5-4690 processor [0x306C3] setup [0x0605]
With a maximum TDP of 65 Watt, as specified by Intel
Number logical CPU's: 4 (Core Frequency: 3300 MHz)
Number of Turbo States: 6 (3400-3900 MHz)
Number of P-States: 32 (800-3900 MHz)
Injected C-States for CPU0 (C1,C3,C6,C7)
Injected C-States for CPU1 (C1,C2,C3)
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20130117-64 [Jan 19 2013]
Copyright (c) 2000 - 2013 Intel Corporation
ASL Input: /Users/Stork/Desktop/ssdt.dsl - 275 lines, 8777 bytes, 47 keywords
AML Output: /Users/Stork/Desktop/ssdt.aml - 1788 bytes, 16 named objects, 31 executable opcodes
Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 0 Optimizations
Do you want to copy /Users/Stork/Desktop/ssdt.aml to /Extra/ssdt.aml? (y/n)? n
Do you want to open ssdt.dsl (y/n)? n
You'll have two new files on your Desktop - ssdt.aml & ssdt.dsl
Rename the ssdt.aml to SSDT.aml and drop it into the /Extras folder;
Move the ssdt.dsl folder to a safe place for a while, like your Documents folder;
Edit the /Extra/org.chameleon.Boot.plist file changing the GenerateCStates and GeneratePStates parameters to No;
Copy and paste the results of running Pike's program into a TextEdit .txt file and save it with the ssdt.dsl for debugging purposes;
Edit your /Extra/org.chameleon.Boot.plist file to change the C/P state flags from Yes to No
Code:
<key>GenerateCStates</key>
<string>No</string>
<key>GeneratePStates</key>
<string>No</string>
Reboot your computer and,
at the Chimera boot screen, tap the keyboard's Spacebar twice to open the boot flag window:
enter "UseKernelCache=No" without the quotes.
Upon reaching the Desktop, open up the Terminal program again and type in:
Code:
cat /var/log/system.log | grep "AICPUPMI:"
You should see all the CPU P & C states now; here's my example:
Code:
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: v3.3 Copyright © 2012-2014 Pike R. Alpha. All rights reserved
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: logMSRs............................: 1
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: logIGPU............................: 1
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: logCStates.........................: 1
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: logIPGStyle........................: 1
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MWAIT C-States.....................: 270624
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_CORE_THREAD_COUNT......(0x35) : 0x40004
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PLATFORM_INFO..........(0xCE) : 0x80838F3012300
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PMG_CST_CONFIG_CONTROL.(0xE2) : 0x1E000007
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PMG_IO_CAPTURE_BASE....(0xE4) : 0x1814
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: IA32_MPERF.................(0xE7) : 0xEA1A26335
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: IA32_APERF.................(0xE8) : 0xD45DB85E4
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_FLEX_RATIO.............(0x194) : 0x0
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_IA32_PERF_STATUS.......(0x198) : 0x254E00002500
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_IA32_PERF_CONTROL......(0x199) : 0x2700
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: IA32_CLOCK_MODULATION......(0x19A) : 0x0
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: IA32_THERM_STATUS..........(0x19C) : 0x88350000
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: IA32_MISC_ENABLES..........(0x1A0) : 0x850089
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_MISC_PWR_MGMT..........(0x1AA) : 0x1
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_TURBO_RATIO_LIMIT......(0x1AD) : 0x27272727
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: IA32_ENERGY_PERF_BIAS......(0x1B0) : 0x5
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_POWER_CTL..............(0x1FC) : 0x4005F
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_RAPL_POWER_UNIT........(0x606) : 0xA0E03
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PKG_POWER_LIMIT........(0x610) : 0xFFD00000EA82
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PKG_ENERGY_STATUS......(0x611) : 0x8DDAE6
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PKGC3_IRTL.............(0x60a) : 0x8842
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PKGC6_IRTL.............(0x60b) : 0x8873
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PKGC7_IRTL.............(0x60c) : 0x8891
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PP0_CURRENT_CONFIG.....(0x601) : 0x1F40
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PP0_POWER_LIMIT........(0x638) : 0xFFD0
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PP0_ENERGY_STATUS......(0x639) : 0x56C55B
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PP0_POLICY.............(0x63a) : 0x0
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PP1_POWER_LIMIT........(0x640) : 0xFFD0
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PP1_ENERGY_STATUS......(0x641) : 0x6C3
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PP1_POLICY.............(0x642) : 0x18
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_CONFIG_TDP_NOMINAL.....(0x648) : 0x23
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_CONFIG_TDP_LEVEL1......(0x649) : 0x0
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_CONFIG_TDP_LEVEL2......(0x64a) : 0x0
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_CONFIG_TDP_CONTROL.....(0x64b) : 0x80000000
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_TURBO_ACTIVATION_RATIO.(0x64c) : 0x0
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PKG_C2_RESIDENCY.......(0x60d) : 0x0
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PKG_C3_RESIDENCY.......(0x3f8) : 0x0
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PKG_C6_RESIDENCY.......(0x3f9) : 0x0
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: MSR_PKG_C7_RESIDENCY.......(0x3fa) : 0x0
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: CPU Low Frequency Mode.............: 800 MHz
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: CPU Maximum non-Turbo Frequency....: 3500 MHz
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: CPU Maximum Turbo Frequency........: 3900 MHz
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: IGPU Current Frequency.............: 350 MHz
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: IGPU Minimum Frequency.............: 200 MHz
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: IGPU Maximum Non-Turbo Frequency...: 350 MHz
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: IGPU Maximum Turbo Frequency.......: 1200 MHz
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: IGPU Maximum limit.................: No Limit
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: CPU P-States [ (8) 31 37 ] iGPU P-States [ (7) ]
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: CPU C3-Cores [ 0 1 3 ]
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: CPU C7-Cores [ 0 1 3 ]
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: CPU P-States [ 8 31 (35) 37 ] iGPU P-States [ (7) ]
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: CPU C3-Cores [ 0 1 2 3 ]
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: CPU C7-Cores [ 0 1 2 3 ]
Jul 14 18:59:06 localhost kernel[0]: AICPUPMI: CPU P-States [ 8 30 31 (35) 37 ] iGPU P-States [ (7) ]
Jul 14 18:59:07 localhost kernel[0]: AICPUPMI: CPU P-States [ (8) 23 30 31 35 37 ] iGPU P-States [ (7) ]
Jul 14 18:59:08 Hector kernel[0]: AICPUPMI: CPU P-States [ 8 23 30 31 35 36 37 (38) ] iGPU P-States [ (7) ]
Jul 14 18:59:08 Hector kernel[0]: AICPUPMI: CPU P-States [ 8 23 30 31 35 36 37 (38) ] iGPU P-States [ (4) 7 ]
Jul 14 18:59:09 Hector kernel[0]: AICPUPMI: CPU P-States [ 8 23 30 31 35 36 37 38 (39) ] iGPU P-States [ (4) 7 ]
Jul 14 18:59:09 Hector kernel[0]: AICPUPMI: CPU C6-Cores [ 1 ]
Jul 14 18:59:10 Hector kernel[0]: AICPUPMI: CPU C6-Cores [ 0 1 ]
Jul 14 18:59:11 Hector kernel[0]: AICPUPMI: CPU P-States [ 8 23 30 31 35 36 (37) 38 39 ] iGPU P-States [ 4 (5) 7 ]
Jul 14 18:59:11 Hector kernel[0]: AICPUPMI: CPU C6-Cores [ 0 1 3 ]
Jul 14 18:59:16 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 23 28 30 31 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:17 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 23 28 30 31 32 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:18 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 23 28 30 31 32 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:19 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 21 23 28 30 31 32 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:20 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 21 22 23 28 30 31 32 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:20 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 15 21 22 23 28 30 31 32 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:21 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 15 18 21 22 23 28 30 31 32 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:21 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 15 17 18 21 22 23 28 30 31 32 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:23 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 15 17 18 19 21 22 23 28 30 31 32 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:24 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 15 16 17 18 19 21 22 23 28 30 31 32 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:25 Hector kernel[0]: AICPUPMI: CPU P-States [ 8 14 15 16 17 18 19 21 22 23 28 30 31 32 34 (35) 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:28 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 14 15 16 17 18 19 21 22 23 28 30 31 32 33 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:28 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 14 15 16 17 18 19 21 22 23 28 29 30 31 32 33 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:31 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 14 15 16 17 18 19 20 21 22 23 28 29 30 31 32 33 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:34 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 14 15 16 17 18 19 20 21 22 23 24 28 29 30 31 32 33 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:43 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 14 15 16 17 18 19 20 21 22 23 24 26 28 29 30 31 32 33 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:49 Hector kernel[0]: AICPUPMI: CPU P-States [ 8 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29 30 31 32 33 34 (35) 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:51 Hector kernel[0]: AICPUPMI: CPU P-States [ 8 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 (35) 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 18:59:56 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 19:01:18 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 19:01:52 Hector kernel[0]: AICPUPMI: CPU P-States [ 8 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 (35) 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 19:01:54 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 ] iGPU P-States [ (4) 5 7 ]
Jul 14 19:02:11 Hector kernel[0]: AICPUPMI: CPU C6-Cores [ 0 1 2 3 ]
Jul 14 19:03:03 Hector kernel[0]: AICPUPMI: CPU P-States [ 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 (39) ] iGPU P-States [ 4 5 7 (10) ]
Jul 14 19:03:04 Hector kernel[0]: AICPUPMI: CPU P-States [ 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 (39) ] iGPU P-States [ 4 5 7 (8) 10 ]
Jul 14 19:03:04 Hector kernel[0]: AICPUPMI: CPU P-States [ (8) 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 ] iGPU P-States [ 4 5 (6) 7 8 10 ]
Lastly, Repair Permissions again.*
You're done! Now, go read toleda's detailed
Guide to either get more information on this procedure or report a problem.
* You can use the Terminal instead of Disk Utility if you don't feel uncomfortable with a UNIX command:
Code:
sudo diskutil repairPermissions /