David Schlachter

Disable OS X kernel_task throttling

Dec 9, 2015

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).

The throttling was easy to see in the Activity Monitor (kernel_task):

Activity Monitor showing very high kernel_task activity

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 2013 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. Obviously I don’t take any responsibility for damages if you try this and have problems.

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 booted 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 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:

Activity Monitor showing normal kernel_task activity

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 an ≈ $700 repair fee for a likely 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!