为什么

为什么我一定要用 macOS?

这个问题需要放在一上来就被解释清楚,尤其当你发现这个 setup 的性价比其实非常低。然而这么设计自然有它存在的意义。首先,这和我的工作性质有关。我的日常开发同时涉及后端、前端和设计。尤其是我的后端围绕着 Ruby 展开。Ruby 的 native extensions 在 Windows 上不免没有那么好用,甚至在兼容性上有一些问题。使用一个 POSIX 兼容的操作系统是非常必要的。然而涉及前端的用户界面设计时,我还需要用到 Illustrator、Photoshop、Sketch 等一些软件。哪怕不使用 Sketch,剩下的软件也没有 Linux 的兼容版本。这使得 macOS 是我能避免频繁切换操作系统的唯一选择。

为什么不使用台式机的选项?

在组建这个工作站系统的一开始,我希望围绕一款苹果的台式机来开始。苹果目前仍然在销售的台式机有 Mac Mini、Mac Pro 和 iMac,其中 iMac 带一块 27 寸的 5K 屏幕。但是 Mac Mini 和 iMac 本质上使用的仍然是移动级别的 CPU。而 Mac Pro 由于长久没有更新,目前的购买选项性价实在太差,并且 Mac Pro 的风道虽然设计非常合理,但是很多使用经验表明,数个月后当灰尘覆盖底部后风道会收到极严重的影响,故不作考虑。

如何

屏幕设置

Screen Setup

中间是 34 英寸 21:9 带鱼屏幕,用来做视频剪辑等素材复杂的工作时能很好胜任。写代码时也能同时照顾多个文件。右侧 24 英寸 16:9 屏幕竖放,用于看适合竖着看的内容,比如开发文档、论文,不看的时候把聊天窗口丢在右侧避免对主要工作视线的干扰。上方 23 英寸 16:9 屏幕,用于连接 PC,用于偶尔需要看的 Visual Studio 上的项目,或者玩一些 PC 独占的游戏等。

这里我使用了 Synergy 软件,来给两台电脑共享键盘和鼠标。由于 Synergy 跨平台支持,只要简单配置屏幕的位置,就能提供鼠标、键盘和剪贴板的双机共享了。

性能

当两块高分辨率的屏幕插入 MacBook Pro 后,你能看到显著的性能下滑,发热非常明显。如果试图利用 21:9 屏幕的优势玩一些 macOS 系统兼容的游戏比如 欧洲卡车模拟器 的时候哪怕在全低画质下也不能流畅运行。如果跑视频渲染、压片等操作时,同样的性能问题明显。相反在一些 CPU 密集的应用场景下,比如编译程序的时候,反而没有太大的问题。而内存上,16GB 也基本够使用,虽然如果是 32GB 或者 64GB 的配置的话,性能上更游刃有余一些。

综上我们可以发现,主要问题出在 MacBook Pro 的显卡上。那么想到的方案自然就是外置显卡。不过,凡是做过 expressCard 外置显卡的人都知道,对显卡性能的损失是非常严重的。这是因为 expressCard 虽然是总线接口,但是其带宽只有 PCI-E x1。然而 MacBook Pro 所提供的雷电接口,在 Thunderbolt 2.0 协议下就有 20Gbps 的带宽,这相当于 PCI-E x4 的带宽,哪怕使用 GTX 970 这样的显卡,也只有 10% 的性能损失。

我使用的外置 PCI-E 盒子是 AKiTiO 的产品。外包装上明显标注,不支持显卡。这是因为显卡需要额外的供电,而盒子只能提供 60W 的供电,远小于显卡的需求,直接插上用可能会把显卡烧坏。所以我们将显卡盒外壳拆开后,单独接一个 400W 电源到显卡的 8pin 上。只不过,只这么操作,电源并不会认为自己开机了,所以不会供电。我们还需要用回形针把电源 24pin 的 13 引脚短接到地线,来模拟一个开机的情况。在我用了一天后,我发现 Dell 曾经为他们的迷你电脑推出过一款电源,其输出正是 12V 的 8pin,并且功率高达 220W,这是 Dell DA-2 电源适配器。所以如果不想魔改电源的话,可以使用这一解决方案。

驱动上的话,NVIDIA 只为 Mac Pro 推出过显卡驱动,而不是 MacBook Pro。当然,操作系统层面的事情,当然我们可以魔改驱动,有一个一键安装的脚本项目在此 automate-eGPU。不过由于新的 Mac 的安全策略,你还需要 Command + R 开机进入恢复模式,在实用工具-终端中输入命令关闭驱动签名校验,才能正常使用,这一点这个一键脚本也会做出相应的提示。

