OS X Mavericks: 压缩内存功能是一石三鸟


  在默认的硬件配置中 RAM 太小一直是苹果被众多 Mac 用户吐槽。因为可用的 RAM 会直接影响到Mac的用户体验,用户几乎濒临崩溃。当然会有人说他们只是设备用来浏览一下网页,收发邮件而已,但是偶尔使用 Safari、邮件、iPhoto或者iMovie也能转化成严重的RAM使用问题。

  RAM 不用那还做什么?这个的话那些比较精通 Mac 的用户会比较清楚。当 OS X 用尽 RAM,它就会开始从 RAM 复制数据以交换磁盘文件。如果又需要这些数据,那么又需要从磁盘上读取回来。如果 RAM 还是很吃紧,那么内存中的其他数据就会被从 RAM 内清空,写道磁盘上为即将进来的数据提供空间。如果这个过程不断重复,那么你就会知道所谓的“系统颠簸”是什么东西了——即系统花上大量的时间在 RAM 和磁盘之间交换数据。

  从磁盘获取数据的时间远远长于从 RAM 获取数据的时间,因此将数据从 RAM 转移到磁盘上并不是大问题。注:从转动的硬盘上读取数据需要的时间远远长于 RAM,SSD 的比硬盘快,但还是慢于 RAM。

  这也是为什么iOS设计时没有文件交换的功能,同样当前不使用的应用 iOS 会无情关闭掉也是这个原因。虽然 OS X 的自动结止功能也是朝着这个方向发展的,但是文件交换功能还在 Mac 上。能够避免交换就是一次很伟大的胜利。

  当然这不仅仅关乎性能,性能和能耗是密切联系。这让我想到“race to sleep”概念,完成任务的速度越快,Mac 就能更快进入低功耗空闲状态。时间就能能量。

  避免用尽RAM的方法之一就是减少运行应用的数量。自动结止是办法之一,另一个解决办法就是减少在运行应用使用RAM的数量。

  多年以来,OS X 中的 APIs 就允许应用指定内存中的一个区域为“可清空区域”。比如一款应用可以在可清空内存区域中缓存一些大量使用 RAM操作的结果。如果操作系统需要更多 RAM,那么它就可以使用缓存使用的这些内存。如果产生缓存的应用有需要这些信息,那么它只需再计算即可。

  你可能觉得没有开发者愿意指定可清空区域。为什么要让系统利用你的内存?但是系统不会拒绝,它就是会使用 RAM。可清空内存能让开发者选择他们的应用最先被利用的内存。

  如果RAM还是不够用,那么系统也有自己的缓存以及可清空区域来使用。内存映射文件回到磁盘上,文件系统数据和元数据内存缓存则可以删除。

  如果到了这个地步 RAM 还是不够的话,那么在前几个版本的 OS X 中就只能开始选择交换文件的方式了。可是在 Mavericks 中还有一个选择,那就是 compressed memory(压缩内存)。系统会查找到最近最少使用的内存并进行压缩,压缩到原大小的一半。

   和 Snow Leopard 中的 HFS+ 压缩一样,压缩内存以 CPU 周期来换取逐渐减少的磁盘 I/O。因为使用了 WKdm 算法,所以整个压缩和解压过程进行得非常快,利用多个 CPU 核心的优势并联运行。

  我们会直观地觉得多核心 CPU 不断压缩 RAM 数据的方法并不是节能的好办法,但是放在现代硬件设备的能耗上,我们的直觉通常都是错的。别忘了“race to sleep”。只要能在短短的时间内完成压缩任务,避免在 RAM 和 SSD 之间交换数据,这就是一大胜利。

  其实 Mavericks 是在尽量避免交换文件。这是系统即将达到 RAM 极点时,Activity Monitor 显示的内存状况。

▲ 16 GB RAM 中已经 15.99GB 有被使用了,但是 Mavericks 的文件交换则为0


  这个情况下需要更多 RAM,Mavericks 开始使用它的文件缓存,文件交换为 0。如果还不够,那么就开始压缩内存,最终文件交换不可避免,但是在开始文件交换之前,Mavericks 还是有许多办法的。

▲ Mavericks的压缩内存8.54GB,最终不得不尝试文件交换

  在同样的内存压力下,在前几个 OS X 系统上一切就不一样了。一旦 RAM 用尽,Mountain Lion 别无选择只能开始交换文件,性能严重下降。

  内存压缩对于 Mavericks 来说是一石三鸟的胜利。这是一次性能的胜利,压缩和解压 RAM 数据的速度快于从磁盘/SSD 读写数据的速度;这是一次减少能耗的胜利,在 RAM 和磁盘之间交换数据需要的时间越短,那么系统限制的时间就越多;最后这是一次能力的胜利,和上几个版本 OS X 相比,Mavericks 可以处理更多高要求的工作。

发表评论

电子邮件地址不会被公开。 必填项已用*标注