测试Reef:RGW工作负载中的吞吐量和恢复

Laura Flores

简介

我们邀请您阅读名为“测试Reef”的博客系列文章的第一期——在这个系列中,我们将解释我们如何在各种场景下测试上游Reef,以衡量其功能和性能与Quincy基准线的对比。

本文中的所有结果均由Storage Workload DFG团队提供。请继续阅读,了解我们如何通过填充RGW集群、老化集群、诱发节点故障并启动恢复来收集最新的吞吐量和恢复结果,从而测试Reef。

测试计划

以下测试旨在验证RADOS和RGW功能,并衡量大规模下的基准性能。所有测试均在上游版本的Reef(18.1.2)上执行,并在上游版本的Quincy(17.2.6)上重复执行,以进行比较。使用了两种对象大小集合:较小的对象大小工作负载使用五个Warp驱动程序,范围为固定大小(1KB、4KB、8KB、64KB、256KB),每个存储桶一个大小,而更通用的对象大小(1MB、4MB、8MB、64MB、256MB)则相反。

测试周期 1:RGWtest 工作负载

此测试周期填充 RGW 集群,并测量集群为新集群时的性能,以及集群老化几个小时后的性能。此测试周期在小对象和通用对象大小上执行。以下几点描述了测试周期的每个步骤

  1. 集群填充 - @4小时
  2. 1小时混合工作负载测量新集群(45% 读取,35% 写入,15% 统计,5% 删除)
  3. 混合老化工作负载
    1. 相同的操作比例
    2. 较小对象 24小时,通用对象 12小时
  4. 1小时混合工作负载测量老化集群

测试周期 2:OSDfailure 工作负载

此测试周期填充 RGW 集群,并测量在各种节点故障场景下的性能和恢复时间。此测试周期在小对象和通用对象大小上执行。以下几点描述了测试周期的每个步骤

  1. 集群填充 - @4小时
  2. 2小时混合工作负载 - 无故障
  3. 2小时混合工作负载 - 停止一个OSD节点(24个OSD)
  4. 2小时混合工作负载 - 停止另一个OSD节点(24个OSD)
  5. 2小时混合工作负载 - 启动缺失的OSD
  6. 监控恢复,直到所有PG处于active+clean状态

测试环境

以下几点显示了我们的测试场景中使用的硬件、软件和工具。测试在两个集群上运行,每个集群有 8 个 OSD 和 4096 个 PG。我们在最新的上游Quincy版本(17.2.6)上运行每个测试场景以收集基准,然后在Reef上游(18.2.1)上运行以收集比较结果。使用 minio warp 工具生成和收集结果。

硬件

  • 3x MON / MGR 节点
    • Dell R630
    • 2x E5-2683 v3(总共 28 个内核,56 个线程)
    • 128 GB RAM
  • 8x OSD / RGW 节点
    • Supermicro 6048R
    • 2x Intel E5-2660 v4(总共 28 个内核,56 个线程)
    • 256 GB RAM
  • 192x OSD(bluestore):每个节点 24 个 2TB HDD 和 2 个 800G NVMe 用于 WAL/DB
  • 池:site{1,2}.rgw.buckets.data = EC 4+2, pgcnt=4096
  • 五个warp驱动节点,每个节点运行多个客户端

软件

  • RHEL 9.2 (5.14.0-284.11.1.el9_2.x86_64)
  • Quincy 上游 (17.2.6) 与 Reef 上游 (18.1.2) 进行比较
  • 非默认设置
    • log_to_file true
    • mon_cluster_log_to_file true
    • rgw_thread_pool_size 2048
    • rgw_max_concurrent_requests 2048
    • osd_memory_target 7877291758
    • osd_memory_target_autotune false
    • ceph balancer off
    • PG autoscaler pg_num_min
      • 4096 data
      • 256 index
      • 128 log/control/meta

使用的工具

  • Warp v0.6.9-without-analyze
  • RGWtest
  • OSDfailure

结果

在集群填充和老化场景中,我们看到Reef的吞吐量有了显著提高,尤其是在小对象工作负载中。在OSD故障场景中,我们看到Reef的吞吐量有所下降;然而,这种下降很大程度上被更快的恢复时间所抵消,尤其是在小对象工作负载中。

RGWtest - 小对象大小

在此测试周期中执行的集群填充和老化工作负载显示出Reef的吞吐量有了显著提高。

下图显示了集群为新集群时Quincy(蓝色)和Reef(红色)之间的读取和写入吞吐量(MB/秒)的比较。Reef显示了显著的改进

下图显示了集群老化后Quincy(蓝色)和Reef(红色)之间的读取和写入吞吐量(MB/秒)的比较。Reef显示了显著的改进

OSDfailure - 小对象大小

虽然诱导的OSD节点故障工作负载显示Reef的吞吐量有所下降,但损失是由于恢复时间显著改善造成的。

下图显示了在第一次诱导的OSD节点故障后Quincy(蓝色)和Reef(红色)之间的读取和写入吞吐量(MB/秒)的比较。Reef显示吞吐量下降

下图显示了在两次诱导的OSD节点故障后Quincy(蓝色)和Reef(红色)之间的恢复时间(小时)的比较。与Quincy相比,Reef中的PG达到active+clean状态的时间明显更短。总共38小时,Reef的恢复时间比Quincy的80小时恢复时间缩短了42小时。

RGWtest 测试周期 - 通用对象大小

在此测试周期中执行的集群填充和老化工作负载也表明Reef的吞吐量与Quincy一样好,或者略好一些。

下图显示了集群为新集群时Quincy(蓝色)和Reef(红色)之间的读取和写入吞吐量(MB/秒)的比较。Reef的结果与Quincy相当

下图显示了集群老化后Quincy(蓝色)和Reef(红色)之间的读取和写入吞吐量(MB/秒)的比较。Reef显示略有改进

OSDfailure 测试周期 - 通用对象大小

与小对象一样,通用对象OSD节点故障工作负载显示Reef的吞吐量有所下降。然而,这种损失也伴随着恢复时间的改善。

下图显示了在第一次诱导的OSD节点故障后Quincy(蓝色)和Reef(红色)之间的读取和写入吞吐量(MB/秒)的比较。Reef显示吞吐量下降

下图显示了在两次诱导的OSD节点故障后Quincy(蓝色)和Reef(红色)之间的恢复时间(小时)的比较。与Quincy相比,Reef中的PG达到active+clean状态的时间缩短了1小时。

资源消耗

在集群填充和老化工作负载以及OSD故障场景期间,也测量了CPU利用率。这些结果对于小对象和通用对象大小而言,在各个版本之间都是可比的。

下图显示了最显著的差异,它是新集群中通用对象大小的Quincy(蓝色)和Reef(红色)之间的平均CPU使用率百分比的比较。Reef的RGW CPU使用率与Quincy相比略有改善。

结论

总而言之,升级到Reef意味着在大多数情况下,尤其是对于小对象工作负载,吞吐量有了显著提高。虽然在OSD故障场景中吞吐量可能会下降,但Reef的恢复时间比Quincy快得多,尤其是在小对象工作负载中。

随着越来越多的用户升级到Reef,我们欢迎社区提供任何和所有的性能反馈。请在 ceph-users 邮件列表中发表您的意见,或加入我们的 Slack