Apple Mac Pro M1换机体验 (Apple Silicon)

AI 摘要: 2021款Mac Pro M1的入手体验:重、厚实,键盘舒服,屏幕刘海部分适应,电脑温控好,电量给力,音效公放不错。遇到问题时,通过查看本地dlv版本并在官网的ChangeLog中找到了解决方案。

1. 2021 款 Mac Pro M1 入手体验

1.1. 背景

公司刚推出换 Apple M1 Pro(10 核 M1 处理器、32G、512G),把用了将近 2 年的 2019 Pro(16G、i7、1T)换了,本来还有 1 年旧本就可以归自己,无奈想着早用早享受:),哈哈

拿到后花了一个小时不到完成数据迁移(原电脑数据大约 300G 左右),入手后的感觉:

  1. 重、厚实,外部颜值比旧版低,内部屏幕舒服 - 我不看颜值,看内在还是 OK 的:)
  2. 无 touchbar,键盘还是比较舒服
  3. 屏幕刘海部分习惯就好,我主要看屏幕不是看刘海:(
  4. 充电又会到 magic 磁铁吸力充电,我的 mac 2015 pro 充电器不知道能不能冲 :P
  5. 电脑温控好很多,坐床上再也不觉得碰着一个暖手宝了
  6. 电量比较给力
  7. 音效公放很不错 :)

1.2. iterm2 遇到 Bad CPU type in executable 问题

1
/usr/local/bin/brew: line 28: /usr/local/opt/coreutils/libexec/gnubin/dirname: Bad CPU type in executable

运行 softwareupdate --install-rosetta 解决

原因: macOS 尝试运行不是为 Apple M1 芯片构建的应用程序时,macOS 将提示安装Rosetta2以自动将应用程序转换为 Apple 芯片; 在终端中,没有自动检测丢失Rosetta以运行旧架构命令行工具。

参考: https://apple.stackexchange.com/questions/408375/zsh-bad-cpu-type-in-executable

1.3. M1 芯片相关背景知识

Apple Silicon是对苹果公司使用ARM架构设计的单片系统(SoC)和封装体系(SiP)处理器之总称。它广泛运用在 iPhone、iPad、Mac 和 Apple Watch 以及 HomePod 和 Apple TV 等苹果公司产品,苹果公司不具有生产芯片的业务,所有 Apple 芯片均由其他芯片代工企业,如三星、台积电进行制造

参考: https://zh.wikipedia.org/wiki/Apple_Silicon

1.3.1. Intel(X86) 和 Apple Silicon(M1 ARM)

ARM 架构,过去称作高级精简指令集机器,由于节能的特点,其在其他领域上也有很多作为。ARM 处理器非常适用于移动通信领域,符合其主要设计目标为低成本、高性能、低耗电的特性。手机销售约 98%使用了 ARM 处理器。

软件下载通常区分Intel(X86)Apple Silicon(M1 ARM)版本,实际是软件针对不同的 CPU 指令集X86ARM的编译输出的结果;

1.3.2. Rosetta

https://zh.wikipedia.org/wiki/Rosetta

Rosetta是苹果电脑公司发布的在 Mac OS X 上的一个二进制编译器软件,软件的名字起源于罗塞塔石碑,为破译古埃及象形文字的关键(吴军老师之前也讲过:),苹果利用这名字来形容编译器的重要性。

Rosetta 可以让在 Power PC 平台上开发的软件在英特尔平台的麦金塔电脑上顺利运行,基于 Transitive 公司的QuickTransit 技术,也是麦金塔电脑从 PowerPC 向英特尔转换的一个重要部分,确保原先的 Mac OS X 程序能在新的英特尔平台上运行,转换有一定 CPU 开销,但对于 CPU 资源非常小。

2011 年夏天推出的 Mac OS X Lion,则不再支持 Rosetta (架构转换已完成数年,大多数 Mac 平台软件已更新为通用二进制甚至不再支持 PowerPC 架构);

2020 年 macOS 11.0 Big Sur 内置 Rosetta2 可以让在 Intel 平台上开发的软件在 ARM 架构平台的麦金塔电脑上顺利运行。是麦金塔电脑从 Intel 向 ARM 转换的一个重要部分,确保原先的 macOS 程序能在新的 ARM 平台上运行;

1.3.3. Rosetta 2 - Intel 版本程序转换为 ARM 程序运行的关键,有开销,但 M1 芯片足够弥补

简单说,Rosetta 2 是一个仿真器,旨在连接英特尔苹果处理器之间的过渡,简而言之,它会翻译为英特尔构建的应用程序,以便它们可以在 Apple Silicon 上运行。Rosetta 2预装在使用 ARM 芯片麦金塔电脑的操作系统上。它可以将 AMD64 指令进行翻译,对于绝大多数的程序来说,Rosetta 2都可以运作。由于Rosetta 2在安装软件时会把 Intel 版本程序转换为 ARM 程序,加上 Apple 的处理器性能很高,因此即使需要大计算量的程序,通过 Rosetta 2 编译也能流畅地执行(M1 芯片所带来的性能提升足以弥补这一点)

