AppleIntelCPUPowerManagementInfo.kext

Please do NOT download the kext! This version may hang your system! Will update the kext when I located the problem.

A new updated version of AppleIntelCPUPowerManagementInfo.kext is now available for download. I have personally run it on a Sandy Bridge and Haswell configuration and there was no KP. Please try this version and let me know if it works on your hack. Thanks!

Update: The latest version of AppleIntelCPUPowerManagementInfo.kext lets you disable features from the Info.plist See Update-2 below for more info.

Many people already know how handy AppleIntelCPUPowerManagementInfo.kext can be, but the way I compiled the public version made it skip certain parts. Stuff that you may want to see in /var/log/system.log when you are trying to get full power management on your hack going. Or just to check if it is indeed working. This is why I made a new version. One with more output. Here’s the MSR log:

AICPUPMI: MSR_CORE_THREAD_COUNT......(0x35) : 0x40004
AICPUPMI: MSR_PLATFORM_INFO..........(0xCE) : 0x80838F3012200
AICPUPMI: MSR_PMG_CST_CONFIG_CONTROL.(0xE2) : 0x1E000005
AICPUPMI: MSR_PMG_IO_CAPTURE_BASE....(0xE4) : 0x1814
AICPUPMI: IA32_MPERF.................(0xE7) : 0xF7C78F89C
AICPUPMI: IA32_APERF.................(0xE8) : 0xEABEA97E5
AICPUPMI: MSR_FLEX_RATIO.............(0x194) : 0xE0000
AICPUPMI: MSR_IA32_PERF_STATUS.......(0x198) : 0x201300002300
AICPUPMI: MSR_IA32_PERF_CONTROL......(0x199) : 0x2600
AICPUPMI: IA32_CLOCK_MODULATION......(0x19A) : 0x0
AICPUPMI: IA32_THERM_STATUS..........(0x19C) : 0x883A0000
AICPUPMI: IA32_MISC_ENABLES..........(0x1A0) : 0x850089
AICPUPMI: MSR_MISC_PWR_MGMT..........(0x1AA) : 0x1
AICPUPMI: MSR_TURBO_RATIO_LIMIT......(0x1AD) : 0x23242526
AICPUPMI: IA32_ENERGY_PERF_BIAS......(0x1B0) : 0x5
AICPUPMI: MSR_POWER_CTL..............(0x1FC) : 0x4005F
AICPUPMI: MSR_RAPL_POWER_UNIT........(0x606) : 0xA0E03
AICPUPMI: MSR_PKG_POWER_LIMIT........(0x610) : 0xFFD00000EA82
AICPUPMI: MSR_PKG_ENERGY_STATUS......(0x611) : 0x8F048E
AICPUPMI: MSR_PKGC3_IRTL.............(0x60a) : 0x8842
AICPUPMI: MSR_PKGC6_IRTL.............(0x60b) : 0x886A
AICPUPMI: MSR_PKGC7_IRTL.............(0x60c) : 0x8891
AICPUPMI: MSR_PP0_CURRENT_CONFIG.....(0x601) : 0x1F40
AICPUPMI: MSR_PP0_POWER_LIMIT........(0x638) : 0xFFD0
AICPUPMI: MSR_PP0_ENERGY_STATUS......(0x639) : 0x4E19D2
AICPUPMI: MSR_PP0_POLICY.............(0x63a) : 0x0
AICPUPMI: MSR_CONFIG_TDP_NOMINAL.....(0x648) : 0x22
AICPUPMI: MSR_CONFIG_TDP_LEVEL1......(0x649) : 0x0
AICPUPMI: MSR_CONFIG_TDP_LEVEL2......(0x64a) : 0x0
AICPUPMI: MSR_CONFIG_TDP_CONTROL.....(0x64b) : 0x80000000
AICPUPMI: MSR_TURBO_ACTIVATION_RATIO.(0x64c) : 0x0
AICPUPMI: MSR_PKG_C2_RESIDENCY.......(0x60d) : 0x3F280E1392A
AICPUPMI: MSR_PKG_C3_RESIDENCY.......(0x3f8) : 0x0
AICPUPMI: MSR_PKG_C6_RESIDENCY.......(0x3f9) : 0x0
AICPUPMI: MSR_PKG_C7_RESIDENCY.......(0x3fa) : 0x0

Example of processor info:

AICPUPMI: Low Frequency Mode : 800 MHz
AICPUPMI: Clock Speed : 3400 MHz
AICPUPMI: Max Turbo Frequency: 3800 MHz

Example of IGPU info:

AICPUPMI: IGPU Current Frequency..: 1200 MHz
AICPUPMI: IGPU Min Frequency......: 200 MHz
AICPUPMI: IGPU Max Non-Turbo Freq.: 350 MHz
AICPUPMI: IGPU Max Turbo Frequency: 1200 MHz
AICPUPMI: IGPU Maximum limit......: No Limit

