I'd like to create this guide for those of you who find themselves in a situation similar to mine. I have a Mid-2014 15" 2.5GHz MBP with the GT750M. It was salvaged from a reseller on FB who said it had graphics issues. It turns out that a lot of sensors in the Motherboard for some reason read at 128C, and thus trigger Panic mode (where the fans spins like crazy, and the performance is reduced to the lowest power state possible), In my case, mine is stuck at 800MHz and was unable to make the performance go any higher.
I'd like to explain what I have gathered throughout the insane amount of research I've done on this.
When a Mac has a tripped sensor, it reads 0/128/-128 and thus sends a signal to the SMC to throttle because I thinks something is overheating. This is also the case for when a Battery is missing or damaged because it has sensors. Same story with a damaged rubber cable touchpad, although at that point you also likely have a non-working KB/Touchpad too.
Anyways, depending on what sensors you have tripped you will get one of two Throttling behaviours. There's CPU Throttling, which will make the CPU reduce its clock speed through BD_PROCHOT. This tells the CPU its too hot and will throttle. There's also the system level Panic the SMC tells the OS, which results in the OS Itself asking the CPU to stay in its slowest possible Speed. I'm not entirely sure that's how it goes but as we'll learn later, the solution to the latter is OS based.
In preparation: This guide will specifically cover the Mid 2014 15" MacBook Pro running macOS Big Sur 11.6.1. I believe this solution is similar in Catalina and Monterey, and its significantly easier to fix on earlier versions if you're into that. However, one of the software we will use isn't compatible with anything older than Haswell, so I'm not sure Ivy Bridge Macs and older may be supported.
You will be using two pieces of software that will control the behavior of your Mac, and a manual fix that will require you to tinker with the terminal in Recovery mode, so beware for what you do!
Identify your Problem
Download and install this monitoring tool to determine wether you have tripped SMC sensors.
Download this other monitoring tool to monitor your CPU behavior. You only need to pay attention to the following areas I have squared in red in this screenshot. As you can see, if Core AVG is stuck in a persistent low frequency, then you have CPU Throttling with BD_PROCHOT; however, if you also have Core REQ at the exact same speed, then we are in trouble, since the OS is also asking for that same speed, and thus requires the separate fix.
So, we have established that there are two possible problems affecting your Macs performance in this case, combined with the revenant information from HWSensors, if any are tripped besides CPU and GPU, you will have OS Throttling (this is also known as the kernel_task or system taking most of your processor over in System Activities). If your GPU/CPU can't read temps or the battery is missing (like in my case, where the GT750M reports 0), then you will have BD_PROCHOT and thus CPU Throttling.
Disabling BD_PROCHOT / CPU Throttling
This solution, just like in Windows, is unfortunately not permanent and will have to be applied on boot, and every time you wake the computer from sleep or hibernation. We will be using the latest release of VoltageShift, an Open-source software that allows us to modify MSR and undervolt. Do note that this only works on Haswell machines and newer. There's a chance you could use CPUTune or other software that is able to write to MSR values directly, but this guide exclusively focuses on VoltageShift.
This tool is a command-line only. We will be utilizing the following commands once we have finished.
I have left my exact commands as examples, but you have to change the "cd" command to wherever you have extracted your voltageshift folder, in my case, that folder is in the desktop chilling.
We will execute the following command to read what your MSR value for BD_PROCHOT is
You will be given back something along the lines of "0x24005F", accompanied by a HEX string of the same stuff. It will likely vary on your machine, so you should just change the last letter to an E. You will jot it down, as follows
As you can see, we will write to "0x1FC" the same value it was given back, but with an "E" instead of the "F" it read on my case.
Now, you can complete the command line automation, with something like what my initial example was. You may now run this command manually on boot every-time, or create a script that does so on every boot.
Disabling OS Throttling / Kernel_Task / IOPlatformPluginFamily.kext
You should refer to this nifty guide to follow along! Its' best explained there.
This basically stops the OS from understanding or telling the CPU to stay in its lowest possible power state, and allows you to activate dynamic power delivery based on demand.
Do note that in my case, after these modifications were made, boot times were extended significantly for some reason. It was scary the first time because I thought I f-ed up, but no it was just taking quiet longer.
Final thoughts:
These are the best methods I have found to restore full performance on my Mac. it sure isn't perfect but its much better than what I had and allow me to use my machine until I figure the issues properly.
Do note however, these solutions only work once you have booted and are on your desktop. so, Boot times and indeed update times are very long since the machine is still more or less still at 800MHz. In order to properly fix the machine we would need to write MSR as soon as the OS is loading, and keep doing so every time the machine wakes up from sleep. For now, this works more than fine for me, and I hope its able to better help others too!
This guide will be updates as I refine this method and make it less janky!
I'd like to explain what I have gathered throughout the insane amount of research I've done on this.
When a Mac has a tripped sensor, it reads 0/128/-128 and thus sends a signal to the SMC to throttle because I thinks something is overheating. This is also the case for when a Battery is missing or damaged because it has sensors. Same story with a damaged rubber cable touchpad, although at that point you also likely have a non-working KB/Touchpad too.
Anyways, depending on what sensors you have tripped you will get one of two Throttling behaviours. There's CPU Throttling, which will make the CPU reduce its clock speed through BD_PROCHOT. This tells the CPU its too hot and will throttle. There's also the system level Panic the SMC tells the OS, which results in the OS Itself asking the CPU to stay in its slowest possible Speed. I'm not entirely sure that's how it goes but as we'll learn later, the solution to the latter is OS based.
In preparation: This guide will specifically cover the Mid 2014 15" MacBook Pro running macOS Big Sur 11.6.1. I believe this solution is similar in Catalina and Monterey, and its significantly easier to fix on earlier versions if you're into that. However, one of the software we will use isn't compatible with anything older than Haswell, so I'm not sure Ivy Bridge Macs and older may be supported.
You will be using two pieces of software that will control the behavior of your Mac, and a manual fix that will require you to tinker with the terminal in Recovery mode, so beware for what you do!
Identify your Problem
Download and install this monitoring tool to determine wether you have tripped SMC sensors.
Download this other monitoring tool to monitor your CPU behavior. You only need to pay attention to the following areas I have squared in red in this screenshot. As you can see, if Core AVG is stuck in a persistent low frequency, then you have CPU Throttling with BD_PROCHOT; however, if you also have Core REQ at the exact same speed, then we are in trouble, since the OS is also asking for that same speed, and thus requires the separate fix.
So, we have established that there are two possible problems affecting your Macs performance in this case, combined with the revenant information from HWSensors, if any are tripped besides CPU and GPU, you will have OS Throttling (this is also known as the kernel_task or system taking most of your processor over in System Activities). If your GPU/CPU can't read temps or the battery is missing (like in my case, where the GT750M reports 0), then you will have BD_PROCHOT and thus CPU Throttling.
Disabling BD_PROCHOT / CPU Throttling
This solution, just like in Windows, is unfortunately not permanent and will have to be applied on boot, and every time you wake the computer from sleep or hibernation. We will be using the latest release of VoltageShift, an Open-source software that allows us to modify MSR and undervolt. Do note that this only works on Haswell machines and newer. There's a chance you could use CPUTune or other software that is able to write to MSR values directly, but this guide exclusively focuses on VoltageShift.
This tool is a command-line only. We will be utilizing the following commands once we have finished.
Code:
cd Desktop/voltageshift_1
./voltageshift write 0x1FC 0x24005E
I have left my exact commands as examples, but you have to change the "cd" command to wherever you have extracted your voltageshift folder, in my case, that folder is in the desktop chilling.
We will execute the following command to read what your MSR value for BD_PROCHOT is
Code:
./voltageshift read 0x1FC
You will be given back something along the lines of "0x24005F", accompanied by a HEX string of the same stuff. It will likely vary on your machine, so you should just change the last letter to an E. You will jot it down, as follows
Code:
./voltageshift write 0x1FC 0x24005E
As you can see, we will write to "0x1FC" the same value it was given back, but with an "E" instead of the "F" it read on my case.
Now, you can complete the command line automation, with something like what my initial example was. You may now run this command manually on boot every-time, or create a script that does so on every boot.
Disabling OS Throttling / Kernel_Task / IOPlatformPluginFamily.kext
You should refer to this nifty guide to follow along! Its' best explained there.
This basically stops the OS from understanding or telling the CPU to stay in its lowest possible power state, and allows you to activate dynamic power delivery based on demand.
Do note that in my case, after these modifications were made, boot times were extended significantly for some reason. It was scary the first time because I thought I f-ed up, but no it was just taking quiet longer.
Final thoughts:
These are the best methods I have found to restore full performance on my Mac. it sure isn't perfect but its much better than what I had and allow me to use my machine until I figure the issues properly.
Do note however, these solutions only work once you have booted and are on your desktop. so, Boot times and indeed update times are very long since the machine is still more or less still at 800MHz. In order to properly fix the machine we would need to write MSR as soon as the OS is loading, and keep doing so every time the machine wakes up from sleep. For now, this works more than fine for me, and I hope its able to better help others too!
This guide will be updates as I refine this method and make it less janky!