SSD 损耗无可避免:操作系统的 Swap 机制
根据反馈,出现巨大写入量的 SSD,并不是经常挂机下载这样的任务引起的。在日常使用中,SSD 就已经会出现此类情况。实际上,很多操作系统都会造成这样的状况,只不过可能没有 M1 版 MacBook 那么夸张。SSD 的损耗在日常使用无可避免,其实这是 SSD 充当了内存 Swap 引起的。
macOS 中的 Swap
什么是 Swap?这是一个在桌面操作系统中常见的系统机制,我们可以大致理解为硬盘充当了内存的作用。在桌面的使用环境下,PC、Mac 等设备需要拥有实时运行多个大型软件的能力,这就需要内存足以存储这么多个大型软件的进程容量。然而物理内存是有限的,为此操作系统就需要调用硬盘空间,充当内存的作用。
Swap 机制的简单示意图
在 macOS 系统中,当软件开始运行,进程即会被读取到物理内存当中。随着运行的软件越来越多,操作系统会意识到内存不够用,首先采取的措施是对内存中的数据进行压缩,这会消耗一定的 CPU 资源;当进入内存的数据变得更多后,操作系统就会考虑舍弃一部分内存中的数据,这时候在内存中没有被修改过的数据首先被抛弃,释放出部分内存空间——例如你打开一个软件,从未操作过,随着内存逐渐被占满,这个软件在内存的一些数据可能实际上已经被清除掉,当你重新开始操作该软件的时候,会重新从硬盘读取所需数据。在这种情况下,操作系统并不会对 SSD 写入大量数据。
然而,当内存中的数据被修改过,产生了 “脏页”,情况就不一样了。当内存逐渐被占满时,操作系统并不能直接将 “脏页”从内存中清理出去,毕竟这往往记录着软件的工作进程。这时候,macOS 会将这部分 “脏页”暂存到 SSD 中,这就产生了写入 SSD 的数据。
为此,macOS 还建立了一个专门的 VM 分区,来存放这些内存数据,当物理内存越紧张、用户开启软件越多、软件需求的内存容量越大的时候,VM 分区的 I/O 就会更加频繁,写入的数据也就更多。在这样的 Swap 操作之下,就算没有进行下载、传输数据之类的操作,也会有大量的数据写入 SSD。
macOS 中的 VM 分区
实际上,并非只有 macOS 存在 Swap 的机制,Windows、Android 等系统均有类似设计。在 Windows 中,我们可以在系统高级设置中找到 “虚拟内存”,这即是硬盘为内存脏页提供存储空间;在 Android 中,也有 zRAM 和 Swap 的机制,会对内存进行压缩和写入 NAND。
Win10 中的虚拟内存设置
不过,iOS 倒是没有 Swap 机制,这或许和墓碑机制不需要占用太多 RAM、苹果对 iOS 设备定位为非重度生产力工具等因素有关。
M1 版 MacBook 为何 SSD 写入数据尤其多?
Swap 是一种非常常见的系统机制,Windows、Android 等操作系统有类似设计。但有用户反馈,M1 版 MacBook 的 SSD 写入数据就是特别多,这到底是为什么?下面是一些分析。
· 和长期不关机的用户习惯有关。Mac 电脑,尤其是 M1 版 MacBook,强调 “掀盖即用”,很多用户养成了长期不关机的习惯,不使用电脑时仅仅合盖休眠。操作系统没有经过重启,经过长时间持续使用,内存脏页会越来越多,写入 SSD 的数据也越来越多。加上 macOS 的休眠状态(hibernatemode)会将 RAM 数据写入硬盘,长期使用休眠待机,也会加大 SSD 的写入量。
MacBook 强调 “开盖即用”,长时间不关机,Swap 更频繁,休眠会增加 SSD 的写入量
· 和软件生态有关。越新的软件,占用的内存越多,这是无可辩驳的大趋势,在业界中被称为 “安迪 - 比尔定律”。M1 版 MacBook 由于硬件上进行了革新,很多软件也随之发布新版,新版软件带来了更大的内存容量需求,使得操作系统更容易触发 Swap。与此同时,一些 X86 老软件在 M1 版 MacBook 运行,需要经过 Rosetta 2 转译代码,这会占用更多的存储空间,安装、使用这样的老软件,这也有可能加剧对 SSD 的写入操作。
M1 版 MacBook 兼容 X86 软件需要 Rosetta 2 转译,这会占用额外的硬盘容量,给 SSD 写入更多数据
· 和 RAM 容量过小有关。M1 版 MacBook 仅提供 8G 和 16G 两种 RAM 容量,而多数用户都选择 8G RAM 的版本。物理内存越小,就越容易触发 Swap,有用户反馈称,8G RAM 版本的 M1 版 MacBook 的确比 16G 版产生了更多 SSD 写入数据量。
· 或许和 M1 芯片架构有关。M1 芯片使用了片上系统的设计,RAM 和 CPU 核心集成到了一起,这有助于提高 I/O 效率,但也有可能加快 Swap 的速度。但这只是一种可能,苹果没有公开太多 M1 芯片在这方面的细节,无法推定。
· 或许和 Spotlight 有关。Spotlight 是 macOS 中的全局搜索机制,它会检索硬盘中的所有数据。部分用户反馈,新版 macOS 的 Spotlight 很有可能额外对 SSD 写入了大量数据,目前某些 beta 版的 macOS 已经停用了 Spotlight 的文件检索。不过 Spotlight 是否是真正的原因,还有待苹果官方证实。
▲Spotlight 可能是导致 SSD 写入增加的原因,但这点有待证实
M1 版 MacBook 真的有硬伤吗?
在多种因素作用下,部分用户的 M1 版 MacBook 产生了较多的 SSD 写入量。例如有用户反馈,使用仅仅 60 天,就产生了高达 261TB 的 SSD 写入量,以 1000 次 P/E 计算,则已经消耗了一块 256G SSD 10% 的寿命。那么 M1 版 MacBook 如此巨大的 SSD 写入量,真的算是缺陷吗?笔者认为需要辩证看待。
用户反馈,M1 版 MacBook 使用仅仅 60 天,就产生了高达 261TB 的 SSD 写入量
· 从历史来看,如果只是正常使用,SSD 的损坏基本是由于硬件缺陷或者固件问题导致,SSD 很少因为写入次数耗尽,而寿终正寝。很多 SSD 的实际寿命都高于官方标称,外媒 Hardware.info 曾经进行过测试,即使是 TLC 闪存的 SSD,寿命也远超预期。SSD 一般存在冗余容量,这部分容量用户不可见,可以有效延长 SSD 的生命周期。
·SSD 很多写入行为产生于早期,例如 X86 软件进行 Rosetta 转码导致 SSD 写入额外数据,这样的情况只会发生一次。随着使用时间,SSD 的损耗速度应该会有所回落。
如果你实在担心,可以选择购买更大 RAM 和 SSD 容量的 MacBook 使用。更大的 RAM 意味着更多数据读写发生在物理内存中,平时会触发更少的 Swap;而更大的 SSD 容量意味着写入同样的数据量,SSD 的损耗更少。当然,这样的设备价格也会更高。
至于这到底算不算硬伤,由于目前该现象尚未引发故障,因此很难说这属于设计缺陷。不过,该现象很值得大家保持关注,尤其是 Spotlight 的表现,大家可以暂时停用 Spotlight,观察是否 SSD 写入数据有所减少。