暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CAS和bcache缓存方案分析

Ceph开源社区 2020-06-24
1984


No.1

前言



CAS(Cache Acceleration Software)和bcache是两款针对高速固态硬盘的缓存加速软件,前者是Intel推出的商业产品,目前有开源版本Open CAS;后者是Linux内核社区提供的块级别缓存方案,目前由SUSE负责维护两者都可以使用高速固态硬盘加速对低速的HDD硬盘的访问,在非全闪存场景对于提升系统性能具有重要意义。

目前苏研环境主要使用bcache作为性能优化型云盘的缓存方案,为了解两者在性能、使用等方面的差别,分别进行单盘和CEPH集群的测试,其中CAS使用开源版本Open CAS。



No.2

测试环境

2.1

硬件环境

CPU

Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz 32 CPU

网络

2* 10 Gigabit Ethernet1* 1/10 Gigabit Ethernet

NVME SSD

2*1.6T

HDD

14*6T

内存

12*16GB

2.2

软件环境

操作系统

Centos Enterprise Linux release 7.3.1611 (Core)

内核

3.10.0-514.el7.x86_64

Ceph

12.2.8

Vdbench

vdbench50406

CAS

19.09.00.00001206

Bcache

292ab9fd2f7d


No.3

环境配置

3.1

单盘测试环境


1.Cas测试

使用1块NVME和5块HDD搭建CAS测试环境


2.Bcache测试

使用1块NVME和5块HDD搭建bcache测试环境



3.2

集群测试环境

1.Cas集群测试

使用三个节点搭建ceph集群,每个节点使用1块NVME和4块HDD组成cas缓存盘,整个集群共12个osd,3副本,集群可用空间19.29TB,创建11个1T的卷挂载到client节点;


2.Bcache集群测试

使用三个节点搭建ceph集群,每个节点使用1块NVME和4块HDD组成bcache缓存盘,整个集群共12个osd,3副本,集群可用空间19.29TB,创建11个1T的卷挂载到client节点;


No.4

测试用例

4.1

单盘测试用例

1.只写缓存测试

2.缓存回刷时,写性能

3.缓存回刷时,读性能

4.读测试

5.读命中测试

4.2

集群测试用例

1.只写缓存测试

2.缓存回刷时,写性能

3.缓存回刷时,读性能

4.读测试

5.读命中测试


No.5

测试步骤

5.1

单盘CAS

1.只写缓存测试

设置回刷策略为nop(防止测试停止后回刷启动,不方便获取casadm监控数据及接下来的测试),4k随机写入11小时数据;根据vdbench数据性能明显下降前即为只写缓存性能,记为结果1;性能下降后的数据为默认回刷策略下的写性能1,记为结果2(留意是否可以写入单个后端设备所占SSD空间比例外的空间)


2.缓存回刷时,读性能1

默认回刷策略alru与前端IO互斥,前端有IO时回刷不会启动,所以使用默认回刷策略的情况下,读性能也就是后端设备的读取性能;首先在1的测试基础上重置casadm监控计数器casadm –Z -i 1,测试读性能1,记为结果3;(alru侧重于IO优先,acp侧重回刷优先)


3.缓存回刷时,写性能2

改用另一种回刷策略:casadm -X -n cleaning -i 1 -p acp,重置casadm监控计数器,测试写性能2,记为结果4;


4.缓存回刷时,读性能2

在3的测试基础上重置casadm监控计数器,测试读性能2,记为结果5;


5.读测试

恢复环境casctl stop; casctl init --force,读取数据,注意读取SSD容量大小的数据量前后的性能对比(4k随机读填满缓存速度太慢,首先4k随机读测试12小时,然后恢复环境后先用512k随机读3小时快速填满缓存后再用4k测试);


6.读命中测试

恢复环境,读取固定区域数据使其缓存在SSD中(vdbench的wd增加range参数),重置casadm监控计数器,然后再次读取该区域内数据测试读命中性能;


5.2

单盘bcache

1.只写缓存测试

Writeback_running设置为0,写数据;


2.缓存回刷时,读性能

在1的基础上,Writeback_running设置为1,启动回刷的同时测试读性能;


3.缓存回刷时,写性能

在2的基础上,脏数据量已回落至水位线,回刷停止,再次写数据


4.读测试

恢复环境,测试读性能


