Please Note - Aug/2024:
A pandemic:
During the covid-19 lockdown, like many others, I've used my Macbook 13' mid-2018, quite a lot. And big mistake... it was always plugged in. Was it the cause of the problem or just a faulty battery, we will probably never know, but the battery started swelling badly to the point where it started deforming the case.
As I was using this laptop for my work and on time sensitive projects, no replacement battery available to do it myself, I had to find a solution. Apple was not helping, as they refuse to sell you parts, even in the middle of a lockdown, when you rely on your mac for work, and you cannot leave it 3 to 5 days in the hands of their technical service.
***Please note***: this is probably completely outdated by now, it was originally published in May 2020
Before removing:
- Deactivating kernel_task capability to slow down your computer
- Boot into recovery mode (press command+R at boot)
- Open a terminal
- Deactivate SIP: csrutil disable (keep this disabled as it will be important for restoring normal CPU speeds after)
- In single mode (command+S)
- do a backup copy of /System/Library/Extensions/IOPlatformPluginFamily.kext
- for example:
- rsync -av /System/Library/Extensions/IOPlatformPluginFamily.kext /Users/Shared/
- remove the IOPlatformPluginFamily:
- sudo rm -rf /System/Library/Extensions/IOPlatformPluginFamily.kext
- if your system is read only, just do a mount -uw / and redo the command above
- Note: you should be able to reactivate csrutil with the following command and still be able to load CPUTune:
- in recovery mode again:
- csrutil enable --without kext
- reboot, download and compile (with XCode)
- https://github.com/syscl/CPUTune
- or get a compiled binary here (this will probably not work for you), please re-compile:
Hello everyone, I am also trying to run my macbook without a battery following the tutorial by @christophe-duc in the first post but after spending the whole day on it without any luck, I finally managed to do it on my last try before posting here and asking for a compiled version. I just want to share what helped me to spare other people some time.
I was unable to compile it. I am on MacOS 10.14.6, I had xcode 11.0 that did not work, tried to install SDK for 10.14 as per a commenter on the tutorial post, did not work, installed xcode 10.3 tried again but did not work either (always changing deployment info to 10.14).
In the end I after searching the errors I got, I found this answer on stackoverflow that opening .xcodeproj instead of .xcworkspace will cause some errors. I was trying to compile CPUTuneApp and CPUTuneCore separately, only managing to compile the latter with success.
So the proper way to compile it is:
- Use correct version of Xcode that has SDK for your OS.
- Open ONLY CPUTune.xworkspace
- Change deployment to match your OS (click blue icon on the left CPUTuneCore, select Build Settings, Levels, and then set everything in macOS Deployment target to your OS. Then on the second list directly left of the Deployment target, select the other files and also change Deployment target. Finally, select the other blue icon CPUTuneApp and repeat the steps to change deployment target for everything.
- Click Play icon/Compile and hopefully you will get build succeeded message.
After removing:
- It will deactivate the turboboost (recommended so you don't overheat your CPUs)
- Note: it should be possible to run with turboboost as BD_PROCHOT does not impact the capabilities of the CPU to send its own PROCHOT signal and cool down when needed. So far my tests all get a forced reset when I deactivate BD_PROCHOT and Turboboost is enable. If you experience something different please let me know in the comment or post on CPUTune github. So far I think it's just Apple screwing with us, there should be a way to restore normal functionalities even without a battery...
- Deactivate the BD_PROCHOT signal
- Reactivate frequency stepping if needed
- change ownership on the package:
- sudo chown -R root:wheel CPUTune.kext
- Load the kext into memory (remember csrutil should be set to disable for this to work, as the kext is not signed)
- sudo kextutil -v CPUTune.kext
- kextutil will show an error that the kext is unsigned, but it should load it anyway if csrutil is disabled, you can then check if it's loaded using
- kextstat
- You can also check in /var/log/cputune.kext.log
If you want to have CPUTune activated automatically at boot, just copy CPUTune.kext to /Library/Extensions/. Don't forget to make sure that the owner is correctly set:
sudo chown -R root:wheel /Library/Extensions/CPUTune.kext
Additional note: if you are noticing shutdowns when high CPU programs are running, it seems that it is caused due to interference from the tailspind and spindump daemon.
You can check this by opening console and looking into the diagnotistic reports and you will see cpu_resource.diag files being generated when the shutdown happened
You can disable those daemons by issuing the following commands:
After disabling those, I have been able to use my macbook pro even on CPU intensive tasks without any issues.
Additional note 2: if you want to restore Fans to normal behavior you can use Macs Fan Control it is available here: https://crystalidea.com/macs-fan-control/download
I'm facing a similar problem (cpu throttling) but with the battery connected.
ReplyDeleteAlready cleaned coolers and replaced thermal paste.
Temperature does not seem to be the problem.
This is a MacBook Pro Retina 13inch from Late 2012 running Catalina.
Any possible suggestions?
Obrigado
You might want to try AppleIntelInfo.kext to try to see what's happening in the CPU MSRs'.
ReplyDeleteNada, um prazer.
Oi, Cristophe, tudo bem? Em primeiro lugar, agradeço a sua tentativa de resolver esse problema! Vou escrever em inglês a minha dúvida, para manter a linguagem do blog :)
ReplyDeleteI've tried to load your kext and I'm not sure it's working here on my mac. I'm not a programmer, no previous interaction at all with Xcode, so I'm a bit lost.
I think I managed to do everything you said in your tutorial. First, I tried using your compiled kext, but it displays this error: "(libkern/kext) link error" and "(kernel) Failed to load kext org.syscl.driver.CPUTune (error 0xdc008016)".
So I tried compiling the current version of CPU Tune (available in Github) through Xcode and I think I made it. Xcode alerts 203 issues with it, but it does generate the file "CPUTuneCore.kext", so... I guess I built it?
Then I'm able to load the kext using kextutil, after changing the ownership. I can see that the kext is loaded with kextstat.
However, my CPU is still limited to 1.1 Ghz... :(
Do you know what might be happening?
I'm using Xcode 8.3, with MacOS Sierra 10.12.6.
Once again, thanks for your effort. My mac is so slow right now and the new battery will only arrive here in Brazil in a month or so, it would be really nice if I can make it a bit more bearable until then.
Hi Gabriel,
DeleteTry to change Deployment Target:
- Open this with Xcode
- Navigate into the folders and select CPUTuneCore
- In the middle of screen shows some information, go to Deployment Info and change for 10.12
- Do the same for CPUTuneApp file
This comment has been removed by the author.
ReplyDeleteThanks for the explanation. It works great! I just have a little bit inconvenient. I copied the Kext to /Library/Extension/ but when the mac wakes up the kext is not working anymore then I have to run in terminal kextunload and kextload for CPUTune again, do you know how I can do that automatically? Because when I restart de OS X, works perfectly.
ReplyDeleteThanks!
Hi, thanks for sharing your guide. I am having problems understanding how to set the owner? I have copied the next in library extension but what is the line u could use for the terminal? Thanks again, Luigi
ReplyDeleteyou have saved me, and this beautiful 2011 mbp. Now it is usable @2.20 ghz without a battery even installed.
ReplyDeleteWow amazing, my 2011 MBP is stuck at 800mhz and have been using it in windows only because of throttle stop does the job properly.
ReplyDeleteApple definitely does this on purpose so they make warranty money and people stop buying 3rd party batteries. Its a win win for them. Glad there is a solution for OSX!
Thank you for very detailed solution. However got error when loading the kext into memory.
ReplyDeleteDefaulting to kernel file '/System/Library/Kernels/kernel'
Kext with invalid signatured (-67050) allowed: { URL = "file:///System/Library/Extensions/CPUTune.kext/", ID = "org.syscl.driver.CPUTune" }
Code Signing Failure: code signature is invalid
/System/Library/Extensions/CPUTune.kext appears to be loadable (not including linkage for on-disk libraries).
Loading /System/Library/Extensions/CPUTune.kext.
Disabling KextAudit: SIP is off
KextAudit initialized: audit=F
(kernel) kxld[org.syscl.driver.CPUTune]: The super class vtable '__ZTV9IOService' for vtable '__ZTV7CPUTune' is out of date. Make sure your kext has been built against the correct headers.
(kernel) Can't load kext org.syscl.driver.CPUTune - link failed.
(kernel) Failed to load executable for kext org.syscl.driver.CPUTune.
(kernel) Kext org.syscl.driver.CPUTune failed to load (0xdc008016).
(kernel) Failed to load kext org.syscl.driver.CPUTune (error 0xdc008016).
Failed to load /System/Library/Extensions/CPUTune.kext - (libkern/kext) link error.
Failed to load /System/Library/Extensions/CPUTune.kext - (libkern/kext) link error.
Check library declarations for your kext with kextlibs(8).
I'm using compiled binary, mac OS 10.14.6, MacBook Air 5,2 (13-inch, Mid 2012). Also csrutil comand with --without kext assertion didn't work, but might be unrelated.
I'm completely newbie and sorry for unusual English.
Hi, I think you might need to recompile the code for your mac os version
DeleteHi, What I did was to download xcode 10.3 which has the sdks for MAc OS 10.14.6, then I recompile cputunecore making sure the deployment target is 10.14. Then i copied the cputunecore.kext to the root folder (Macintosh HDD). From there, I ran the code: sudo chown -R root:wheel /Library/Extensions/CPUTune.kext
Deletethen i ran the second code: sudo kextutil -v CPUTune.kext
lastly i checked with kextstat and viola it loaded and is working now.
Hey there, it gives me the same problem.
ReplyDeleteHere's what I did:
Go into recovery and disable SIP using csrutil disable
Go into single mode and deleting IOPlatformPluginFamily.kext
Go into recovery and activate SIP excluding kexts using kextutil enable - - without kext
After this, I change the ownership of CPUTune kext and I try to load it. The problem is not really the invalid signature, but the mac just shuts down and it refuses to install the package.
I read about using -cputbeta but not sure where I should add it.
I think you might need to re-compile the code
ReplyDeleteFirst, thank you Christopher for this article. You’ve no idea how much my life could be lifted off from standstill, given the COVID restrictions, if I become successful in recreating ThrottleStop like behaviour to disable BD PROCHOT and scale CPU multiplier in MacOS environment.
ReplyDeleteTo begin with I’ve one question: can I use another machine to compile CPUTune in Xcode (for a given target version 10.5.x) and then used that build on another machine that runs on 10.5.x? Or I need to compile and build CPUTune binary on the machine hardware that it’s gonna end up being tuned for?
Thanks!
ReplyDeleteAt first i'd like to say thanks to this handsome,clever and amazing dude who created this guide!
ReplyDeleteMan you are cool!
Now my little case and upd to this guide:
I have MacbookPro 2013 Early 13' running on I5 2,6 GHZ (BD PROCHOT sets it on 1.1)
I did everything like it was in guide , but Cputonecore upgraded and now this kext file is called Cputonecore.kext
I had an issue with coping of it in /Library/Extensions because of read-only mode of this folder,as i understand they made /system in read-only mode even if csrutil is disabled.
Here is the solution:
sudo mount -uw /
killall Finder
https://www.reddit.com/r/MacOS/comments/caiue5/macos_catalina_readonly_file_system_with_sip/
Kext is works on autoload,but it turns of if Mac is in sleep mode for 15-30 min+..
If you have a solution please write it here!)
Same. In my case, it occurs rarely, but unrelated to the length of sleep. Checking kextstat shows the kext is still loaded, but somehow frequency is dropped to 0.8 GHz again.
DeleteAccording to GitHub page of CPUTune, entering "echo 1>/tmp/CPUTuneProcHotRT.conf" into the terminal solved the problem for me.
Might be better to directly modify Info.plist inside of CPUTunecore.kext but haven't tried myself. Hope it helps.
Hello, Thankyou for your nice post
ReplyDeletei follow your intruction but there are a problem.. i was removed spindump and tailspind but why my macbook suddenly shut off when doing intensive task?
im using MBP Mid 2012 with Catalina 10.5.7.
thankyou, have a great day!
I think this is due to the fact that with an intensive task, the processor is too hot
DeleteHi, I just want to say a big THANK YOU, the kext and the instructions worked perfectly in my Macbook 13” early 2011 (High Sierra 10.13.6, xCode 9.4.1). The computer had a swollen battery so I removed it and the CPU was working at minimum speed (800 MHz), after compiling and loading the kext now my mac works as intended (2.3 GHz) without the need for a battery. I performed stress-tests several times (with Macs fan control loaded at login) and the processor just reach 88-90º C at max load (multicore), there was no need to remove tailspind and spindump daemons. Computer works flawlessly and took a new breath, no need to upgrade to a newer model yet. Do you accept donations? I’d like to make a small one. Again THANKS!
ReplyDeleteThanks a lot Carlos, glad it could help. If you feel like it you can donate to my favorite non-profit (or yours) and everything is cool! Mine is SeaShepherd.
DeleteThis comment has been removed by the author.
ReplyDeleteIf anyone has problems compiling, you should check the issues on GitHub. Here I posted what worked for me after spending a whole day trying to make this work.
ReplyDeletehttps://github.com/syscl/CPUTune/issues/4#issuecomment-869146300
Thanks a lot Christophe for making my macbook usable again!
Espectacular !
ReplyDeleteThank you Christophe for this great solution and thank you Nick for the detailed compiling explanation.
Faced the same problem in the last few days on my MacBook Pro 11,1 (Retina, 13-inch, Late 2013), running High Sierra 10.13.6.
So, I've done everything as you said but got no CPUTune.kext after compiling on XCode. Retried a couple of times, double checking every single point and still didn't got it. Then I tried to go on using CPUTuneCore.kext and it seems my Mac got suddenly back to normal.
Now I just have a noob question: how do I check if my CPU is running full speed now ?
Thanks a lot !
One solution could be to run a benchmark app like Geekbench 5
DeleteThey have a normal performance value for most of the available system variants that you can compare your actual results to
couldn't remove the IOPlatformPluginFamily in Bigsur
ReplyDeletenot working in BigSur
ReplyDeleteHi, first of all thank you for this "mac" saver.
ReplyDeleteso heres my problem, i found out the hard way why you shouldnt remove the battery, and as so i only did the tutorial after the remove bat part, and it worked! but couple days later, still mesmerized by the idea of having my mac back, i went and install some new software, forgot to keep an eye on the temperature and thermal kicked in, the first reboot i was all good, except for an over-consuming task, another reboot, and the mac was slow again... it doesnt matter what i do, i cant make it good again, maybe some file that i need to remover that i dont know, or something.... help! :D
This comment has been removed by the author.
ReplyDeleteWith the updated version of Mac OSX to 12.4 is sort of break something. I am not sure what but I have followed every step but cant seems to get it to work anymore. Do you have a video to show the step in case anything I did was missed out?
ReplyDeletehow do you fix throttle on Macbook running window only :(
ReplyDeleteHelo, A have Macbook Pro Mid 2010, High Sierra 10.13.6, Xcode 10.1, I downloaded and compiled from GitHub CpuTune, but I haven't CpuTune.kext , I have only CpuTuneCore.kexp. Is this same ??? Compile ran successfully and finally when I ran
ReplyDeletesudo kextutil -v CPUTuneCore.kext my Mac reset with error.
What wrong am I doing ? Please help
here's my experience on a 2012 Macbook Air on Catalina 10.15.7:
ReplyDeleteCPUTune definitely works, just compile it yourself. I used Xcode 11.7. you can download it from xcodereleases.com
my issue occurred after a security update to 10.15.7 recently. CPUTune was still running fine but the CPU started throttling again. turns out the updated replaced my deleted IOPlatformPluginFamily.kext and after I removed IOPlatformPluginFamily.kext it started working again. so it seems like IOPlatformPluginFamily.kext will prevent CPUTune from working at least on my machine.
So headsup to everyone hitting a wall. try removing IOPlatformPluginFamily.kext, CPUTune should work now!
btw big thanks to Christophe and the CPUTune team. gave my old Macbook Air a new least of life! 🙏🏼
Are there special instructions for a Opencore-booted MacBook? Using MBP 10,1 (mid-2013) and running 13.2 Ventura
ReplyDeleteany solution for linux users?
ReplyDeleteI can't find a copy of xcode without developer account (no I won't install macos)
Hey, I’m running a 2017macbook pro with Catalina
ReplyDeleteI’ve followed all the instructions on the post, but when I load the kext, it says loaded successfully, but when I try and disable prochot, nothing happens.
There’s no log file and once I rebuild the kextcache, I can’t login once I reboot…
I have to go into safe mode and move CPUTuneCore.kext and rebuild the kextcache to log in again…
Help, please
In OCLP there is an option in settings to disable throttling.
ReplyDelete