如何将我的小型 SSD 用作更大硬盘的缓存?

hai*_*img 64 ssd hard-drive software-rec cache

我想使用(小)SSD 磁盘作为大硬盘的缓存。我意识到有一些基于硬件的产品可以做到这一点:HighPoint RocketHybrid HBAIntel SmartResponse等。我只能找到一种纯软件产品:Diskeeper 的 ExpressCache

ExpressCache 智能自动结合 SSD 和 HDD 的最佳属性,无需用户付出任何努力或先决知识,让用户两全其美;动态性能和可扩展容量。由于可以使用小至 4GB 的 SSD,因此它为制造商提供了一种非常实惠的解决方案。

ExpressCache 由用户模式和内核模式组件组成,使用 SSD 作为智能缓存,配合 HDD,提高整体系统性能,大大加快 Windows PC 启动、应用程序启动和数据访问速度。

但是,此产品仅为 OEM

我寻找了替代方案,但没有任何成功……我无法理解这一点:这听起来是个好主意,不需要额外的硬件,而且它可以真正提高磁盘性能而无需花费大量资金。

所以,我问是否有人知道任何软件可以做到这一点,无论是 Windows 还是 Linux。或者,如果您认为这是一个坏主意,我想知道原因。

注意:ReadyBoost 并不真正适合于此。它的构建假设磁盘写入非常昂贵,对具有大量 RAM 的系统影响很小,并且如果您的 SSD 为 100GB 以上,则无法正确扩展。

Sup*_*ous 58

有多种方法可以将 SSD 用作普通硬盘的缓存。这不是一个新想法,并且已经有几个实现。

在 Windows 中:

最好的实现是 NVelo:Dataplex - 它具有读取缓存和可选的写入缓存。不幸的是,与 ExpressCache 一样,它仅对 OEM 可用。获得它的最便宜的方法是购买 OCZ SSD,它将 PCIE 适配器与小型 SSD 封装在一起,并使用 dataplex 软件来缓存您现有的硬盘。

然而,也有纯软件实现:FancyCache - 它的工作原理就像您期望在块层执行读写缓存一样。它主要作为内存缓存存在,但最近获得了对可以任意大的第二层 SSD 缓存(有点像 ZFS L2ARC)的支持。

如果您只是想以写入持久性为代价最大限度地提高 IOPS(例如,与 UPS 结合使用非常好),则替代方案可能是这样的:SuperCache - 这将仅使用 RAM,不使用 SSD。但与其他人不同的是,在商品硬件上将很高兴超过 100,000 IOPS。例如,对于缓存包含数据库索引的块设备非常有用。本质上为任何大小的卷提供类似 RAM-Disk 的性能(假设底层设备可以跟上写入卷)。

在 Linux 中,事情要好一些:

正如之前的海报所提到的,您有Flashcache - 它工作得很好,但它的性能因您的工作负载而有很大差异。在许多访问位置较差的情况下,它的性能不会像您预期的那样好。不知道为什么会这样,但对于大多数工作负载来说,这是一个很好的选择。

最好的选择(虽然代码还没有完全“生产就绪”)是bcache这里有更多信息,虽然有些已经过时了) - 它具有我尝试过的任何 SSD 缓存中最好的性能,并且与其他所有缓存不同提到的选项支持在单个缓存上缓存多个块设备。它还支持(虽然我没有亲自尝试过,它可能还不能工作)多个缓存设备,因此您可以使用多个更便宜的 SSD 来最大化您的 IOPS。代码位于 git 存储库中:git://evilpiepirate.org/~kent/linux-bcache.git。有讨论将其合并到下一个内核版本中,但尚未确定。

就我个人而言,我发现性能最好的选项是 bcache(我的工作负载主要与数据库相关,但我也缓存了我的主要笔记本电脑)。根据我的经验,HDD 的顺序写入吞吐量通常是瓶颈,因为缓存会很快填满,而 HDD 需要写入缓存的扇区,所以越快越好。这当然适用于写入繁重的工作负载,在更平衡的读写工作负载中,情况可能会有所不同。

我还应该警告您,全速运行时,您将很快耗尽 SSD 的写入限制。我目前正在使用我的第三个 OCZ Vertex 3。固态硬盘虽然速度非常快,但不是很耐用,所以希望每隔几个月更换一次。

  • @Supercilious 这就是你失去我的地方。*稍微*更长的寿命?SLC 和 eMLC 闪存的寿命要长*几个数量级*,而不是*略*长。 (6认同)
  • 谢谢你的好回答!至于“倦怠”率,我认为现在这是大多数这些产品仅限 OEM 的主要原因,例如 OCZ Synapse(与 Dataplex 捆绑的缓存 SSD)被过度配置了 50%... (2认同)
  • @Supercilious 为什么不只使用 SLC 或 eMLC SSD?这必须比频繁更换不可靠的 MLC 闪存更有效(当然也更可靠)。 (2认同)

Mat*_*vac 10

有一个非常有趣的 Linux 软件,正在被非常繁忙的服务器使用:

https://github.com/facebook/flashcache

在 SATAII、RAID6 设置中的 8 个磁性旋转驱动器上,我获得了显着的性能提升。使用 SATAIII 闪存缓存 SSD 设备(540 次读取,420 次写入)的随机读取使我的 SATAII 总线饱和到几乎 90-95% - 我有 280MB 读取(在高峰时间),270MB 写入(仅在模拟负载...生产中从未达到) . 它持续了大约半年。磁盘驱动器写入是... 20-30MB/s - 使用空闲 I/O 时间...


pen*_*tur 6

你的SSD有多大?

在 SSD 上安装整个操作系统和软件,同时在 HDD 上存储大量数据,这可能是您获得的最佳效果。

如果您的 SSD 很小,那么在其上放置一个页面文件可能会很有用。我怀疑 Windows 会将您的大部分文件缓存,但至少,它将允许您将最近使用的应用程序内存和文件缓存在 RAM 中,同时允许快速切换到不那么最近使用的应用程序(这将驻留在页面文件中,而页面文件又位于 SSD 上)。

  • +1 此解决方案。实际上使用SSD会产生更好的性能。另一个级别的缓存不太可能带来显着的好处,而将 SSD 用于您的系统分区则会。 (3认同)
  • 您可以使用符号链接并将 MSSDK / Windows 安装程序缓存 / 等移动到您的硬盘驱动器(同时让符号链接指向系统驱动器上所需路径的新位置);并将您自己的代码放在 SSD 上(其中需要快速随机访问的部分)。使用备份可能是比依赖 RAID 更好的解决方案。 (2认同)