Keyboards aren’t the only area Apple has been having trouble with recently. Last week, users began getting their hands on the new 2018 MacBook Pro machines, unfortunately for those splashing the cash for the Core i9 model, some thermal throttling does occur under load. On the bright side, a fairly simple fix has already been discovered.
It turns out that the ultimate cause of this throttling is not the CPU but rather the VRM. Apple set the voltage too high, which is why performance throttling kicks in before it should. This is something that may end up being fixed via a software patch later down the line but in the meantime, there is a user-generated fix that can be used.
The fix comes courtesy of u/randompersonx on Reddit. The fix involves putting your MacBook Pro 2018 into a custom system integrity protection state and setting the laptop to allow unsigned kernel extensions. Obviously, this is fairly advanced tinkering so if you are worried about your warranty, then perhaps wait for Apple to sort this on its end. However, if you’re okay with some DIY adjustments, then you can find the fix below:
1) install https://github.com/sicreative/VoltageShift
2) CHANGE DIRECTORY to where voltageshift was installed (you can’t just run it with a full path in the command line, there is a bug in it which makes it require you actually being in the directory and writing ./voltageshift … not ~/voltageshift/voltageshift)
3) sudo chown -R root:wheel VoltageShift.kext
4) ./voltageshift read 0x610
RDMSR 610 returns value 0x4283e800dd8320
I’ll translate what the important bits here means: MSR 610 is the MSR_TURBO_POWER_LIMIT
Hex 3e8 == 1000
1000 / 8 == 125
This means that PL2 (Power_Limit_2) is set to 125 Watts. Power Limit 2 is the “Turbo Boost” limit.
Hex 320 == 800
800/8 = 100
This means that PL1 (Power_Limit_1) is set to 100 Watts. Power Limit 1 is the “Steady State” limit, ie: how much power the CPU is configured to try and pull for extended periods of time.
The math for the timing variable is complicated, so just take my word for it, but: Power_Limit_1_Time …
dd = 28 Seconds.
So, Apple has shipped the i9 Macbook Pro with it’s CPU power regulation set to to 125 Watt Turbo for 28 seconds, 100 Watt Steady state.
I’ve spent a few hours testing at many different draw rates until I could find the rate at which the VRM does not max out, for my machine, that is 49 Watts. Note that this does not include power draw for other accessories (ie: the GPU), so if you are drawing heavy power using other chips, you might need to set the limit lower than 49 watts.
I’ve also spent a few hours testing the maximum amount of time you can draw in Turbo from the VRM without maxing it out, and for my machine, it is 8 seconds.
So, putting this all together …
49 * 8 = 392
392 in hex is 188
Like I said earlier, the time values are complicated, so just take my word for it, but …
D9 = 7 seconds.
1B = 8 seconds.
9B = 10 seconds.
DD = 28 seconds. (default)
Compiling this all together leads to the CORRECT MSR for this machine: 0x4283E8001B8188
5) And you can set this using this command: ./voltageshift write 0x610 0x4283E8001B8188
Note, this gets overwritten every time you reboot, so if you want to set this, you will need to do it on boot. I’ll probably write up a launchd script to do this.
We have tried this fix ourselves on an in-house Core i9 MacBook Pro and it did work. Alternatively, there is an app called Volta for macOS, using this you can undervolt the CPU, which also seems to give positive results based on our own test.
Obviously, it appears that Apple did not test the Core i9 MacBook Pro thoroughly enough. Users shouldn’t really need to generate these fixes themselves when shelling out thousands of pounds. However, now that the root cause has been figured out, Apple will likely be able to provide an official fix itself.
KitGuru Says: As a long term MacBook Pro user, I was very surprised to hear of these throttling issues. Hopefully Apple will confirm that a fix is on the way soon, although users already seem to have done most of the legwork on that front.