Mac的固态硬盘性能一直是苹果宣传的重点,特别是近年 Apple T2、M1 等自研芯片整合了主控芯片后,Mac内置固态硬盘相比竞品的性能优势似乎越发明显。特别是苹果公司曾公开表示,凭借着携带M1芯片的高级处理器和先进的闪存技术,它们可以将固态硬盘的性能提升至2倍以上。可Mac如此“异于常盘”的性能真的可靠吗?为了达到这样的性能,它是否在偷偷地舍弃掉一些其他性能呢?这些问题随着苹果新品的不断迭代,也逐渐开始成为用户们议论的暴风眼。
最先抛出这一观点的是 Hector Martin,他是一位资深的信息安全顾问和 Linux研究者,曾因将Linux系统移植到PS4上而名声大噪。同时,由于其主导的高难度项目Asahi Linux(一个旨在让ARM架构Mac运行Linux系统的开源项目),这让他在关于Mac的观点上吸引了来自Mac用户社区的重视。
就在2月中旬,Martin突然在Twitter上宣称自己发现了一个很有争议的问题,他通过测试发现苹果的定制硬盘虽然确实快得出奇,但却是以牺牲数据一致性(data integrity)为代价的。
这一发现源于Martin在一台M1版MacBook Air上测试Linux系统时,意外发现很多写入操作出奇地缓慢,而这样的操作在macOS下的速度则完全是另一幅面貌。为了追根溯源,他测试了苹果内置硬盘和其他两款常见固态硬盘(WD SN550 和 Samsung 860 EVO)的读写性能。
结果非常耐人寻味:
换句话说,在“仅写入”的测试中,苹果内置固态硬盘可以达到近4万次的IOPS(每秒读写次数),这是市面上主流NVMe固态硬盘的2倍、SATA固态硬盘的8倍。但到了“写入并冲刷缓冲”的情况下,内置硬盘却仅仅交出了46 IOPS的答卷,这一成绩甚至还不如许多市面上的机械硬盘,仅相当于市面NVMe固态硬盘的2.3%、SATA固态硬盘的32.2%。
那造成这前后两次测试差异的原因是什么?这又意味着些什么呢?
我们知道,现代计算机中最主要的性能瓶颈就是存储。因此,软硬件设计中普遍采用多级缓存的设计来改善性能。就写入数据这一场景而言,待写入的数据至少要经过系统缓存(OS cache)、磁盘缓冲区(disk buffer)这两道中间环节,才能最终进入永久存储(permanent storage)——机械硬盘的盘片或固态硬盘的闪存颗粒。
借用送快递来打比方,这就好比一个快件要经过区域分站、小区驿站等中转节点,才能最终送到你手上。
实际上,寄件方(写入数据的应用程序)并不关心这些底层的区别;它们只是把快件(写入的数据)交由至物流公司(操作系统),至于送达方式、成功与否全凭后者的反馈。而为了提高处理效率,操作系统的常见做法是只要快递送到了驿站(数据写进了缓冲区),物流公司就会告知寄件方送达成功(写入完成)。至于最后一步“上门签收”(写入永久存储,也常称为落盘),则是由操作系统在之后再根据自己的节奏完成,但到这已经不受应用程序的控制了。
诚然,从日常使用角度而言,前一项数据是用户直接感知的“写入性能”,Mac 内置硬盘也确实在这一部分确实取得了亮眼的成绩。但一旦发生断电等故障,那些还滞留在驿站的快件(缓冲区未落盘的数据)就存在丢失的风险。
此外,快件从驿站派送上门的顺序,往往不同于到达驿站的顺序;派件员(硬盘主控)可能为了省时省事等目的将其重新排列组合。在平时倒也无妨,但对于数据库日志、文件系统日志等特殊场合,常常要求关于一项操作的记录必须先于这项操作本身落盘(好比从公司财务调取现金,一定是先记账、再派发资金)。这些预写日志(write-ahead log,WAL)会被打上称为“写入屏障”(write barrier)的标签,享受“优先派送”的待遇,它的落盘效率直接影响到后续操作何时能进行。
因此,如果说 Martin 测试的前一项数据代表了数据日常写入的效率,那么后一项数据则代表了数据落袋为安的效率,同样不能忽视。可正是在这项性能上,Mac翻了波大车。不能完成冲刷意味着不能保证写入的顺序,这也意味着你数据库里的数据实际上可能会出现损坏。但如果你想要在Mac上运行事务数据库同时,希望它即使在断电的情况下也保证数据的完整性,那你将永远无法得到超过46 IOPS的数据,这无疑是不太能被用户们所接受的。
为了更好确保您重要的数据能妥善地被保存好,还是推荐您可以考虑使用外置固态硬盘来进行数据备份,或者购买外置硬盘盒把您闲置的硬盘利用起来。这里我推荐下尤达大师Y-Gazer系列的DF3 M.2固态硬盘盒。
这是一款NVMe/NGFF的双协议硬盘盒,外部采用USB3.1 Type-C传输接口,最高可支持10Gbps的传输速率,适配多种规格的SSD以及绝大多数主流的操作系统。真正让你在享有高速数据传输时,还同时拥有绝佳的数据安全性。