14 Days of Christmas with the M1 Pro

Posted on Wed, Jan 5, 2022 🍎 Apple 🎮 Gadgets

I was able to get my hands on a new M1 Pro Macbook last December 22. With the current supply shortage, the most reasonably priced model I found in stock was a 14 inch M1 Pro with 8 CPU Cores, 14 GPU Cores, 512GB SSD, and 16 GB RAM. I had a lot of expectations in terms of feel and performance based on numerous reviews I’ve seen online, and after spending about 14 days with it so far here’s what I found:

It’s the most fun laptop I’ve ever owned

I’m not going to say “most powerful laptop.” Power itself is subjective, and really depends on the part of the system you’re measuring. For example, if your goal is to measure how well it performs on games, you’ll get mixed results at best and likely a ton of disappointment. While I think the Apple SoC packs enough power to be able to run games made for it, there are not too many mainstream games built for ARM/Apple Silicon yet.

That said, the performance is still very surprising — especially given how energy efficient the SoC is. I ran Phasmophobia on Windows 11 ARM via Parallels — and I was able to get around 60 fps relatively stable if I crank down the settings to low-medium. The best bit is that the entire system stayed relatively cool at 50-60c (measured CPU Core Average on iStatMenus), and drew around 30-40W of power. Unplugged from the charger, I was able to game this way for literal hours — the longest I’ve ever been able on a laptop. For comparison, my Intel Mac occasionally shoots up to 90c for no reason, and the best I’ve ever gotten on it was around 3 hours of very light web browsing and calls.

Apple Silicon ARM-native games on the other hand, knock it right out of the park. An early access game on Steam called Timberborn (it’s great! You should definitely try it!) can do 120fps without breaking a sweat on max settings, which probably shows how powerful the GPU is for games that are written to utilize it.

But gaming isn’t really what made this laptop the most fun I’ve ever owned — it’s the snappiness, responsiveness, and overall experience of using it. See, my biggest gripe with all the other Macbooks I’ve owned in the past was how sluggish things got once you start racking up tabs on Google Chrome and have a bunch of other apps open (in my case, it’s usually Chrome, several instances of Visual Studio Code, Slack, Zoom, Docker, Audio Hijack, and Apple Music). Especially after waking up from sleep with all that memory pressure, my previous Intel Macs would start to crawl and feel really frustrating to use. For example, swiping between desktops and using exposé would be a laggy mess, and using Spotlight to search for things would be a hair-tearing experience.

There’s none of that on my M1 Pro. It almost seems too good to be true, but it’s the truth. Even with a measly 16 gigs of memory (compared to the 32 gigs on my Intel i7 work Macbook), the experience remains buttery and snappy (granted, I’m not overloading it with running Docker containers — more on that later). It’s probably due to lower memory latencies and higher bandwidth since the CPU and memory are on the same SoC, but it’s still pleasantly surprising. Even when memory pressure goes above 50% and Mac OS is swapping aggressively, the usability still remains really good.

Even x86 apps that run via Rosetta 2 like Luminar, which is what I like to use for photo editing and comes bundled with my Setapp subscription, feel responsive and quick. I do notice spikes in CPU usage a touch slower load times on those apps, but it’s nothing that takes away from the experience.

Finally, I’m happy to report that all my connected peripherals work perfectly. I have a Keychron K2 and an MX Master 3 connected via Bluetooth (with no issues whatsoever — I was on the lookout for these based on reports I’ve read on the first gen M1), a Topping E30 DAC for my audio, a Behringer UMC22 for my microphone, and a Logitech Streamcam, and they all work without a hitch. I’m also using a Xiaomi ultrawide monitor connected via HDMI — and that works even better than when connected to an x86 machine, specifically, causing Mac OS to rearrange the windows when connecting and disconnecting the external display is super quick and reconfiguring the monitor arrangement via System Preferences > Displays is seamless — it doesn’t even temporarily black out like Intel Macs do.

Ok, last bit, and I think this is what makes the web browsing experience on this Mac just fluid and really fun: Safari scores 241 runs/minute on Browserbench 2.0, while Google Chrome scores 184. That is huge! It’s pretty amazing how good those scores are! For comparison, my i7 Macbook scores a measly 94.3 on Safari, and Google Chrome scores even worse at 88. Just to throw a wildcard in there, my Ryzen 5600X PC scores 132 on Google Chrome, and at the time I thought that was the fastest I could get. In terms of real usage, this translates to web pages rendering much quicker, so navigating and interacting with web apps will feel more snappy and fluid. This is certainly obvious for monstrosities like Jira and Sentry. This same fast experience feels (but I haven’t measured empirically) the same for all native M1 apps, including Visual Studio Code, Zoom, and Slack.

It’s not yet the perfect work laptop for me

All the good aside, there are still things holding it back from being the best work laptop I’ve ever owned. I’m a developer, and a work on backend and infrastructure quite a lot. One of the areas that M1 Macs haven’t yet caught up on is adoption from developers — many Docker images critical for my work stack aren’t ARM-compatible yet, and I found that forcing x86 emulation through Docker/QEMU doesn’t perform quite as well as native x86. Not to mention that some just outright crash or don’t work when emulated.

The way I work around this at the moment is to have my M1 Mac act like a thin client, connecting to my desktop which hosts Docker and the rest of my code using Visual Studio Code’s Remote - SSH extension. It works amazingly well, and even forwards ports remotely, so it almost feels like things are running natively on my machine. To me, the responsiveness of the overall experience outweighs this small con of having to do this SSH dance.

Even outside of Docker, there are also some Python libraries for example, that aren’t compatible with ARM yet — and I don’t want to force myself to use a mishmash of x86 and ARM Python environment all over the place which I can foresee giving me grief in the future.

Finally, certain apps just refuse to launch altogether. There might be certain x86 calls being made that are just plain incompatible with what Rosetta is capable of translating, but apps like PLEX and Jellyfin which are admittedly not for work but I like to use to stream content while working, just get stuck as bouncing icons on the dock and fail to start up.

I’m looking forward to the next-gen M1 Macs

When the first-gen M1 Macs came out, I purposely held out on buying because I know that there’s a certain class of headache for early adopters. And I wasn’t entirely wrong: back then, there was even less software intended for Apple Silicon (although Rosetta is pretty amazing), and there were first iteration nuances and caveats that I just didn’t want to deal with (like memory-related crashes and random device disconnections).

This second generation of M1 Macs is already pretty amazing, and I don’t regret getting my Macbook, but it’s still far from perfect. There’s still work to be done in achieving wider adoption from developers (of games and of developer tools) which would ostensibly look better by the time the next generation is released, and there are arguments to be made for next-gen M1 powered desktop Macs. And while my current setup of using my Mac as a thin client to my desktop server is workable, I still wish I could run it completely untethered.