Apple M2 Pro – Still Thermal Throttling!

Yep. Thermal throttling is totally fine!

So the Apple M2 has been out for some time now (Over a year at this point), and Apple is still repeating many of the same mistakes they’ve been making… for years at this point with the MacBook Pro. Recently, I was handed an M2 MacBook Pro 16″ Mac to use as a daily driver machine. There’s a lot to like about the machine, from the Wi-Fi 6E support, to the battery life, to the display, to even the Trackpad and Speakers. There is one thing which Apple has not yet figured out fully, and that is the Thermals.

With the design of the M1 and M2 MacBook Pros, Apple has increased the thickness of the chassis, revamped the cooling with larger fans and heat sinks, and reduced the amount of power the system itself actually pulls thanks to their new ARM System on Chip. For reference: An M1 Pro can consume ~35 watts under full CPU load, with extra power usage above that if the GPU, Neural Engine, and Video Accelerators are in use simultaneously. Older Intel CPUs under full load could turbo up to 70+ watts of power and would usually level off around 45 watts of power at max sustained performance, and the systems would also sport a 35w Dedicated GPU which could be active simply by connecting an external display. The VRMs on those systems could barely handle the power draw and were often culprits for throttling. The thinner chassis and heat sinks of the 2016 and beyond Intel Macs simply couldn’t dissipate all of the heat, and those machines were notorious for thermal throttling to the point where the system would become sluggish during normal office workloads. Just plugging in an external monitor was all you needed to do half the time.

The issue with the M1 and M2 Macs isn’t an issue with the cooling capacity of the systems. The issue is simply with Apple’s Fan Curves, and lack of choice built into the operating system when it comes down to controlling the fan curve. It seems that Apple runs the Mac as silent as possible, allowing the CPU to reach up to 100°C before throttling back the performance of the chip. At least, that’s how it ends up behaving on my machine, with the fans gradually ramping themselves up to 1,500RPM (max speed is just around 6,500RPM). Don’t believe me? Check out this photo of the CPU temperature. Take a look at the menu bar next to the picture of a fan.

The utility in use to see the temperature is called Macs Fan Control, a “Freemium” utility which provides the ability to monitor key temperatures of the system such as CPU temperature (on a per-core basis), GPU Temperature, Battery Temperature, and other temperature related sensors on the board. It displays the temperature of any sensor you choose on the menu bar (In my case, I have selected the CPU Median temperature), and allows for controlling the fan speed. In my instance, the fan was left on Automatic mode, which applies Apple’s default settings.

The utility to generate the graph in the Terminal is a combination of two programs. The first is “powermetrics” which is a built-in macOS command line utility to obtain information about the Mac’s hardware utilization, clock speeds, and power draw. The second part of this is a Python script called asitop, which behaves similar to the htop program but for hardware.

Within a minute of taking the previous screenshot, the Mac reached the 100°C point on the processor, and began rapidly dropping clock speeds on the Performance Cores (8 Cores worth) from 3.2Ghz down to 2.1Ghz, and at times, even lower than that. This resulted in a 30-40% performance drop for the workload I was running, and this also began to cause scheduling issues on the same workload being distributed onto the E-Cores, as threads began to bottleneck waiting on other threads to finish their work. As the throttling occurred, CPU temperature dropped down to 60°C, and the power usage by the chip was cut down by more than half, but during this entire time, the fans refused to go above 1,500RPM!

Now, if I wanted to bring the performance back to full capability, all I had to do was cool the chip down sufficiently to convince the Mac to bring the performance back up, right? Wrong!

At first, I set the fans using Macs Fan Control to run at 100% on both the left and right fans. This meant they entered “Jet Engine” mode and spun at 6,500RPM. I could watch the CPU Temperature continue to fall, as far down as 40°C. But the machine would not return the processor back to full performance. The trick, instead, was to completely stop the workload which was maxing out the processor, wait for the machine to settle down, restart the workload, and then like “magic” the machine is back running at full performance.

Since running the fans at full blast all the time is pretty annoying, I set Macs Fan Control to instead, control the fan speed based on the CPU temperature, setting 70°C as the Maximum Temperature for both fans to be controlled around, and setting the reference sensor to the same one I was using for the Menu bar – Processor Median Temperature. Doing this allows the machine to run silent while being used for day to day work and short workloads where the processor is maxed out. For long workloads, the fans will slowly ramp up, and the chip will remain at maximum performance. The end result? 70°C at 3,200RPM fan speed, and full processor performance.

But, this is an Operating System issue! You should update!

The Mac is already on macOS Sonoma 14.1, which is the latest available as of this post.

But, you should enable High Performance / High Power Mode in the Battery Settings!

Apple didn’t make this available for the M1 Pro and M2 Pro chips. This is where my hint earlier about this being a lack of choice comes into play. Apple sells the M1 Max and M2 Max chips in the same machine chassis, which makes available a “High Power” setting which will trade fan noise for performance. It’s documented right here on their website! However, it was never made available to the M1 Pro and M2 Pro, and it’s not available on any of the 14″ machines either (these are equipped with a single fan, if I recall, and these too are suffering from thermal throttling). If this were an option for me to choose from, I wouldn’t need to rely on a third party utility to ramp up the fans.

But, you’re using some sort of adapter or power supply that isn’t from Apple! The machine is being power starved!

I’m using the 140 Watt Charger and MagSafe 3 cable that shipped with the Mac. The battery is full. The chip itself is not even exceeding the power usage of an Intel Mac which operated on a 96 Watt USB-C charger. There is nothing else besides the power connector attached to the Mac.

Maybe there are too many applications running Intel / x86 code on the system!

