
前言
CAS(Cache Acceleration Software)和bcache是两款针对高速固态硬盘的缓存加速软件,前者是Intel推出的商业产品,目前有开源版本Open CAS;后者是Linux内核社区提供的块级别缓存方案,目前由SUSE负责维护。两者都可以使用高速固态硬盘加速对低速的HDD硬盘的访问,在非全闪存场景对于提升系统性能具有重要意义。
目前苏研环境主要使用bcache作为性能优化型云盘的缓存方案,为了解两者在性能、使用等方面的差别,分别进行单盘和CEPH集群的测试,其中CAS使用开源版本Open CAS。
测试环境
硬件环境
CPU | Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz, 32 CPU |
网络 | 2* 10 Gigabit Ethernet,1* 1/10 Gigabit Ethernet |
NVME SSD | 2*1.6T |
HDD | 14*6T |
内存 | 12*16GB |
软件环境
操作系统 | 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 |
环境配置
单盘测试环境
1.Cas测试
使用1块NVME和5块HDD搭建CAS测试环境
2.Bcache测试
使用1块NVME和5块HDD搭建bcache测试环境
集群测试环境
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节点;
测试用例
单盘测试用例
1.只写缓存测试
2.缓存回刷时,写性能
3.缓存回刷时,读性能
4.读测试
5.读命中测试
集群测试用例
1.只写缓存测试
2.缓存回刷时,写性能
3.缓存回刷时,读性能
4.读测试
5.读命中测试
测试步骤
单盘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监控计数器,然后再次读取该区域内数据测试读命中性能;
单盘bcache
1.只写缓存测试
2.缓存回刷时,读性能
3.缓存回刷时,写性能
4.读测试
5.读命中测试
CAS集群
1.只写缓存测试
2.缓存回刷时,读性能1
3.缓存回刷时,写性能2
4.缓存回刷时,读性能2
5.读测试
6.读命中测试
bcache集群
1.读测试
2.读命中测试
3.只写缓存测试
4.缓存回刷时,读性能
5.缓存回刷时,写性能
测试结果
单盘cas

单盘bcache

Cas集群

Bcache集群测试

结果汇总及分析
测试结果汇总

1.从测试结果看,整体上bcache性能优于CAS,这是由于相对于cas的hash索引,bcache采用了效率更高的B+树索引;
2.Bcache中的gc等逻辑,会导致测试数据存在波动的情况,而cas的数据更稳定;
3.在单盘读命中、集群回刷读测试项中,bcache表现不佳,具体原因是前者测试场景中,bcache在预读数据进入SSD时,由于不区分clean和unused的bucket,导致之前预读入SSD的一部分数据被后来读入的数据覆盖,导致该部分数据不能被读命中,从而拉低性能;后者是因为在回刷读场景下,回刷线程占用的磁盘大部分带宽导致;
4.Bcache回刷算法可根据压力自动调节回刷速率,相对于cas需要手动设置不同回刷算法、速率等,更智能一些;
测试结果分析
参考资料
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
长期招募热爱翻译人员,
参与社区翻译外文资料工作。






