Disable OS X kernel_task
throttling
Updated Aug 25, 2020: Added some more details to the article. Note that this procedure would be more complicated from macOS Catalina onwards because of the read-only system partition. You should understand why kernel_task
is throttling your Mac before considering disabling the feature.
After an recent encounter with a water bottle, our MacBook Air was performing sluggishly with the fan at maximum speed (6500 rpm). Disassembly, cleaning everything in alcohol and drying it, and even replacing the IO Board had no effect.
The slowness was because of throttling that limits the CPU available to user processes, in an attempt to keep the machine cool by not stressing the processor. The system was delusionally responding as if it were at a high temperature, but this was clearly not the case (all temperature sensors reported 30 – 45 ºC). This suggested a hardware issue related to the SMC. Short of replacing the logic board, the desired solution would be to disable thermal throttling (possibly keeping the problem where the fan would run at 100% to make sure the system would actually be cool, in lieu of actual fan control).
The throttling was easy to see in the Activity Monitor (kernel_task
):
Throttling is implemented as a kernel extension, which Rhys Oxenham suggests disabling by removing the plist in its Resources corresponding to the Mac's model. However, the list of Macs identified by plist files has not been updated for some years. Our 2014 MacBook Air (MacbookAir6,2
) is absent. The X86PlatformPlugin.kext
(also in the plugins folder of the IOPlatformPluginFamily.kext
) has other Macs identified by their motherboard (see comments on this post). In my case, I tried disabling both the ACPI_SMC_PlatformPlugin.kext
and X86PlatformPlugin.kext
extensions, but this had no effect.
What did end up working for me was to disable the parent kernel extension IOPlatformPluginFamily.kext
. So far I've not noted any adverse effects. Of course, disabling thermal management on your Mac is liable to lead to overheating that could require a logic board replacement. If possible, it makes more sense to address the underlying problem (e.g. clean your fans? they may be dusty). Since hardware damage to the logic board appeared to be the cause here (temperature control by SMC broken because of water damage), further damage to the logic board by overheating would just accelerate a replacement that I probably needed anyway.
Here's what I did:
First, I had to disable SIP (since we're running OS X El Capitan) by booting into recovery mode (booting while holding Command-R), opening the Terminal (under the Utilities menu), and running the command csrutil disable
(more details on StackExchange).
From there, I rebooted into single user mode by holding Command-S when booting. After mounting the file system (fsck -y; mount -uw /
), I made a backup copy of the IOPlatformPluginFamily.kext
extension using rsync:
rsync -av /System/Library/Extensions/IOPlatformPluginFamily.kext /Users/Shared/
(To restore the extension from the backup, I would use rsync -av /Users/Shared/IOPlatformPluginFamily.kext /System/Library/Extensions/
)
I then simply deleted the extension and rebooted:
rm -rf /System/Library/Extensions/IOPlatformPluginFamily.kext; shutdown -r now
After booting, the fan still runs at full speed, but the throttling is gone:
So far I haven't noticed any problems. I'll keep this post updated if I do. I'm glad the MacBook is usable again, and happy to avoid (for now) a ≈ $700 repair fee for the logic board replacement.
Updated Dec 10, 2015: I found that after updating from OS X El Capitan 10.11.1 to 10.11.2 I had to repeat these steps. I'm imagining this will be the case with most OS X updates.
Updated Dec 11, 2015: Maybe it was the new I/O board, but the fan stopped running at max speed today! I restored the kernel extension from the backup, and now the MacBook Air is back to normal, with normal thermal management.