This should never be the answer. A processor in a laptop that costs $2,600+ USD (as of the time of writing) that consumes 35 Watts of power, in a 16″ chassis that is twice the thickness of my personal HP laptop with an AMD Ryzen Processor and a plastic chassis, should not be hitting 100°C and refusing to ramp up the fans, just to throttle the processor to 60% of its actual performance instead. That sounds like something a cheap PC would do.

Maybe something is wrong with the OS Install / Some Customization made is breaking it!

The OS install is less than a week old, and was installed by using DFU Restore with the Apple Configurator Utility. Nothing was restored from Time Machine or iCloud. This puts the machine in a cleaner and more trustworthy (untainted) state than how it shipped from the factory. If using Apple Configurator to fresh install my OS out of the box is nuking some machine specific customization, then that is bad design. Likewise, I only installed the mentioned utilities because I noticed the performance being sub-par in some applications over time.

What is this actually affecting?

This affects a number of programs I run. For example…

  • Folding@Home – This application makes heavy use of system resources in the background. Essentially, what you don’t use, goes towards distributed computing for medical research. Folding@Home is a fabulous project which has assisted with COVID-19 research, research into cancers and other diseases, and other medical related research for creating medicine. Folding@Home depends on people returning work units in a timely manner, and for laptops, this usually means not dialing back the resource consumption of the program. If work units do not get returned before the expiration date, the work is discarded and lost forever.
  • Handbrake (Video Transcoding) – This is a popular video transcoding program built on the FFMPEG project. This program is capable of using the Apple Media Engine built into the M1 and M2 chips for video encoding and decoding. While Apple has pretty good codec support overall and a VERY capable media engine, the media engine does not accelerate all formats. For example, a notably absent codec is AV1. When transcoding multi-hour media (like downloaded VODs from YouTube, Twitch, or Plex Server content) to the AV1 format, all of this work will be pushed to the CPU. It will use everything. It will take a while. If I’m transcoding to HEVC, then sure, everything runs very fast and very efficiently because the Media Engine is there, and specifically tailored for that use case. Now, this issue is not specific to just Handbrake or other open source software. This can also affect professional tools such as Adobe Premiere, Final Cut Pro, Divinci Resolve, you name it.
  • Compress/Decompression Operations – A task I occasionally need to perform on the Mac is the compression and decompression of files. You know, ZIP files to name a simple example. Or in my case, I may be dealing with Windows Image files (WIM) where I need to recompress the files down to under 4GB, and possibly also split them in order to create Windows installation media. Because, well, for some reason macOS still can’t write to NTFS drives and I need to install MacFUSE and NTFS-3G to make that happen. Using wimlib / wimlib-imagex to recompress these files, which can be multiple gigabytes in size, can easily take 15-30 minutes depending on what is being packed in.

    Note: At one point in time with the M1 Pro, I attempted to recompress two separate WIM files at the same time with this utility. The Mac ended up thermal throttling, showing 600% kernel_task usage, and subsequently ended up kernel panicking with a watchdog timeout, destroying ALL progress. I guess this was too much for macOS to schedule properly, as the whole Mac became a stuttering mess once the throttling began. This is actually how I learned that the M1 Pro and now, the M2 Pro are experiencing thermal issues out of the box.
  • Gaming: Mac gaming is always this touchy subject. On one hand, Apple seems to want to try to encourage it. On the other hand, not implementing Vulkan for easier maintenance of software between various operating systems like Windows and Linux is a big slap in the face. No one likes running Vulkan-in-Metal wrappers. Games tend to be rather performance heavy, and while they may not always use the CPU fully, they will certainly hit the GPU and CPU reasonably hard. If the chip is throttling with CPU only workloads, I can only assume it’s going to throttle under similar workloads.
  • Software Compilation – Modern software is at times, massive. Just compile Chromium from source and see what I mean. If you’re building massive pieces of software and it’s not built for operating on lowest common denominations like the Intel Celeron, it’s probably going to take a while on processor bound workloads. Macs are pretty popular machines for this sort of task. It would make sense to not have programs take longer than they need to in order to build.
  • AI / Machine Learning – Mostly sticking that in here because that is this year’s buzzword. The Mac does sport a Machine Learning / Neural Engine region within the SoC. Long running workloads such as training and processing which utilize this hardware along with other parts of the SoC such as the CPU, Memory Controller, and GPU, can and will suffer if the chip is throttling back due to heat.
  • Longevity – While modern chips are quoted as being able to run safely at the temperatures I’m seeing, they really shouldn’t be. Thermal throttling has always been a sign of trouble. Massive temperature swings over time can and will weaken solder joints, encourage electromigration, dry up thermal compound, and risk blowing out weaker portions of the silicon sooner. Personally, I have already seen my own fair share of M1 and M2 Mac failures, primarily caused by SSD Storage failure (that’s another topic for another day), but heat can also be a contributor to that. As seen in the past with the regular MacBook (both Intel and Apple Silicon), running at high temperatures due to passive cooling has given those machines a shorter than expected lifespan.

What can we do?

For now? It seems the best solution is to rely on third party utilities, just like you do on a PC, to manage your fan speeds, temperatures, and to prevent the M2 from thermal throttling. Controlling fan speed with third party utilities is a very PC thing to do, because Windows doesn’t have it built in, no one wants to reboot into the BIOS just to adjust fan curves all the time, and well, Linux has the same sort of problem. Apple’s machines simply cost too much for the machines to still have throttling issues all of these years, and no toggle to balance fan noise over performance.

By not providing the option to adjust fan speeds / performance biases on a machine that, once again, costs $2,600 or more, and instead accept a loss of 40% or more on the processor performance, that seems a bit odd. I hope this is simply an oversight or bug with Apple’s M1 and M2 chips, and not something they’ve intentionally segmented into an M1/M2 Pro vs. M1/M2 Max sales segment. Because that is shameful.