5.读命中测试

恢复环境,读取固定区域数据使其缓存在SSD中(vdbench的wd增加range参数),重置监控计数器,然后再次读取该区域内数据测试读命中性能;


5.3

CAS集群

1.只写缓存测试

集群搭建完成后,将cas缓存模式设置为writearound,然后灌数据;将缓存模式设置为wirteback,重置cas计数器,然后随机小块写1T数据量,此时三个节点的缓存应该已经被填满,备份数据后,重置cas计数器,继续写测试即为默认回刷策略的回刷写性能1,备份数据


2.缓存回刷时,读性能1

重置casadm监控计数器,测试读性能


3.缓存回刷时,写性能2

将回刷模式设置为acp,重置cas计数器,测试写性能,备份数据


4.缓存回刷时,读性能2

在3的基础上,重置cas计数器,测试读性能,备份数据


5.读测试

切换缓存模式为writearound以回刷脏数据,然后在切换回writebac模式,此时缓存中都是干净的数据;将回刷模式设置为alru,重置cas计数器,测试读性能,备份数据


6.读命中测试

读取固定区域数据到缓存,重置cas计数器,测试读命中性能,备份数据


5.4

bcache集群

1.读测试

搭建集群将缓存模式设置为writearound、sequential_cutoff和sequential_cutoff_bsize设置为4M,灌数据后改回writeback和512K,测试读性能,备份数据


2.读命中测试

读取固定区域数据到缓存,测试读命中性能,备份数据


3.只写缓存测试

Writeback_running设置为0,测试只写缓存性能,备份数据


4.缓存回刷时,读性能

在3的基础上,Writeback_running设置为1,启动回刷的同时测试读性能;


5.缓存回刷时,写性能

在4的基础上,脏数据量已回落至水位线,回刷停止,再次写数据


No.6

测试结果

6.1

单盘cas


6.2

单盘bcache


6.3

Cas集群


6.4

Bcache集群测试


No.7

结果汇总及分析

7.1

测试结果汇总

1.从测试结果看,整体上bcache性能优于CAS,这是由于相对于cas的hash索引,bcache采用了效率更高的B+树索引;

2.Bcache中的gc等逻辑,会导致测试数据存在波动的情况,而cas的数据更稳定;

3.在单盘读命中、集群回刷读测试项中,bcache表现不佳,具体原因是前者测试场景中,bcache在预读数据进入SSD时,由于不区分clean和unused的bucket,导致之前预读入SSD的一部分数据被后来读入的数据覆盖,导致该部分数据不能被读命中,从而拉低性能;后者是因为在回刷读场景下,回刷线程占用的磁盘大部分带宽导致;

4.Bcache回刷算法可根据压力自动调节回刷速率,相对于cas需要手动设置不同回刷算法、速率等,更智能一些;


7.2

测试结果分析

总的来看,Bcache由于使用了B+树索引,总体性能上更有优势,但其GC、回刷等逻辑的引入会导致性能数据出现波动,而CAS由于使用哈希索引,整体架构更简单,性能数据更稳定一些;使用方面,CAS支持IO分类缓存、无需格式化磁盘等一些灵活特性,但也存在手动启动回刷导致节点挂掉等潜在问题;社区方面,bcache合入linux社区较早,有多个厂家参与开发、维护,比较成熟,而CAS目前刚开源不久,还主要是intel在主导开发,社区也不是很活跃, linux社区在已经有缓存方案的情况下也不太可能再合入类似的方案。
上述测试均是基于两者的开源版本进行测试,CAS商用版本应该会更稳定、成熟,因此,对于开源版CAS,目前情况下建议继续观察其成长成熟情况,在对响应要求较高的场景可小范围、实验性部署,生产环境建议联系厂商获取商业版本。

No.8

参考资料

1.https://open-cas.github.io/index.html

2.https://docs.ceph.com/docs/master/

  -  END  -




Ceph中国社区

是国内唯一官方正式授权的社区,

为广大Ceph爱好者提供交流平台!

↓↓↓

开源-创新-自强

官方网站:www.ceph.org.cn

合作邮箱:devin@ceph.org.cn

投稿地址:tougao@ceph.org.cn


长期招募热爱翻译人员,

参与社区翻译外文资料工作。

文章转载自Ceph开源社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论