http://www.alidba.net/index.php/archives/tag/flash-cache
一、跳过顺序IO
DM层request送往flashcache,并将读写请求按照目标设备的blocksize进行划分,切割成blocksize大小的bio(或者更小,如果从上层传来的bio已经比blocksize小的话)。
flashcache默认blocksize为4K,因此即使是4G的大文件,到flashcache也会被切割成1million个blocksize大小的请求,flashcache没办法容易的就判断它是顺序IO还是随机IO。你可以通过比较块号知道,但是我不知道dm层是否保证请求会按序到达。
这是flashcache的一个劣势。还有另外一个,我们应该知道,在我们使用RAID层时,挂载/dev/mapper/*而不是/dev/[ms]d*。
而现在,flashcache已经能够跳过顺序IO,这个功能默认是关闭。如果要将判定是否顺序的阈值设为256K,可以通过:
sysctl dev.flashcache.<device>.skip_seq_thresh_kb=256
它在wb\wa\wt三种模式下均可以正常工作,那些想要摒弃“慢速”的SSD顺序写(相比较于磁盘顺序I,如RAID等),或者缓存较小的用户,可以从中获益。
二、”用户接口“
用户操作接口是映射之后的虚拟设备,即/dev/mapper/*下面的设备,如cachedev,而不是基设备
三、flashcache不支持32位平台
四、write around,应用在读负载很大,随机读,但同时伴随有大量的顺序写的情况,如HBASE
五、块清理的两种策略
1)当cache set内的脏块数超过阈值,默认20%,脏块被写回磁盘
2)2-handed时钟算法,写回在最近15分钟没有被访问过的脏块
当然,都是可配置的。