计算公式
FileStore + 多副本
条件假设一:
(1)假设每块磁盘作为一个OSD,这个OSD的journal和data都放在这块磁盘上。所有数据都是先写到journal上,然后再写到data上,也就是单OSD的写放大系数是2;
(2)假设OSD个数为N;
(3)假设副本数是M,数据直到写入M个OSD之后才响应,因此对于多副本存储池,写放大系数是M;
(4)因为Ceph软件会损耗CPU资源,也会损耗一些性能,损耗系数定为0.7;
(5)假设单块SSD的4K随机读IOPS是R,4K随机写IOPS是W。
在不考虑网络瓶颈和CPU瓶颈的情况下,Ceph存储池的IOPS估算公式是:
1、4K随机读IOPS = RN0.7
2、4K随机写IOPS = WN0.7/(2*M)
条件假设二:
(1)假设每块SATA磁盘作为一个OSD,有一块NVME磁盘专门作为journal。所有数据都是先写到journal上,然后再同步到data上,也就是单OSD的写放大系数就变成1(假设NVME性能大于所有本机SATA盘之和);
(2)假设OSD个数为N;
(3)假设副本数是M,数据直到写入M个OSD之后才响应,因此对于多副本存储池,写放大系数是M;
(4)因为ceph软件会损耗CPU资源,也会损耗一些性能,损耗系数定为0.7;
(5)假设单块SSD的4K随机读IOPS是R,4K随机写IOPS是W。
在不考虑网络瓶颈和CPU瓶颈的情况下,Ceph存储池的IOPS估算公式是:
1、4K随机读IOPS = RN0.7
2、4K随机写IOPS = WN0.7/(M)
BlueStore + 多副本
条件假设一:
(1)假设每块磁盘作为一个OSD,该磁盘划为2块分区:一个分区作为裸盘来写入数据,另一块做BlueFS用来跑RocksDB。因此我们一次写入的流程可以简化成下图:数据会被直接写入到data分区(裸盘)中,而对象元数据会被写到RocksDB和RocksDB的WAL中,随后RocksDB将数据压缩后存放到磁盘中。我们不再需要在文件系统层做journal,而WAL只在覆写操作时才会用到,因此在副本数量为N的条件下,我们可以推测WAF将收敛于N,也就是单OSD的写放大系数是1。
(2)假设OSD个数为N;
(3)假设副本数是M,数据直到写入M个OSD之后才响应,因此对于多副本存储池,写放大系数是M;
(4)由于ceph软件会损耗CPU资源,也会损耗一些性能,损耗系数定为0.7;
(5)假设单块SSD的4K随机读IOPS是R,4K随机写IOPS是W。
在不考虑网络瓶颈和CPU瓶颈的情况下,ceph存储池的IOPS估算公式是:
1、4K随机读IOPS = RN0.7
2、4K随机写IOPS = WN0.7/(M)
注意:在BlueStore中,磁盘分区会以‘bluestore_min_alloc_size’的大小分配管理,这个数值默认为64KiB。也就是说,如果我们写入<64KiB的数据,剩余的空间会被0填充,也即是‘Zero-filled data’,然后写入磁盘。也正是这样,BlueStore的小文件随机写性能并不好,因此在小文件计算式可以适量减少损耗系数。
条件假设二:
(1)假设每块SATA磁盘作为一个OSD,有一块NVME磁盘专门作跑RocksDB。数据会被直接写入到data分区(裸盘)中,而对象元数据会被写到RocksDB和RocksDB的WAL中,也就是单OSD的写放大系数就变成1;
(2)假设OSD个数为N;
(3)假设副本数是M,数据直到写入M个OSD之后才响应,因此对于多副本存储池,写放大系数是M;
(4)因为ceph软件会损耗CPU资源,也会损耗一些性能,损耗系数定为0.7;
(5)假设单块SSD的4K随机读IOPS是R,4K随机写IOPS是W。
在不考虑网络瓶颈和CPU瓶颈的情况下,ceph存储池的IOPS估算公式是:
1、4K随机读IOPS = RN0.7
2、4K随机写IOPS = WN0.7/(M)
FileStore + 纠删码
相比较多副本冗余策略,纠删码的出现大大节省了磁盘空间,如果我们有N个OSD,并且按照K=3, M=2配置纠删码冗余策略。一次写入操作,实际上会产生(K+M)/K倍的实际写入量。而由于这里使用的存储后端是FileStore,journaling of journal问题会让写放大两倍,因此结合纠删码本身特性,WAF最终会收敛于(K+M)/K2。
在不考虑网络瓶颈和CPU瓶颈的情况下,Ceph存储池的IOPS估算公式是:
1、4K随机读IOPS = RN0.7
2、4K随机写IOPS = WN0.72*K/(K+M)
BlueStore + 纠删码
有了前文的铺垫后,相信到这一步大家能够自己推演出BlueStore在纠删码策略下的写入性能推导公式。由于解决了journaling of journal问题,每次写入不再需要通过文件系统,因此WAF最终将会收敛于(K+M)/M。
在不考虑网络瓶颈和CPU瓶颈的情况下,Ceph存储池的IOPS估算公式是:
1、4K随机读IOPS = RN0.7
2、4K随机写IOPS = WN0.7K/(K+M)