设计工具
公司

Ceph BlueStore:缓存还是不缓存,这是个问题

John Mazzie | 2019 年 3 月

缓存还是不缓存,这是个问题。

你会怎么选择? 要不要为你的 Ceph® 集群进行缓存? 答案是:视情况而定。

如果使用的是高端企业级 NVMe™ 硬盘(如美光® 9200 MAX),可以轻松通过 Ceph 集群获得良好性能。但如果要提高主要由 SATA 硬盘组成的系统的性能,该怎么办? 在这种情况下,建议在 Ceph OSD 服务器上增加几个更快的硬盘,来存储 BlueStore 数据库和预写日志。

美光开发并测试了广受欢迎的 Accelerated Ceph Storage 解决方案,该解决方案利用了在红帽 Linux 上运行的带红帽 Ceph Storage 的服务器。我将介绍几个工作负载场景,并根据我们的解决方案测试实验室的实际结果,展示缓存可以带来哪些帮助。

系统配置

测试使用一个 OSD 四节点 Ceph 集群,配置如下:

 处理器  单插槽 AMD 7551P
 内存  256GB DDR4 @ 2666Hz(8x32GB)
 网络  100G
 SATA 硬盘  美光 5210 ION 3.84TB(12 个)
 NVMe 硬盘(缓存设备)  美光 9200 Max 1.6TB(2 个)
 操作系统  红帽® Enterprise Linux 7.6
 应用  红帽 Ceph Storage 3.2
 每个 SATA 硬盘的 OSD 数量  2
 数据集  50 个 RBD,每个 150GB,2 倍复制

表 1:Ceph OSD 服务器配置

4KiB 随机块测试

使用 FIO(灵活 I/O)进行 4KiB 随机写入时,可以看到使用缓存硬盘后,性能大幅提升,并且尾延迟较低,即使在高负载情况下也是如此。对于 40 个 FIO 实例,性能提高了 71%(190K 对比 111K),尾延迟降低了 72%(119ms 对比 665ms)。

 

Ceph 1

图 1:4KiB 随机写入性能和尾延迟

在 4KiB 随机读取测试期间,性能会有所提高,但这没大有说服力。这在意料之中,因为在读取测试期间,不会使用预写日志,BlueStore 数据库也不会有太大变化。

Chart depicting minor performance improvements in 4KiB random reads with Micron caching, reflecting minimal database impact

图 2:4KiB 随机读取性能和尾延迟

混合工作负载(70% 读取/30% 写入)也证明了在系统中增加缓存设备的优势。性能提升幅度从 64 队列深度时的 30% 提高到 6 队列深度时的 162%。

Micron graph showing higher IOPS and lower latency with caching in a 70/30 read/write mix

图 3:4KiB 随机 70% 读取/30% 写入性能和尾延迟

4MiB 对象测试

使用 4MiB 对象运行 rados bench 命令时,缓存设备会带来一定的性能提升,但没有小区块工作负载那么显著。由于预写日志很小,而对象很大,因此增加缓存设备对性能的影响较小。运行 10 个 rados bench 实例时,有缓存与无缓存相比,吞吐量提高了 9%(4.94 GiB/s 对比 4.53 GiB/s),而平均延迟降低了 7%(126 ms 对比 138 ms)。

图 4:4MiB 对象写入性能

在读取方面,我们再次看到性能的全面提升几乎可以忽略不计。

Chart showing similar Micron 4MiB read performance with and without cache over different thread levels

图 5:4MiB 对象读取性能

结论

如你所见,如果你的工作负载基本都是读取,则在 Ceph 集群中为 BlueStore 数据库和预写日志存储增加缓存设备并不会获得较大的性能提升。但对于写入,情况就完全不同了。虽然对于较大的对象,效果也不是特别明显,但缓存设备真正适合的是小区块写入和混合工作负载。只需少量投资,在系统中添加几个美光 9200 NVMe 硬盘,你就可以充分发挥 Ceph 集群的价值。

对于你的开源存储,结果又如何呢? 有关详情,请访问美光 Accelerated Ceph Storage。

欢迎在 Twitter 上关注我们(@MicronStorage),或者在 LinkedIn 上了解我们的最新动态。

MTS, Systems Performance Engineer

John Mazzie

John is a Member of the Technical Staff in the Data Center Workload Engineering group in Austin, TX. He graduated in 2008 from West Virginia University with his MSEE with an emphasis in wireless communications. John has worked for Dell on their storage MD3 Series of storage arrays on both the development and sustaining side. John joined Micron in 2016 where he has worked on Cassandra, MongoDB, and Ceph, and other advanced storage workloads.