使用FlashCache提高IO性能

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

对此,我有以下问题:

  • 这甚至会工作吗? flashcache适用于块设备,但是这些都是具有自己的设置的虚拟机。
  • 我希望能提高绩效多less? 大多数虚拟机运行网站和一些主机游戏。
  • SSD需要多大? 由于能够caching更多的文件,是否会有更大的SSD增加性能?
  • 如果SSD死亡会发生什么? flashcache会从传统的HDD中检索文件,我可以简单地更换SSD?
  • writebackwritearound相比, writeback要快writearound

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

对于那些以前没有见过的人来说,Flashcache是​​一种用SSD驱动器扩展Linux块caching的方法。 这比运行带有半TB RAM的服务器仅仅用于caching便宜。

这甚至会工作吗?

这应该。 Linux块caching通过caching访问的块来工作 ,而不是文件 。 只要你没有让KVM机器直接访问块设备(你没有),Linux Block Cache就会起作用。 但是,如果您要让KVM机器直接访问块设备,那么答案就不那么清晰了。

如果你使用文件支持的虚拟磁盘,它一定会工作。

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

我希望能提高绩效多less?

这是我们无法回答的。 这取决于各种各样的东西。 从概念上讲,您将获得最大的性能,可以将您的SSD大小设置为大于块的活动集。 如果你获得了完美的caching,你的性能将类似于在SSD上运行整个系统。 你会有效地做的。

SSD需要多大?

找出你需要的确切大小是我们无法帮助的。 显然,越多越好,但findcache-SSD和主存储之间的确切比例并不是一件简单的事情。

复杂的是写入设置立即刷新,如某些文件系统操作和一些数据库configuration。 这些写入只能简单地caching,并且不pipe是否存在flashcache,其性能都不会受到任何影响。

如果SSD死亡会发生什么?

同样的事情发生时,你告诉Linux下降caching,但扭曲。 使用下拉caching,块caching中的任何未刷新写入将被刷新到磁盘。 SSD消失时发生的情况取决于caching模式 :

写入操作:所有的写入操作都是并行写入caching和主存储的,所以在虚拟机上突然丢失SSD的机会非常小。

说明 :所有写入都写入主存储器,只有读取时才被caching。 虚拟机中没有错误的机会。

写回 :所有写入首先进入caching,并在后台写入主存储。 最有可能导致您的虚拟机中的错误,如果SSD失败,我不会在生产中使用这种模式。

回写和writearound相比,回写要快多less?

取决于你在做多less写作。 如果您的写入周期性地使主存储达到饱和,则性能提升可能会相当显着。 如果你主要是通过一些写作来阅读,你不可能注意到改进。

而且,回写对于你正在做的事情来说是一个糟糕的政策,所以不要使用它。

是的,只要你使用正确的块设备,它就可以正常工作。 还有一个窍门。

当LVM扫描PV时,它应该通过实际的硬盘本身以及通过flashcache“虚拟”设备来看到分区。

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

为了避免这些警告,更重要的是,确保LVM2使用flashcache设备,修改/etc/lvm/lvm.conf的filter。

LVM.CONF(5)页将会比我更好地解释它,但是如果所有物理卷都由flashcache支持,我将给出一个示例:

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

Lessfs创build者也有一个层次。 这将允许您在SSD和HDD之间创build混合设备。 层的performance似乎胜过Flashcache。

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

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

//基督教

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

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

O_DIRECT(从Linux 2.4.10开始)尽量减lessI / O对这个文件的caching效应。 通常这会降低性能,但在特殊情况下非常有用,例如应用程序执行自己的caching时。 文件I / O直接进入/来自用户空间缓冲区。 O_DIRECT标志本身会尽力同步传输数据,但不能保证传输数据和必要的元数据的O_SYNC标志。 为了保证同步I / O,除了O_DIRECT之外,还必须使用O_SYNC。 进一步讨论见下面的注释。

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