至此,我们解决了显卡性能上的问题。

存储

买 256GB 版本 MacBook Pro 省下来的钱就是脑袋里进的水。为了解决把笔记本变为工作站后增加的大量数据,不得不寻找外置的存储方案进行妥协。最常见的解决方案当然就是移动硬盘。但事实上,移动硬盘通过 USB 3.0 连接,经常容易发生连接不稳定的情况,从而导致一些存储意外发生,我曾因这些原因导致过数据丢失一次。直到我见到了 Transcend 的 256GB 扩容存储卡,其长度比一般卡还要短一些,插入 MacBook Pro 中能几乎贴合于卡槽,从而避免了携带和使用上的不安全。唯一麻烦的是拿出来的时候需要使用一把面包刀或者尖锐的支架才能让卡与机器分离。

噪音

虽然我们把显卡外置了,理论上机器散热没有任何压力。但实际上,Thunderbolt 2 的连接处由于非常巨大的数据交换,实际上左侧发热相对还是有点严重。考虑到,MacBook Pro 不止通过风道具有很强的散热能力,其铝合金外壳本身也被设计成其散热的一部分,我们大可通过降低外壳温度来降低整体温度。我选择了目前还只有在日本市场销售的 USB 水冷套件,为我的 MacBook Pro 做进一步降温。

外设

关于键盘,不多说,参考之前的文章《一款祖传的机械键盘》。在我使用的那么多的鼠标中,没有一款鼠标能比 Logitech M558 更适合 Mac 了,说实话 Apple Magic Mouse 还是省省吧,那东西就是个能挪动的触摸板。M558 从设计到重量甚至是电池,简直就是天生为 MacBook 准备的。而且,很便宜,并不是 Logitech 的高端产品。

便携

虽然我们对整个 setup 进行了巨大的改动。但是其便携性没有遭到下降。我只需要关机后断开先开连接,就能带出门。而我的数据、执行了一半的工作流都能随身携带。续航也能维持在 8 - 9 小时的 MacBook Pro 的正常续航水平,而选择的 60% 键盘和 Logitech M558 也都很适合携带。这是单独搭建的工作站无法得到的优秀体验。

购物列表

选项 价格(人民币元) 备注
MacBook Pro 15’’ 14288 国行
Transcent JetDrive Lite 256GB 1099
x86 兼容机 5000
AOC Q3477FQ 2399
AKiTiO Thunderbolt 2 PCI-E 1200 二手
NVIDIA GTX 970 ITX 1700 二手
Dell DA-2 Adapter 32 二手
ViewSonic VA2462H 899
ViewSonic VA2349S 699
乐歌 D3 显示器支架 199
乐歌 L1 显示器支架 79
Logitech M558 169
客制化机械键盘 1290
笔记本水冷套价 USBWATC2 583.73 日本 Amazon
总计 29604.73

缺点

  • 当 CPU 和内存遇到了瓶颈:由于使用的是移动的 CPU 和内存,虽然都算不错,但在一些任务上依然会遇到瓶颈,比如机器学习或者大型编译。于是我在房间里准备了一台 22 核 44 线程 64GB 内存的服务器,让 Mac 可以随时随地远程登录来执行这部分任务。
  • 内置的屏幕无法关闭:当系统默认显卡切换为 GTX 970 时,把屏幕盖子盖上后,虽然屏幕已不作显示,但操作系统仍然认为该屏幕存在并耗费资源进行渲染。这可以被认为是 macOS 的一个 bug。暂时没有解决方案。
  • Synergy 在多屏下检测有误:Synergy 跨机器的检测逻辑是你达到了屏幕的边缘,而这个边缘是指你最边缘的那块屏幕的边缘。比如我的设置中,我无法向 Synergy 正确描述我 PC 的位置。从而不能使得跨机器的使用完全符合直觉。
  • 音频:由于盖上盖子的 MacBook Pro 发出的声音很奇怪会破音。而几块屏幕的声音几乎就是只能用「听个响」来形容,所以需要外接一个音响。同时 PC 和 MacBook Pro 的音频不能在同一个音响输出。我试图使用 3.5mm音频线一分二母 立体声音频转接线,但实际上还存在一点问题,仍然在解决中。

以后的搭建

由于这些都是在我卧室床头搭建的,以满足我起床就能写代码,写累了就睡的要求。当然我还购买了一把没有腿的椅子,这样我能长时间坐在床上而不至于腰背疼痛。那么既然是卧室,还需要点娱乐设施。所以打算把窗帘拆了改装成投影幕,加装投影仪供 PS4 使用,在 120 英寸的屏幕上畅玩 PS4。目前仍然在筹划中,如果搭建完了,会给大家分享相关的日志。