混合存储中 Flashcache 使用的误
区以及解决方案
Flashcache 是 facebook 释放出来的开源的混合存储方案,用 ssd 来做 cache 提升 IO 设备的性能.
很多硬件厂商也有类似的方案,比如说 LSI raid 卡. 但是这个方案是免费的软件方案,而且经过
产品的考验,具体参见:
主页:https://github.com/facebook/flashcache
开源混合存储方案(Flashcache):http://blog.yufeng.info/archives/1165
Flashcache 新版重大变化:http://blog.yufeng.info/archives/1429
但是 flashcache 在使用中很多人会有个误区,导致性能很低。首先我们看下 flashcache 的设计
背景和适用场景:
Introduction :
============
Flashcache is a write back block cache Linux kernel module. This
document describes the design, futures ideas, configuration, tuning of
the flashcache and concludes with a note covering the testability
hooks within flashcache and the testing that we did. Flashcache was
built primarily as a block cache for InnoDB but is general purpose and
can be used by other applications as well.
它是为数据库这样的应用的离散读写优化。如果你用在了顺序读写,就有非常大的性能问题。
那么为什么呢?我来分析下:
flashcache 把内部的 cache 空间分成很多 set, 是以 set 而不是整体为单位提供 cache 以及 flush
后备操作. 也就是说当一个 set 里面的 dirty page 达到一个预设的值的时候,就需要把这么 dirty
page 淘汰并且 flush 到后备设备去,以便腾出空间给更热的数据使用。
那么每个 set 多大呢?
To compute the target set for a given dbn
target set = (dbn / block size / set size) mod (number of sets)
Once we have the target set, linear probe within the set finds the
block. Note that a sequential range of disk blocks will all map onto a
given set.
set 默认是 512*4k = 2M 大小,也就是说如果你的这个 set 刚好是一个文件所在的块,而且每次
这个文件都不停的顺序写,很快这个 set 都变成 dirty, 那么 flashcache 就选择马上刷,这样加速
效果就没有了。
幸好作者 Mohan 认识到了这个问题,提供了解决方案:
见文档: https://github.com/facebook/flashcache/blob/master/doc/flashcache-sa-guide.txt
中的章节 Tuning Sequential IO Skipping for better flashcache performance
评论0
最新资源