使用FlashCache改善IO


14

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

对此,我有以下问题:

  • 这还行吗?flashcache适用于块设备,但是这些都是具有自己设置的虚拟机。
  • 我期望提高性能多少?大多数虚拟机运行网站和一些主机游戏。
  • SSD需要多大?更大的SSD可以缓存更多文件,从而提高性能吗?
  • 如果SSD死了怎么办?是否flashcache可以从传统的HDD检索文件,而我只需更换SSD?
  • writebackwritethrough和相比,要快多少writearound

不幸的是,我无法访问测试系统,因此我可以flashcache在不卸载磁盘的情况下安装在活动服务器上吗?我在这里找到了将要使用的出色教程。


我认为,如果可以将SSD用作主驱动器,则可以享受更一致的性能。
ewwhite

无法访问测试系统?您所需要的只是一个带有HDD,SSD的工作站,以及一个带有两个虚拟磁盘(每个设备上都有一个虚拟磁盘)的虚拟机。生产系统不能用作学习实验室。
天鹰

Link在您提到的那个教程上死了。我还有其他地方可以找到该信息吗?
Thaeli 2014年

Answers:


18

对于那些以前从未见过的人来说,闪存缓存是一种使用SSD驱动器扩展Linux块缓存的方法。这比运行具有一半TB RAM的服务器(仅用于缓存)便宜。

这还行吗?

这应该。Linux块缓存通过缓存访问的而不是文件来工作。只要您不授予KVM机器直接访问块设备的权限(您就没有),Linux块缓存就将发挥作用。不过,如果你正在给KVM机直接块设备访问的答案也不太清楚。

如果您使用的是文件支持的虚拟磁盘,那肯定可以。

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

我期望提高性能多少?

这是我们无法回答的。这取决于各种各样的事情。概括而言,将SSD设置为大于活动块集时,将获得最佳性能。如果获得完美的缓存,则性能将类似于在SSD上运行整个系统。您将有效地做的。

SSD需要多大?

找到您需要的确切尺寸是我们无法提供的。显然,越多越好,但是要找到缓存-SSD与主存储之间的确切比例并不是一件容易的事。

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

如果SSD死了怎么办?

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

写:所有写操作均并行写入高速缓存和主存储,因此SSD突然丢失导致VM出错的机会非常小。

变通方法:所有写入操作均写入主存储,并且仅在读取时才进行缓存。虚拟机中没有错误的机会。

Writeback:所有写操作都首先进入Cache,然后在后台写入主存储。如果SSD发生故障,最有可能在您的VM中引起错误,并且我不会在生产中使用此模式。

与写通和写回相比,写回的速度要快多少?

取决于您正在做多少写作。如果您的写入定期使主存储饱和,则性能提升可能会非常显着。如果您大部分时间都在阅读和写作,那么您不太可能会注意到改进。

另外,写回对于您正在执行的操作是一个不好的策略,因此请不要使用它。


1
嗨,系统管理员,谢谢您的全面答复。我不会使用writeback它,因为如果没有一些BBU,它可能会破坏所有内容。毕竟我不会使用SSD缓存,而只会使用普通的SSD。再次感谢!
Devator 2012年

4

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

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

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

为了避免这些警告,更重要的是,请确保LVM2使用了Flashcache设备,此修补程序将调整中的过滤器/etc/lvm/lvm.conf

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

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


1

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

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是​​否适用于这组应用程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.