*[Updated]*
Apple released an update to address this issue: https://support.apple.com/kb/DL1973?locale=en_US
You should install it.
Apple's update handles this better than my patch for several reasons:
1) It does not require you to disable SIP for kext
2) it regulates power at a higher level, not at the CPU. This means that a combined workload of both CPU and GPU will work much better with Apple's update than it does with my MSR change.
3) You don't want to be stuck on an old version, so ultimately, you have no choice but to take the update
4) I've done some preliminary testing, and it essentially has the same burst characteristics for purely-CPU load as my patch. I actually get very slightly lower Cinebench scores on a cold run than with my MSR, likely because apple is throttling power very slightly below my thresholds.
5) If you have already installed the patch as I described below, you should reboot back into recovery mode and re-enable SIP (csrutil enable), and if you added a launchd (which I never actually described how to do), you should remove it. If you did not add a launchd, and just followed what I posted, a reboot will remove the setting.
6) For those who are curious, because Apple is managing this at a higher level, the MSR 0x610 is unchanged, and still reads as it did before.
Original post below:
Hello all,
tl;dr ... I found the magical command which makes my i9 MBP capable of Cinebench scores of ~1100 on the first run, and 1000-1100 on each successive run, without throttling even if I run it back-to-back-to-back-to-back.
Like many here, I've got an i9 2018 MBP, and I've also experienced the throttling as others have seen.
As you may have read on other threads, the ultimate root cause of the very bad performance drop during the throttling is not thermal throttling of the CPU, but rather power throttling of the VRM (voltage regulator module), being unable to satisfy the power desires of the i9 CPU.
When the VRM maxes out (overheats ... but this is different from CPU thermal throttling), the motherboard sends a signal to the CPU to drop it's speed to minimum (800Mhz) to allow the VRM a chance to cool down. The CPU then returns to it's previous desire to pull maximum power, spins up to high turbo speeds, and the cycle repeats again. When the CPU keeps switching from Turbo to 800Mhz, it is in a very inefficient state, so the amount of work being done relative to the amount of power drawn decreases.
I'm not giving Apple a free pass on this, and wholeheartedly agree with others that such tuning should not be necessary for users to do, but, if you have one of these machines and would like to mitigate the situation, you do have an option.
Warning: To do this, you will have to put your system in a "custom" SIP (System Integrity Protection) state to allow unsigned KEXT (Kernel Extensions), this reduces security on your system somewhat, but this is at least not completely disabling SIP.
Warning2: If you do this, and it damages your laptop, and Apple does not cover your warranty, that is your own problem. You are doing this at your own risk. With that said, In my personal opinion, the default state is actually more damaging to the laptop than this custom state (As you will see 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 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.
In my opinion, Apple seriously screwed up here. The testing that I did was easily within Apple's capabilities, and it is highly irresponsible of them to ship these machines out this way. As far as I am aware, the MSR is set to the intel's default ... and clearly Intel expects that if you are going to use this default, you will have a machine capable of delivering 100 Watts of power steady state. Intel does not expect that you must have thermal capabilities of shedding those 100 Watts, as the chip will thermally throttle if it reaches TJunction (100C), and that thermal throttling would not be nearly as painful as this type of VRM throttling. Most likely, if Apple wanted to handle things that way, they could have figured out a way to attach the heatpipe to the VRM. Even if they did not want to handle things that way, they should have reduced the MSR value from the factory to something that the VRM is actually capable of delivering (ie: My settings).
The good news is that these settings increase the performance by at least 20% (and possibly much more depending on the workload), and Apple can adjust this setting (or handle the VRM overload using other power management logic). Even if Apple doesn't, you as a consumer can do this yourself.
The bad news is that it's clear that this i9 chip can probably do signifigantly better if it were driven with a better VRM (and had adequate cooling as well), and could probably get 20-25% faster speeds than with my settings if the power system were up to task. There is no way that Apple can get that additional gain with the current hardware design, short of a recall to change out the heatsink to something that cooled the VRMs, and replace the thermal paste with something like Liquid Metal. It's pretty clear that there is no additional space for bigger fans, so apple's options here are very limited.
The even worse news: If apple does nothing, and you do not change the MSR settings, when your system throttles this way and alternates back and forth between 800Mhz and full-Turbo, it is putting an EXTREME load on the VRM ... This will almost certainly shorten the lifespan of the VRM causing early logic board failure.
If anyone has a 2018 15" MBP with the i7 2.6 chip, I'm very interested to hear what the default MSR settings are for that chip, and also how Cinebench scores look with my tuned settings. These tuned settings should be acceptable for any 2018 15" MBP.
Of course, as I said above, if you have a heavy GPU load, this does not leave any budget for that, so you will need to adjust your settings accordingly (and that's homework for you -- I don't use my GPU in heavy sustained workloads ever). Also, these settings assume reasonably sane cooling environment ... Ie: sitting on a desk in an air conditioned room. If you are testing this outdoors at 100F, I'd assume you will still get VRM throttling. If you are testing in a freezer, or outdoors in the wintertime ... you might be able to get more than 49W steady-state.
Edited to add:
If you want timing values shorter than 7 seconds ....
6 Seconds: 99
5 Seconds: 59
4 Seconds: 19
3.5 Seconds: D7
2.5 Seconds: 57
2 Seconds: 17
1.5 Seconds: 95
1 Second: 15
Apple released an update to address this issue: https://support.apple.com/kb/DL1973?locale=en_US
You should install it.
Apple's update handles this better than my patch for several reasons:
1) It does not require you to disable SIP for kext
2) it regulates power at a higher level, not at the CPU. This means that a combined workload of both CPU and GPU will work much better with Apple's update than it does with my MSR change.
3) You don't want to be stuck on an old version, so ultimately, you have no choice but to take the update
4) I've done some preliminary testing, and it essentially has the same burst characteristics for purely-CPU load as my patch. I actually get very slightly lower Cinebench scores on a cold run than with my MSR, likely because apple is throttling power very slightly below my thresholds.
5) If you have already installed the patch as I described below, you should reboot back into recovery mode and re-enable SIP (csrutil enable), and if you added a launchd (which I never actually described how to do), you should remove it. If you did not add a launchd, and just followed what I posted, a reboot will remove the setting.
6) For those who are curious, because Apple is managing this at a higher level, the MSR 0x610 is unchanged, and still reads as it did before.
Original post below:
Hello all,
tl;dr ... I found the magical command which makes my i9 MBP capable of Cinebench scores of ~1100 on the first run, and 1000-1100 on each successive run, without throttling even if I run it back-to-back-to-back-to-back.
Like many here, I've got an i9 2018 MBP, and I've also experienced the throttling as others have seen.
As you may have read on other threads, the ultimate root cause of the very bad performance drop during the throttling is not thermal throttling of the CPU, but rather power throttling of the VRM (voltage regulator module), being unable to satisfy the power desires of the i9 CPU.
When the VRM maxes out (overheats ... but this is different from CPU thermal throttling), the motherboard sends a signal to the CPU to drop it's speed to minimum (800Mhz) to allow the VRM a chance to cool down. The CPU then returns to it's previous desire to pull maximum power, spins up to high turbo speeds, and the cycle repeats again. When the CPU keeps switching from Turbo to 800Mhz, it is in a very inefficient state, so the amount of work being done relative to the amount of power drawn decreases.
I'm not giving Apple a free pass on this, and wholeheartedly agree with others that such tuning should not be necessary for users to do, but, if you have one of these machines and would like to mitigate the situation, you do have an option.
Warning: To do this, you will have to put your system in a "custom" SIP (System Integrity Protection) state to allow unsigned KEXT (Kernel Extensions), this reduces security on your system somewhat, but this is at least not completely disabling SIP.
Warning2: If you do this, and it damages your laptop, and Apple does not cover your warranty, that is your own problem. You are doing this at your own risk. With that said, In my personal opinion, the default state is actually more damaging to the laptop than this custom state (As you will see 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 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.
In my opinion, Apple seriously screwed up here. The testing that I did was easily within Apple's capabilities, and it is highly irresponsible of them to ship these machines out this way. As far as I am aware, the MSR is set to the intel's default ... and clearly Intel expects that if you are going to use this default, you will have a machine capable of delivering 100 Watts of power steady state. Intel does not expect that you must have thermal capabilities of shedding those 100 Watts, as the chip will thermally throttle if it reaches TJunction (100C), and that thermal throttling would not be nearly as painful as this type of VRM throttling. Most likely, if Apple wanted to handle things that way, they could have figured out a way to attach the heatpipe to the VRM. Even if they did not want to handle things that way, they should have reduced the MSR value from the factory to something that the VRM is actually capable of delivering (ie: My settings).
The good news is that these settings increase the performance by at least 20% (and possibly much more depending on the workload), and Apple can adjust this setting (or handle the VRM overload using other power management logic). Even if Apple doesn't, you as a consumer can do this yourself.
The bad news is that it's clear that this i9 chip can probably do signifigantly better if it were driven with a better VRM (and had adequate cooling as well), and could probably get 20-25% faster speeds than with my settings if the power system were up to task. There is no way that Apple can get that additional gain with the current hardware design, short of a recall to change out the heatsink to something that cooled the VRMs, and replace the thermal paste with something like Liquid Metal. It's pretty clear that there is no additional space for bigger fans, so apple's options here are very limited.
The even worse news: If apple does nothing, and you do not change the MSR settings, when your system throttles this way and alternates back and forth between 800Mhz and full-Turbo, it is putting an EXTREME load on the VRM ... This will almost certainly shorten the lifespan of the VRM causing early logic board failure.
If anyone has a 2018 15" MBP with the i7 2.6 chip, I'm very interested to hear what the default MSR settings are for that chip, and also how Cinebench scores look with my tuned settings. These tuned settings should be acceptable for any 2018 15" MBP.
Of course, as I said above, if you have a heavy GPU load, this does not leave any budget for that, so you will need to adjust your settings accordingly (and that's homework for you -- I don't use my GPU in heavy sustained workloads ever). Also, these settings assume reasonably sane cooling environment ... Ie: sitting on a desk in an air conditioned room. If you are testing this outdoors at 100F, I'd assume you will still get VRM throttling. If you are testing in a freezer, or outdoors in the wintertime ... you might be able to get more than 49W steady-state.
Edited to add:
If you want timing values shorter than 7 seconds ....
6 Seconds: 99
5 Seconds: 59
4 Seconds: 19
3.5 Seconds: D7
2.5 Seconds: 57
2 Seconds: 17
1.5 Seconds: 95
1 Second: 15
Last edited: