Updated 2023-06-16: After 3 years, I was eligible for a Macbook refresh. I "solved" the overheating problem with a hardware upgrade to a Macbook Pro 14 inch, M1 Max, 32 GB RAM, 2021 M1 Silicon architecture. The change is documented in my dotfiles.
After nearly 2 years of operation, the Macbook's heat output became worrying. The external display plays a role in my workspace, as well as turbo-boost triggered from apps. The problem is not new, many ideas and solutions are provided online. Read on to learn more.
When an external monitor is plugged in, macOS automatically switches to the more powerful graphics card. In my case, the Intel Core i7 is accompanied by the AMD Radeon Pro 5300M with 4GB, more powerful than the iGPU Intel UHD Graphics 630 built into the processor.
CPU temperature levels range from 75 to 100 degrees Celsius when under load, 55-60 when starting to work. The AMD GPU in use heats up to 75 degrees with the external display turned on.
The following displays are in use:
$ system_profiler SPDisplaysDataType | grep -C1 Resolution
Display Type: Built-In Retina LCD
Resolution: 3072 x 1920 Retina
Framebuffer Depth: 30-Bit Color (ARGB2101010)
Resolution: 3440 x 1440 (UWQHD - Ultra-Wide Quad HD)
UI Looks like: 3440 x 1440 @ 60.00Hz
Problem: The AMD GPU drains the power source even when running idle. Big Sur and Monterey made the problem worse, it seems to be a bug in the AMD driver.
I've documented my entire research sourcing from multiple articles. My solution is at the bottom; feel free to scroll below. Spoiler: You'll need to upgrade to macOS Monterey.
First steps with analysing
Activity Monitor with Spotlight/Alfred/Raycast, and switch to the CPU tab. You'll see the
WindowServer task consuming the most CPU resources.
You can monitor the behaviour by installing additional tools.
- Mac's Fan Control as a Homebrew cask:
brew install macs-fan-control- after installation, it asks for root permissions to control the fan speed. Cancel the dialogue to just monitor read-only.
- istat menus trial as a Homebrew cask:
brew install istat-menus- after installation it asks for your root password to install additional components.
- Turboboost Switcher trial as a Homebrew cask:
brew install turbo-boost-switcher
- Monitor thermal levels, temperature and fan speed on the CLI:
$ sudo watch -d -t -n1 thermal levels
$ sudo powermetrics --samplers smc | egrep -i "Fan|CPU die"
CPU already overheated?
kernel_task process seems to consume lots of resources. One of the OS tasks is to schedule low resource tasks to throttle the CPU, it would otherwise overheat. That means when
kernel_task is on the top activity list, your system is actually consuming too many CPU cycles. Read more in this stackexchange answer.
The Macbook Pro 16 2019 is based on Intel x86 CPUs. When looking up the specs for the Core i7 version, it unveils 14nm for the chip. The planned 10nm had to be postponed, and is not available in the Macbook. The 2019 Macbook therefore got better fans to address heat concerns. Intel uses Turboboost to overclock the processor, 2.6GHz boosted to 4.5GHz. This drains more power and produces more heat, and it could negatively influence the behaviour of the external monitor temperature problem.
Thus far, I've only used the suggested Turboboost Switcher for monitoring the temperature and fan speed. I'm hesitant in changing OS settings on the kernel level which may break future upgrades. Let's see if there are alternatives.
Refresh rates and connection ports?
There's numerous discussion threads about different refresh rates. I've experimented with switching 60 to 100 Hz for the external monitor with no improvements.
60Hz stays at ~16W, while 100Hz increase AMD GPU power usage 19W. Therefore, a dead end.
Older community threads mention that charging on the right side are better. The connection ports for the display/charging did not make a difference in my tests.
Closing the lid (clamshell mode)
I'm using USB-C to USB-C where the ultrawide 3440x1080 (1440p) Samsung monitor also provides 65W power drain. I did not try HDMI or display-port yet (problems with adapters detecting the external display, USB-C worked best).
Closing the lid can make a difference, with one display less to render. Default usage for the Radeon GPU with built-in and external display is ~16W.
Closing the lid is called
Clamshell mode thus requiring external keyboard, trackpad, etc.
Although this method saves energy, I don't like it for these reasons:
- The Macbook emits heat through the keyboard and upper surface, which gets worse with closing the lid, and still might lead to overheating effects.
- The fingerprint sensor on the power button gets hidden. This is a quick way for 2FA authorization. There is a new 2021 edition of the "Magic Keyboard Touch ID", which only works with Apple's M1 chips (thus needing a new Macbook, which I will get in early 2023).
Solution: Low Power Mode in macOS Monterey
macOS Monterey introduced a new setting called
Low Power Mode which will reduce energy consumption. If you're on an older version of macOS, you'll need to upgrade the OS first, including backup routines.
Low power mode also disables Intel's Turboboost, avoiding higher frequencies and thus temperature and energy usage. The "Radeon High Side" power usage is reduced to ~5W when an external display is connected too. Users on Reddit report it working; I've just tried it and will monitor its behaviour.
Settings > Batterie > Power Adapter and enable the check box.
Without energy saving mode, the Radeon GPU consumes ~16W.
With the energy saving mode, this is significantly reduced to ~9W.
Continuous overheating is not an option, making hardware failure more possible in the future. My daily operations with Chrome, Slack, Zoom can easily trigger the CPU Turboboost with a browser tab consuming one CPU core, thus
kernel_task coming to prevent overheating. Most of my resource intense workflows run somewhere in the cloud already. I'll continue to monitor the low energy mode to see if it helps, and update this blog post in case.
An unspoken feature request for macOS - allow to disable Intel's Turboboost, separated from limiting the AMD GPU power consumption. The latter probably is a software bug, hard to nail down. I'm guessing one more reason for Apple to invest into own hardware design with the M1 processor unifying CPU and GPU, and benefit from their own platform in the long term.
More resources to follow:
- MacBook 16-inch Fan Noise at https://discussions.apple.com/thread/250878229