Example of C-State info:

AICPUPMI: CPU C3-Cores [ 0 2 3 ]
AICPUPMI: CPU C7-Cores [ 0 2 3 ]
AICPUPMI: CPU C3-Cores [ 0 1 2 3 ]
AICPUPMI: CPU C7-Cores [ 0 1 2 3 ]
AICPUPMI: CPU C6-Cores [ 0 1 2 3 ]

And yes indeed. This shows you that all processor cores have reached the available C-States. Which is good news. You may wonder why only MSR_PKG_C2_RESIDENCY is being used, but that is most likely something related to the IGPU drivers/settings and I was unable to solve this today (sorry, this was all I could do today).

Example of P-State info:

AICPUPMI: CPU P-States [ 8 17 34 35 36 (37) ] iGPU P-States [ (4) 24 ]
AICPUPMI: CPU P-States [ 8 17 34 (35) 36 37 ] iGPU P-States [ 4 (5) 24 ]
AICPUPMI: CPU P-States [ 8 17 (34) 35 36 37 ] iGPU P-States [ 4 5 (12) 24 ]
AICPUPMI: CPU P-States [ 8 17 34 35 (36) 37 ] iGPU P-States [ 4 5 (10) 12 24 ]
AICPUPMI: CPU P-States [ (8) 17 34 35 36 37 ] iGPU P-States [ 4 5 (8) 10 12 24 ]
AICPUPMI: CPU P-States [ 8 (17) 34 35 36 37 ] iGPU P-States [ 4 5 (7) 8 10 12 24 ]
AICPUPMI: CPU P-States [ (8) 17 34 35 36 37 ] iGPU P-States [ 4 5 (6) 7 8 10 12 24 ]
AICPUPMI: CPU P-States [ (8) 17 34 35 36 37 ] iGPU P-States [ 4 5 6 7 8 10 12 (19) 24 ]
AICPUPMI: CPU P-States [ (8) 17 34 35 36 37 ] iGPU P-States [ 4 5 6 7 8 10 12 (18) 19 24 ]
AICPUPMI: CPU P-States [ (8) 17 34 35 36 37 ] iGPU P-States [ 4 5 6 7 8 10 12 18 19 (22) 24 ]
AICPUPMI: CPU P-States [ (8) 17 34 35 36 37 ] iGPU P-States [ 4 5 6 7 8 10 12 18 19 22 (23) 24 ]
AICPUPMI: CPU P-States [ (8) 17 34 35 36 37 ] iGPU P-States [ 4 5 6 7 8 10 12 18 19 (21) 22 23 24 ]
AICPUPMI: CPU P-States [ (8) 17 34 35 36 37 ] iGPU P-States [ 4 5 6 7 8 10 12 (16) 18 19 21 22 23 24 ]
AICPUPMI: CPU P-States [ (8) 17 34 35 36 37 ] iGPU P-States [ 4 5 6 7 8 (9) 10 12 16 18 19 21 22 23 24 ]
AICPUPMI: CPU P-States [ 8 17 34 (35) 36 37 ] iGPU P-States [ 4 5 6 7 8 9 10 12 (13) 16 18 19 21 22 23 24 ]

Still not perfect, probably, but it is a lot better already. Anyway. Have fun with it, and let me know if it works for you 😉

Update:
Ok. This is a short run on my i5-4670K:

AICPUPMI: CPU P-States [ 8 9 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 ]

I’d say that is pretty impressive, but this is (currently) only possible with the next update of AppleIntelCPUPowerManagement.kext… if we manage to get it going on a wider range of processor models. This is why your support is so important to us, so please help us validate the kext and data for you processor model. Thank you!

Update-2: The currently available version of AppleIntelCPUPowerManagementInfo.kext lets you disable feature from the Info.plist. For this we have three (boolean) properties:

logMSRs (default value is true)
logIGPU (default value is false)
logCStates (default value is true)

Note: logIGPU is disabled by default because it appears to trigger a KP on certain motherboards. Hopefully these people will help me to fix this problem. Thanks!

Update-3:
MSR_PKG_C7_RESIDENCY is not supported by all processors, and even when it is supported by the processor, then its value can be zero all the time:

Package C6 state is the deepest C-state supported on discrete graphics systems with PCI Express Graphics (PEG).

Package C7 state is the deepest C-state supported on integrated graphics systems (or switchable graphics systems during integrated graphics mode). However, in most configurations, package C6 will be more energy efficient than package C7 state. As a result, package C7 state residency is expected to be very low or zero in most scenarios where the display is enabled. Logic internal to the processor will determine whether package C6 or package C7 state is the most efficient. There is no need to make changes in BIOS or system software to prioritize package C6 state over package C7 state.

Source: Intel datasheet 328897-001.pdf page 58.