使用 FlashCache 改善 IO

使用 FlashCache 改善 IO

我有一台配备 2 个硬盘(2x 1 TB)的服务器,运行在 RAID 1(SW-RAID)中。我想通过使用来提高 IO 性能flashcache。它上面正在运行 KVM 虚拟机,使用LVM

针对此,我有以下几个疑问:

  • 这能行得通吗?flashcache适用于块设备,但这些都是具有自己设置的虚拟机。
  • 我期望将性能提高多少?大多数虚拟机运行网站和一些主机游戏。
  • SSD 需要多大?更大的 SSD 是否可以提高性能,因为它能够缓存更多文件?
  • 如果 SSD 坏了怎么办?能否flashcache从传统 HDD 中检索文件,然后直接更换 SSD 即可?
  • 与和writeback相比快多少?writethroughwritearound

不幸的是,我无法访问测试系统,那么我可以flashcache在不卸载磁盘的情况下在实时服务器上安装吗?我找到了一个很棒的教程这里我将使用它。

答案1

对于以前没有见过的人来说,Flashcache 是一种使用 SSD 驱动器扩展 Linux 块缓存的方法。它比运行仅用于缓存的半 TB RAM 的服务器更便宜。

这还能用吗?

应该如此。Linux 块缓存的工作原理是缓存访问的, 不是文件。只要您不让 KVM 计算机直接访问块设备(您没有),Linux 块缓存就会发挥作用。但是,如果您给予 KVM 机器直接块设备访问的答案并不那么明确。

如果您使用文件支持的虚拟磁盘,它肯定会起作用。

如果您使用 LV 支持的虚拟磁盘,我不知道。

我期望性能能提高多少?

这是我们无法回答的问题。这取决于多种因素。从理论上讲,将 SSD 的大小设置为大于活动块集将获得最佳性能。如果您获得完美的缓存,您的性能将类似于在 SSD 上运行整个系统。您实际上正在这样做。

SSD 需要多大?

我们无法帮助您确定所需的确切大小。显然,越大越好,但找到缓存 SSD 和主存储之间的确切比例并不是一件简单的事情。

使情况复杂化的是将写入设置为立即刷新,例如某些文件系统操作和一些数据库配置。这些写入只会被短暂缓存,并且它们的性能不会受到闪存缓存存在与否的任何影响。

如果 SSD 坏了会发生什么情况?

当你告诉 Linux 删除缓存时,也会发生同样的事情,但会有所不同。使用删除缓存,块缓存中任何未刷新的写入都将刷新到磁盘。SSD 消失时会发生什么取决于缓存模式

直写式:所有写入都并行写入缓存和主存储,因此 SSD 突然丢失导致虚拟机出现错误的可能性非常小。

写作:所有写入都写入主存储,并且仅在读取时缓存。虚拟机中不会出现错误。

写回:所有写入都首先进入缓存,然后在后台写入主存储。如果 SSD 发生故障,最有可能导致虚拟机出现错误,因此我不会在生产中使用此模式。

与 writethrough 和 writearound 相比,writeback 速度会快多少?

取决于你正在执行多少写入操作。如果你的写入操作定期使主存储饱和,则性能提升可能相当显著。如果你主要是读取,也有一些写入,则可能不会注意到性能提升。

此外,对于您正在做的事情来说,写回是一个糟糕的策略,所以不要使用它。

答案2

是的,只要你使用正确的块设备,它就能正常工作。而且有一个技巧。

当 LVM 扫描 PV 时,它应该通过实际硬盘本身以及闪存缓存“虚拟”设备查看分区。

一个明显的症状应该是 LVM 工具抱怨重复的 PV。

修复方法是调整 中的过滤器,以避免出现这些警告,更重要的是确保 flashcache 设备由 LVM2 使用/etc/lvm/lvm.conf

手册LVM.CONF(5)页会比我解释得更好,但我给你举一个例子,如果全部物理卷由闪存缓存支持:

filter = [ "a/.*dm.*/" ]

答案3

lessfs 创建器还提供了层。这将允许您在 SSD 和 HDD 之间创建混合设备。层的性能似乎优于 Flashcache。

http://www.lessfs.com/wordpress/

http://www.lessfs.com/wordpress/?p=776

//基督教

答案4

一些应用程序以非缓冲的方式打开文件。

http://man7.org/linux/man-pages/man2/open.2.html

O_DIRECT(自 Linux 2.4.10 起)尝试最小化此文件 I/O 的缓存效应。一般来说,这会降低性能,但在特殊情况下很有用,例如当应用程序进行自己的缓存时。文件 I/O 直接在用户空间缓冲区进行。O_DIRECT 标志本身会尝试同步传输数据,但不能像 O_SYNC 标志那样保证传输数据和必要的元数据。为了保证同步 I/O,除了 O_DIRECT 之外,还必须使用 O_SYNC。有关进一步讨论,请参阅下面的注释。

例如,这对于数据库来说非常常见。因此,请仔细检查 flashcache 是否适用于这组应用程序。

相关内容