Ceph Performance Part 1: Disk Controller Write Throughput
简介 ¶
在 Inktank,我们的开发人员一直在埋头苦干,对 Ceph 进行分析和优化,使其成为地球上最快的分布式存储解决方案之一。我们经常被问到如何构建一个性能最佳的 Ceph 集群。这个问题并不总是容易回答,因为它取决于许多因素,包括资金、容量需求、密度需求和现有基础设施。然而,有一些基本的调查可以进行,以开始了解 Ceph 存储节点中的哪些组件重要。
Inktank 睿智而仁慈的管理层(嗨,各位!)同意允许我用公司信用卡去购物,以回答这些问题。在没有进一步鼓励的情况下,我立即去了一家硬件供应商,并订购了一个 36 驱动的 Supermicro SC847A 机箱,以及 36 个 SATA 驱动器、9 个 Intel 520 SSD、各种控制器以及使这玩意儿实际运行所需的所有其他随机部件。
对于那些喜欢闪亮东西的你们来说,这里有一些图片供你们欣赏
SC847a 尽显其荣耀。
即将到来的预览...
Inktank “性能实验室”
就像所有好得令人难以置信的交易一样,有一个可怕的价格。不知怎么的,电线交叉了,结果是这套装备伴随着某些期望。比如运行测试。成百上千个。也许几千个!而且还要发表文章!这几乎是卖身契。看看他们让我工作的“性能实验室”(是的,那是我的地下室,是的,我做的这个牌子)。我希望你,读者,能从我容易被新玩具所利用的癖好中受益,并阅读我正在撰写的关于此硬件上 Ceph 性能的文章,其中包含令人震惊的细节。你不仅可能会学到一些有趣的东西,而且还能帮助我让管理层相信这并不是一个完全异想天开的想法。
现在我知道你在想什么。你想看到这个机箱启动,所有驱动器和 SSD 都在 5 个控制器上全速运行。你想让我的电费飙升,并看着电表像“圣诞节假期”中所有灯都插上电源时一样旋转。稍后你会看到,我保证(好吧,不是旋转电表的部分)。现在我们将探讨一下管理层让我制作了几个月的一份报告:关于各种 SAS/RAID 控制器设置如何处理各种 Ceph 工作负载以及各种 OSD 后端文件系统。本文使用 SSD 作为日志,因为性能结果往往比将日志放在与数据相同的磁盘上更直接。稍后,我们将探讨这些控制器在日志放在同一磁盘上的表现。
所以,在不进一步赘述的情况下,为了证明我没有通过在 Ebay 上出售所有这些零件来换取酒钱来欺骗公司,让我们开始吧。
硬件和软件设置 ¶
让我首先说一下,SC847A 确实是一头野兽。即使在空闲状态下,低电压 CPU 的 7 个 80x38mm 风扇也以 5K RPM 旋转。当它在高负载下运行时,它们会旋转到 8K RPM,你很容易就能在房子的一楼听到它。我想我可能已经失去了听力的一两分贝,只是坐在它旁边几周,而且我习惯在数据中心工作。如果你决定把这玩意儿放在你的桌子下,一定要知道你在做什么。
让我们看看我们今天要测试的一些控制器
The SAS/RAID Controllers we will be testing.
- High Point Rocket 2720SGL(中心顶部): 这是一款入门级的 SAS 控制器,配备 marvel 9485 RAID 芯片组。这款型号只有 JBOD 模式固件,在网上只需 150 美元即可购买。
- Areca ARC-1880(中间左侧): 这是 Areca 之前一代的高端 RAID 控制器。仍然被认为是相当快的。支持磁盘的 JBOD 模式、直通模式和 RAID0-6 设置。
- Areca ARC-1222(中间右侧): 这是一款较旧的 Areca RAID 控制器,仅包含在此比较中是因为我们碰巧有一个备用控制器。支持磁盘的 JBOD 模式、直通模式和 RAID0-6 设置。
- LSI SAS 9207-8i(底部左侧): 这是 LSI 最新的经济型控制器,使用 SAS2308 芯片组。有趣的是,他们将其出厂时配备 IT/JBOD 固件,该固件不支持任何 RAID 配置。该卡的价格约为 240 美元。
- LSI SAS 9211-8i(底部右侧): 哎,9211-8i。它使用久负盛名的 SAS2008 芯片组,被广泛应用于全球的 ZFS 部署中。基本上是一个支持 JBOD 模式和基本 RAID0/1 功能的 SAS 控制器。似乎没有写入缓存或回写缓存。价格约为 225 美元。
- LSI SAS 2208(未显示): 碰巧的是,我们购买的 Supermicro 主板配备了 LSI 当前的高端 SAS 2208 芯片组,配备 1GB 缓存和完整的 JBOD 和 RAID0-6 模式支持。LSI 独立的同等卡是 SAS 9265-8i,零售价约为 630 美元。
Other hardware being used in this setup includes
- Chassis: Supermicro 4U 36-drive SC847A
- Motherboard: Supermicro X9DRH-7F
- CPUS: 2 X Intel XEON E5-2630L (2.0GHz, 6-core)
- RAM: 8 X 4GB Supermicro ECC Registered DDR1333 (32GB total)
- 磁盘:6 个 7200RPM Seagate Constellation ES 1TB 企业级 SATA
- SSD:2 个 Intel 520 180GB
- NIC: Intel X520-DA2 10GBE
As far as software goes, these tests will use
- OS: Ubuntu 12.04
- Ceph: 0.50
- Kernel: 3.4 from source
- Tools: blktrace, collectl, perf
Test Setup ¶
在本文中,重点是可以通过获得原始控制器/磁盘吞吐量,因此这些测试是在 SC847a 上使用 localhost TCP 套接字连接直接运行的。被测试的每个控制器都支持各种操作模式。为了保持合理,我们正在测试 3 种配置,它们使用相同数量的数据和日志磁盘
- JBOD 模式(所有控制器在此测试中都支持。充当标准的 SAS 控制器。3 个 10GB 日志/SSD)。
- 直通/6xRAID0 模式(在 Areca 控制器上支持,并且可以通过为每个 OSD 创建单个驱动器 RAID0 在 SAS2208 上模拟。使用板载回写缓存。3 个 10GB 日志/SSD)。
- RAID0 模式(一个 OSD 在一个 6 磁盘 RAID0 阵列上。一个 60G 日志位于由两个 SSD 组成的 RAID0 阵列上)。启用支持它的控制器的回写缓存。
关于 Areca 的 JBOD 模式存在一些争议,因为它实际上可能正在使用板载缓存并以类似于其直通模式的方式运行。在测试中,我们将看到这两种模式在 Areca 硬件上往往表现相似,这可能支持这一信念。
为了生成结果,我们使用 Ceph 内置的基准测试命令:“RADOS bench”,它为要写入的每个数据块写入新对象。RADOS bench 具有一定的优点和缺点。一方面,它可以让你清楚地了解 OSD 可以以各种大小写入新对象的速度有多快。它不能测试的是对现有对象进行小写入的速度有多快。这很重要,因为这正是对 RBD 卷进行小随机写入时发生的事情。过去,我们还注意到 RADOS bench 在高吞吐量水平下可能会成为瓶颈。我们正在运行 8 个并发实例的基准测试,并汇总结果以解决此问题。
RADOS bench 让你可以在对象大小、并发运行的数量以及测试运行时间方面进行一定的灵活性。我们已经确定使用以下排列进行 5 分钟的测试
- 4KB Objects, 16 Concurrent Operations (2 per rados bench instance)
- 4KB Objects, 256 Concurrent Operations (32 per rados bench instance)
- 128KB Objects, 16 Concurrent Operations (2 per rados bench instance)
- 128KB Objects, 256 Concurrent Operations (32 per rados bench instance)
- 4M Objects, 16 Concurrent Operations (2 per rados bench instance)
- 4M Objects, 256 Concurrent Operations (32 per rados bench instance)
对于每个排列,我们使用 BTRFS、XFS 和 EXT4 作为底层 OSD 文件系统运行相同的测试。文件系统在每次测试之间被重新格式化并重新运行 mkcephfs,以确保先前测试的碎片不会影响结果。对于这些测试,我们保留了大多数 Ceph 可调参数处于默认状态,除了:“filestore xattr use omap = true”以确保 EXT4 正常工作。我们确实将某些 mkfs 和挂载选项传递给底层文件系统,在有意义的情况下。
- mkfs.btfs options: -l 16k -n 16k
- btrfs mount options: -o noatime
- mkfs.xfs 选项:-f -i size=2048 (-d su-64k, sw=6 用于 RAID0 测试)
- xfs mount options: -o noatime
- mkfs.ext4 选项:(-b 4096 -E stride=16,stripe-width=96 用于 RAID0 测试)
- ext4 mount options: -o noatime,user_xattr
在测试期间,collectl 用于记录各种系统性能统计信息,perf 用于收集正在运行的进程的分析数据。blktrace 也针对每个 OSD 数据磁盘运行,以便我们可以潜在地返回并检查底层块设备上的寻道行为。
4KB RADOS 基准测试结果 ¶
在深入研究这些结果之前,我想谈谈 RADOS bench 运行时实际发生的事情。RADOS bench 的每个实例同时生成并发送多个数据块,通过 TCP 套接字连接(在本例中通过 localhost)发送到 OSD 中的各种放置组。根据目标池的复制级别,每个 OSD 会将收到的数据转发到同一放置组中的辅助 OSD。每个 OSD 必须将其数据写入日志(或者在 BTRFS 的情况下,可能写入数据磁盘)才能向发送者发送数据已写入的确认消息。当数据写入日志时,它会附加到上次写入数据的末尾。这是旋转磁盘上的理想行为,因为它意味着减少了寻道次数以写入数据。最终,该数据必须写入 OSD 数据磁盘。由于文件系统需要执行各种操作来跟踪和放置数据,因此需要进行更多的工作(这往往意味着更多的寻道)。随着文件系统变旧并以令人兴奋的方式碎片化,情况只会变得更糟。重要的是要记住这一点,因为它会对性能产生重大影响。
这些结果合理吗?日志位于 SSD 上,这些 SSD 已被仔细选择,以超过底层数据磁盘的吞吐量和 IOPS 能力。这应该可以防止它们成为此测试中的瓶颈。数据磁盘是 7200RPM SATA 驱动器,每个驱动器能够实现大约 150-200 IOPS。对于 4KB IO 和 6 个磁盘,假设后台没有发生写入合并,则总吞吐量约为 4MB/s。考虑到这些结果,似乎没有发生太多的合并。但是,也有可能正在发生写入合并,并且其他瓶颈正在限制我们。我们有 blktrace 结果,在另一篇文章中,深入研究这些数字会很有趣,看看发生了什么。
我们还能从这些结果中说些什么?最明显的是,JBOD 模式似乎表现最好,而单个阵列 RAID0 配置似乎普遍较慢。完全有可能需要调整各种队列限制或其他参数才能提高这些设置中单个 OSD 的吞吐量。另一件事要注意的是,BTRFS 似乎与 JBOD 模式配合得很好。让我们看看从测试期间收集的 collectl 系统监控数据,看看它是否能为我们提供关于原因的线索。具体来说,我们将查看 OSD 数据磁盘的平均 CPU 利用率、平均 IO 等待时间和平均 OSD 日志磁盘的 IO 等待时间。
点击任何图片以放大它们…
CPU 利用率
数据磁盘等待
日志磁盘等待
非常有趣!CPU 利用率在 JBOD 模式下最高,这在一定程度上是有道理的,因为为每个写入对象都需要进行一定量的处理,而这些模式速度最快。但是,在 JBOD 模式下 BTRFS 测试期间使用的 CPU 利用率特别高!表现最佳的组合(即 JBOD 模式与 BTRFS)也具有最高的等待时间。我对这个的理解是,在这些情况下,旋转磁盘正在努力工作以获得其吞吐量,并且可能正在执行大量的寻道。在非 JBOD 模式下,我怀疑某个地方存在瓶颈,磁盘没有受到那么大的压力。
日志等待时间也很有趣。我认为这些结果表明,虽然廉价/基本的 SAS 控制器对日志磁盘没有显示任何等待时间(它们不应该有;SSD 应该很容易超越旋转磁盘的这种工作负载),但更昂贵的 RAID 控制器似乎正在引入额外的延迟,可能是由于它们所做的额外缓存和处理。尽管如此,性能最佳的配置是 JBOD 模式下的 SAS2208 与 BTRFS,它也具有最高的日志队列等待时间!
让我们看看如果提高并发操作的数量,这些趋势是否会持续下去
高端RAID控制器的性能有了相当大的提升,但仅限于涉及多个OSD的配置。 拥有更高的并发操作数可以让这些控制器隐藏日志磁盘引入的延迟。 另一方面,单个OSD RAID0的性能几乎保持不变。 我怀疑限制单个OSD RAID0性能的瓶颈仍然存在,并且磁盘和控制器都没有受到特别大的压力。 JBOD性能也几乎没有改善。 然而,在这种情况下,写入已经在磁盘队列中排队,因此增加操作数量并不能解决问题。 让我们看看我的理论是否成立
点击任何图片以放大它们…
CPU 利用率
数据磁盘等待
日志磁盘等待
RAID控制器上的直通配置的性能提高到与更便宜的SAS控制器相匹配,但CPU利用率也随之提高。 在Areca控制器上,平均数据磁盘和SSD日志队列等待时间也大幅增加。 看起来这个工作负载很好地排队了操作。 话虽如此,这似乎并没有影响整体吞吐量,因为ARC-1880在此测试中仍然表现良好。
128KB RADOS 基准测试结果 ¶
使用128K写入,情况看起来大致相同,但有一些例外。 使用BTRFS的JBOD配置再次非常快,尤其是在更便宜的SAS控制器和SAS2208上。 另一方面,在SAS2208上的6个OSD RAID0配置,在256个并发4KB测试中是最快的配置,但在本次测试中却是最慢的配置之一。 单个OSD RAID0模式再次普遍较慢。 XFS性能普遍较慢,而EXT4通常介于XFS和BTRFS之间。
点击任何图片以放大它们…
CPU 利用率
数据磁盘等待
日志磁盘等待
使用16个并发128K操作,BTRFS在每个控制器上的每个配置中都生成更高的CPU利用率。 这在BTRFS表现良好的配置中尤其如此,但即使在BTRFS相对较慢的配置中也是如此。 数据磁盘等待时间再次在更快的配置中较高,但有趣的是,BTRFS的等待时间减少了,而XFS的等待时间增加了。 EXT4等待时间基本保持不变。 在日志上,SAS2208在JBOD模式下再次显示最高的IO队列等待时间,但同时也是最快的配置之一。
使用256个并发操作,直通和6个OSD RAID0模式再次显示出显著的改进,而单个OSD RAID0模式仍然较慢。 BTRFS继续在性能方面占据主导地位,而EXT4在Areca ARC-1880和LSI SAS2208上表现出相对不错的结果。
点击任何图片以放大它们…
CPU 利用率
数据磁盘等待
日志磁盘等待
在BTRFS吞吐量相对于16个并发操作测试增加的配置中,CPU利用率也大幅增加。 即使在EXT4性能接近BTRFS的70-80%时,EXT4的CPU利用率也显得相当低。 XFS再次导致各种控制器上的IO等待时间较高。 BTRFS等待时间在ARC-1880上似乎也很高。 在SSD方面,具有回写缓存的RAID控制器再次显示出日志写入相对较高的IO等待时间。
4MB RADOS 基准测试结果 ¶
哇! 仅使用16个并发IO,我们已经有三个最便宜的控制器在使用EXT4推动超过600MB/s,并使用BTRFS推动接近700MB/s。 在JBOD模式下(以及ARC-1880上的直通模式),BTRFS仍然获得略高于600MB/s,但XFS和EXT4都无法跟上。 令人惊讶的是,ARC-1880上的EXT4能够使用6个驱动器的RAID0阵列推动大约550MB/s。 这是我们第一次看到RAID0配置的性能接近6个OSD配置的性能,可能值得在后续文章中进一步调查。
点击任何图片以放大它们…
CPU 利用率
数据磁盘等待
日志磁盘等待
这里没有什么特别新鲜的东西。 BTRFS配置的高CPU利用率。 即使在推动与BTRFS几乎相同的数据量时,EXT4配置似乎更容易对CPU。 XFS显示出更高的数据磁盘等待时间,同时提供的吞吐量低于EXT4或BTRFS。 假设我们查看了blktrace数据,我们会在使用XFS的数据磁盘上看到更高的寻道计数。 我们可以通过在后续文章中使用名为seekwatcher的工具和记录的blktrace数据来验证这一点。 在绕过任何板载缓存的JBOD模式下,队列等待时间似乎相当高,而利用缓存的模式则较低。 相反,SSD日志磁盘上的等待时间在3个SAS控制器上仍然很低,但在RAID控制器上则有不同程度的较高。
使用256个并发IO,情况甚至更好: 在6个控制器中,有4个都能够在使用BTRFS时推动超过130MB/s的每磁盘吞吐量。 这几乎是800MB/s的聚合吞吐量到6个OSD数据磁盘,并且通过日志写入,控制器总吞吐量为1.6GB/s。 不错! EXT4性能仍然良好,但似乎并没有随着更多并发IO的增加而得到太大改善。
点击任何图片以放大它们…
CPU 利用率
数据磁盘等待
日志磁盘等待
CPU使用率、数据磁盘等待时间和日志磁盘等待时间都与我们看到的4MB写入和16个并发IO非常相似。 没有什么惊喜。
结论 ¶
经过数小时的基准测试以及各种操作以防止Libre Office在编译结果时崩溃,我们学到了什么? 通常,JBOD模式表现良好,尤其是使用BTRFS时。 整个板上的单个OSD RAID0吞吐量较差,但有一些例外。 BTRFS显示出最高的吞吐量数字,但也会导致比XFS或EXT4更高的CPU使用率。 利用回写缓存的RAID控制器似乎减少了IO到达数据磁盘的队列长度时间,但尚不清楚这是否是缓存或较低的吞吐量造成的。 奇怪的是,这些相同的控制器显示SSD日志磁盘的队列等待时间较高,尽管这些驱动器在更便宜的SAS控制器上具有非常低的队列等待时间。
让我们看看每个控制器在这些测试中的表现如何。 请记住,这些结论可能不适用于日志与数据磁盘位于同一磁盘上的配置。
- High Point Rocket 2720SGL: 此控制器并非始终具有最高的性能,但它始终具有非常高的BTRFS性能并且非常便宜。 从纯粹的性能角度来看,如果目标是使用BTRFS的JBOD配置,这是一个非常强大的选择。
- Areca ARC-1880: ARC-1880在某些情况下表现良好,在另一些情况下表现不佳。 它在少量并发IO时表现不佳,但在许多并发IO时表现更好,有时甚至领先。 它在EXT4方面也比其他许多控制器表现更好。 在大IO尺寸下,它表现尚可,但无法赶上以JBOD模式运行的便宜控制器。 公平地说,较新的ARC-1882可能在ARC-1880表现不佳的地方表现更好。
- Areca ARC-1222: ARC-1222是一张旧卡,它显示出来了。 它通常在所有测试中都徘徊在包的底部附近。 它像ARC-1880一样,在少量并发IO时遇到问题,但也没有足够的吞吐量来与大IO竞争。 可能不值得购买,即使你在Ebay上看到便宜的价格。 有更好的经济实惠的选择。
- LSI SAS 9207-8i: 此控制器在BTRFS模式下表现非常好,并且通常与2720SGL并驾齐驱。 它更昂贵,但来自一个更受认可的品牌。 如果您想要一个便宜的控制器并且对购买Highpoint感到不舒服,那么这就是您的控制器。
- LSI SAS 9211-8i: 在JBOD模式下,SAS9211-8i的性能与SAS9207-8i和2720SGL非常相似。 它的RAID功能几乎是事后才添加的,并且在使用Ceph时表现很差。 如果您以一个好的价格找到它,这张卡值得购买,但9207-8i通常更便宜并且具有稍好的规格。
- LSI SAS 2208: SAS2208是一个有趣的控制器。 在JBOD模式下,它的行为模仿了更便宜的控制器,并且在使用BTRFS时表现良好,但通常稍慢。 使用6个单磁盘RAID0阵列,它有时表现非常好,并且是性能最高的选项,而另一些时候则表现惨淡。 与ARC-1880类似,此控制器似乎对EXT4甚至XFS更友好,这可能是由于板载回写缓存造成的。 此控制器在某些情况下显示出奇怪的SSD队列等待时间。
未来工作 ¶
本文提供了几种不同控制器在Ceph中执行的性能的高级视图。 在未来的文章中可以进行更多测试和额外的分析。 如果您对想要看到的内容有任何意见,请给我发送 电子邮件 或在文章中留下评论。 以下是一些可能值得在后续文章中调查的内容
更广泛的分析
- 使用8个旋转磁盘进行测试,日志与数据磁盘位于同一磁盘上,而不是6个旋转磁盘和2个SSD用于日志。
- 检查性能如何随着多个控制器和同一节点中更多磁盘/SSD的扩展而扩展。
- 检查性能如何扩展到多个节点(拿出信用卡Inktank!)。
- 使用10GbE和潜在的绑定10GbE在更多驱动器使用时测试性能,使用单独的客户端。
- 其他测试包括对象读取、rbd吞吐量测试、cephfs吞吐量测试、元数据测试等。
更深入的分析
- 调查每个进程的CPU使用率,尤其是在CPU使用率较高的情况下。
- 检查性能如何随着时间的推移而下降。
- 检查各种条件下的底层块设备性能和寻道行为。
- 检查各种调整参数如何影响性能,尤其是在小IO尺寸和快速RAID阵列上。



























