今天看文章扫到了两篇讲ceph 的cache的文章,做个小结。首先是ceph 的一个cache 层。
Ceph cache pool tiering
这层不同于flashcache在客户机做一个cache层,而是直接在RADOS内部做了一个cache pool。现在假设慢速设备组成的pool名为cold-storage,由高速SSD组成的pool名为hot-storage。那么通过下面这条命令:
ceph osd tier add cold-storage hot-storage
如下图所示:
之所以打上双引号,是因为在这篇文章的评论中发现,该层其实有时候并不能加快热数据的访问速度。评论中举了一个例子,现在假设有5个Cache node,每个node上有两个作为OSD的SSD。也就是说它们理论上总共可以发挥出10倍于原SSD的读速度,5倍于原SSD的写速度(写journal平分速度?)看这里有分析读写速度 。
而又假设cold-storage上总共有30个HDD,10个SSD。其中每一个SSD作为三个HDD的journal。那么这样总共的读速度也就是30倍的HDD,写的速度我没大看懂评论是怎么算的。然后在这样的配置下,假设SSD的速度是500MB/s,HDD的速度是150MB/s。那么可以得出的结论是前者总的读速度为5GB/s 而后者是 4.5GB/s 。所以也就是说,在有相同数量的HDD和SSD的情况下,Cache tier有速度快的优势,而如果后台有大量的慢速OSD,那么不见得速度比Cache慢。这就是个很有意思的问题了。
但是紧接着的两个对评论的回复,一个是指出了HDD只有在顺序读写时,才可能上百M。另外一个指出了,当后台是Erasure code的PG时,那么其实每次更新和读取的耗费还是挺高的,但是加上这个Cache层,可以隐层耗费带来的性能损失。因为Erasure code分的块太多了,这样很容易造成读取时磁盘的随机寻道。这在作者的CEPH IO PATTERN中有分析.当使用了Cache层后就可以隐藏这部分性能损失。
在分布式系统中,加Cache的速度不一定有原来快,这是一个挺好的问题角度。不知是否可以深挖。
Make your RBD fly with flashcache
还有就是作者试了一下在客户机上套一个flashcache来跑RBD,文章在此。
刚开始作者先介绍了flashcache,bcache和dm-cache。其中三个cache的代码更新速度都比较慢,只有bcache在内核主线当中,flashcache和dm-cache是以模块的形式嵌入到内核中。但是作者当时bcache还没有加入内核主线,所以作者选择使用flashcache。比较稳定。同时带来的性能提升比较大,作者分别使用SSD,裸RBD,和加了flashcache的RBD做了实验对比,实验工具是fio。结果如下:
这里感觉性能提升很大,但只是在一台客户机上,并不是类似于Cache tier位于RADOS中。