PS: 从这段也看到苹果的技术演进,先适配兼容,再独立变强大,再兼容适配包容,厉害!

更多了解: https://www.computerworld.com/article/3597949/everything-you-need-to-know-about-rosetta-2-on-apple-silicon-macs.html

1.3.4. Rostetta vs M1 性能对比

结论: 将 ARM 优化版本与通过仿真运行的 Intel 版本进行比较,我们在标准导入/导出基准测试中没有看到任何显着的性能改进。是的,原生M1 Lightroom速度更快,但在大多数情况下,速度并不是非常明显,对于一些较长的导出任务,似乎确实有轻微的减速,但最显着的改进是应用程序的整体可用性:它运行更流畅,CPU 上更轻,所以风扇根本不需要打开。

参考:

  1. https://petapixel.com/2020/12/08/benchmarking-performance-lightroom-on-m1-vs-rosetta-2-vs-intel/
  2. https://www.eet-china.com/mp/a80245.html

1.3.5. 安装 Rosetta 2

您使用的是搭载 Apple 芯片的 Mac,首次打开为基于Intel的 Mac 构建的 App 时,系统会要求您安装Rosetta,点按“安装”,然后输入您的用户名和密码以允许继续安装。

参考: https://support.apple.com/zh-cn/HT211861

1.4. 充电器问题: 140w vs 96w

更多参考: https://www.cnbeta.com/articles/tech/1210361.htm

1.5. Apple Mac M1 Pro 芯片配套软件

  1. Jetbrain 系列:
  2. VScode,Apple Silicon 构建- VS Code 现在可用于 Apple Silicon 的稳定版本。
  3. 企业微信:
  4. Alfred: Version 4.6.4 b1294 (macOS 10.11+, 64-bit Intel, Apple Silicon)
  5. Golang

2. 软件使用遇到问题

2.1. Goland 调试遇到 debugging compiled not supported 问题

1
2
3
4
5
Debugging programs compiled with go version go1.18 darwin/amd64 is not supported. Use go sdk for darwin/arm64

# 原因是go版本安装的是 darwin/amd64
$ go version
go version go1.18 darwin/amd64

原因:brew 默认安装的是darwin/amd64版本,重新安装darwin/arm64版本的 golang,下载地址: https://go.dev/dl/go1.18.darwin-arm64.pkg

2.1.1. 卸载旧版本 darwin/amd64

1
2
$ brew uninstall go
Uninstalling /usr/local/Cellar/go/1.18... (11,947 files, 592.6MB)

2.1.2. 重新安装 darwin/arm64

1
2
$ go version
go version go1.18 darwin/arm64
  1. golang 重新选择 GOROOT 为/usr/local/go

2.2. 编译继续报 Goland Delv Launcher 错误

原因 Goland 基于 Delve 做调试器,本地环境的 M1 的/Library/Developer/CommandLineTools是通过2019 MBP直接文件同步迁移过来的,导致调试报错;

网上查询的 dlv 版本过低的问题,在最新的 Apple Silicon 版本的 Goland、Go 安装后是已经 Fix 了。

1
2
3
4
5
// 删除CommandLineTools,重新安装就好了
$ sudo rm -rf /Library/Developer/CommandLineTools

// 重新安装,弹框继续,大约20min左右就安装OK了
$ xcode-select --install

现象:

1
2
3
4
5
6
7
8
9
GoLand Delve Launcher: Failed to fully copy pty output
could not launch process: stub exited while waiting for connection: exit status 0

--
/usr/local/go/bin/go tool test2json -t /private/var/folders/n4/2qd9ttqd0b927rbmvy6fn7980000gn/T/dlvLauncher.sh /Applications/GoLand.app/Contents/plugins/go/lib/dlv/macarm/dlv 

--listen=127.0.0.1:54803 --headless=true --api-version=2 --check-go-version=false 
--only-same-user=false exec /private/var/folders/n4/2qd9ttqd0b927rbmvy6fn7980000gn/T/GoLand/___
TestGetPointerValues_in_git_woa_com_ketang_service_devops_git_repos_maintain_pkg_shim.test -- -test.v -test.paniconexit0 -test.run ^\QTestGetPointerValues\E$
  1. 查看本地 dlv 版本 $ /Applications/GoLand.app/Contents/plugins/go/lib/dlv/macarm/dlv version Delve Debugger Version: 1.8.0 Build: 1b11a8847212068301f56093ec4369d34eb029fd

  2. 在 dvl 官网的 ChangeLog 中,这个 M1 问题已 Fix 了: Print message and exit if Delve detects it is running under Rosetta on M1 macs (@aarzilli)