Crimson:高性能,高扩展的新一代 Ceph OSD
发布网友
发布时间:2024-09-28 04:17
我来回答
共1个回答
热心网友
时间:2024-10-06 15:06
随着物理硬件的不断进步,存储软件的硬件需求也在不断演变。在过去,Ceph对象存储守护程序(OSD)主要部署在机械硬盘上,提供数百IOPS的读写和数十G的磁盘容量。然而,现代NVMe设备能够提供数百万的IOPS读写,支持TB级别的磁盘容量。在内存方面,DRAM容量在过去20年间增加了128倍,网络IO设备现在能够提供超过400Gbps的速度,与几年前的10Gbps相比,这是一个显著提升。
Ceph的性能挑战在于其架构设计,特别是对于单核CPU性能的依赖,这限制了它充分利用不断增长的IO能力。Crimson项目通过引入shared-nothing设计和run-to-completion模型,重新设计了Ceph OSD,以提高CPU扩展性,同时保持与现有客户端和组件的兼容性。通过比较传统OSD与Crimson OSD的架构差异,我们了解到Crimson OSD如何针对CPU扩展进行重新设计。
在传统OSD架构中,线程池在各个组件中进行操作,导致在多CPU核心场景下共享队列处理任务效率低下。在简单示例中,一个PG操作需要通过messenger worker线程处理原始数据流的组装或解码,然后放入消息队列中进行调度。之后,PG worker线程获取消息,经过处理后将请求提交给ObjectStore。事务提交后,PG完成操作,再次通过发送队列和messenger worker线程发送回复。尽管可以通过增加线程数量来扩展工作负载到多个CPU核心,但这些线程默认共享资源,因此需要锁,这会引入争用问题。
传统架构的主要挑战是锁竞争开销随着任务数和CPU核心数的增加而迅速扩大,某些场景下每个锁点都可能成为扩展瓶颈。此外,即使没有争用,这些锁和队列也会产生延迟开销。多年来,社区一直在分析和优化更细粒度的资源管理和快速路径实现以跳过队列,但这类优化的成果正在减少,可扩展性似乎在当前设计架构下达到了瓶颈。
Crimson项目通过shared-nothing设计和run-to-completion模型,旨在解决CPU扩展性问题。该设计将每个内核或CPU分配一个固定线程,并在用户空间中分配非阻塞任务。请求及其资源可以被分配到各个核心,直到处理完成。理论上,我们不再需要所有的锁和上下文切换,因为每个正在运行的非阻塞任务都使用CPU,直到它完成任务。如果不需要与数据路径中的其他分片通信,理论上性能将随着内核数量线性扩展,直到IO设备达到其极限。这种设计非常适合Ceph OSD,因为在OSD层面,所有IO已经被PG分片了。
虽然跨区通信不能完全消除,但那通常是用于OSD全局状态的维护,而不是用于数据路径中的通信。这里的挑战是,相当一部分现有的锁或线程代码无法重用,需要重新设计,同时保持向后的兼容性。实现这一目标需要对代码的整体理解,以及相关的注意事项。使用shared-nothing架构实现底层one-thread-per-core和用户空间调度是另一个挑战。
Crimson项目基于Seastar框架进行OSD的重新设计,Seastar是一个异步编程框架,具有实现上述目标的所有理想特性。它不仅在C++中实现了one-thread-per-core的shared-nothing架构,还提供了一套全面的功能和模型,这些功能和模型已被证明在其他应用程序中对性能和扩展有效。资源默认情况下不在分片之间共享,Seastar实现了自己的内存分配器以进行无锁分配,并利用NUMA拓扑结构的优势,将最近的内存分配给分片。对于不可避免的跨核资源共享和通信,Seastar要求明确地处理它们。
Seastar框架允许用户在构建块中组织逻辑,通过将逻辑上连接的异步结构组合在一起,而不是将它们分散用于普通的回调中,这使代码更易于实现和可读性更好。Seastar还为循环、计时器以及基于未来的生命周期控制提供了高级工具,以进一步简化应用程序。网络和磁盘访问被封装在shared-nothing和基于f/p/c设计的模式中,不同I/O堆栈(如epoll、linux-aio、io-uring、DPDK等)的复杂性和细微控制对应用程序代码是透明的。
性能测试显示,在相同的随机4KB RBD工作负载下,通过将传统和Crimson OSD与BlueStore后端进行比较来验证single-shard run-to-completion。两个OSD都分配了2个CPU资源。Crimson OSD的随机读取性能大约提高了25%,随机写入情况下的IOPS大约比传统OSD高24%。进一步的分析表明,在随机写的情况下,CPU的利用率很低,大约20%的CPU被消耗在频繁的查询中,这表明Crimson OSD可能不是当前的瓶颈。
Crimson OSD提交和完成IO任务以及在Seastar和BlueStore线程之间进行同步,也有额外的开销。因此,针对MemStore后台重复了同一组实验,两个OSD都分配了1个CPU。结果显示,Crimson OSD在随机读取中提供了大约70%的IOPS,在随机写入中比传统OSD高25%,这与之前的结论一致,即Crimson OSD可以做得更好。
实现多分片路径明确,由于每个PG中的IO已经在逻辑上被分片,所以对IO路径没有太大改变。主要的挑战是确定无法避免的跨核通信,并设计新的解决方案以尽量减少其对IO路径的影响。为了确保解决方案的可扩展性,一些限制需要认真考虑,例如RADOS协议的限制以及Seastar框架的限制。尽管存在一些挑战,如与特定核心上定义的连接的限制,以及Seastar套接字在被accept()或connect()后不能移动到另一个核心,但大部分工作是优化扩展到多个内核的消息传递工作负载,以最小化跨内核消息沿IO路径传递,并理想情况下保持每个消息发送和接收操作最多保持1跳。
实现多核Crimson OSD的一个简单原则是将所有与共享状态相关的处理保持在专用内核上。如果一个IO操作要访问共享资源,要么按顺序访问专用核,要么访问保持同步的共享信息的独占副本。为了实现这一目标,首先让IO操作根据PG分片策略运行在多个OSD分片中,包括PG状态在内的所有全局信息都维护在第一个分片中。此步骤在OSD中启用分片,但需要在第一个分片中做出有关IO调度的所有决策。为了减少不平衡的CPU使用,下一步是将PG-core映射扩展到所有OSD分片。此外,Crimson支持三种ObjectStore后端:AlienStore、CyanStore和SeaStore,每种后端的实现多分片支持的路径是不同的。
最后,加快科技创新的步伐,关键核心技术实现突破,战略性新兴产业发展壮大。在载人航天、探月探火、深海深地探测、超级计算机、卫星导航、量子信息、核电技术、大飞机制造、生物医药等众多领域取得了重大成果,中国成功进入创新型国家行列。科技创新正在推动着社会的进步与发展。
Crimson:高性能,高扩展的新一代 Ceph OSD
Ceph的性能挑战在于其架构设计,特别是对于单核CPU性能的依赖,这限制了它充分利用不断增长的IO能力。Crimson项目通过引入shared-nothing设计和run-to-completion模型,重新设计了Ceph OSD,以提高CPU扩展性,同时保持与现有客户端和组件的兼容性。通过比较传统OSD与Crimson OSD的架构差异,我们了解到Crimson OS...
Ceph Crimson和Seastore介绍
在Crimson中,整个Ceph OSD模块被Seastar库重构,新的IO路径显著提升了性能。Seastar框架的引入使Ceph能够更好地适应现代高性能存储设备,提升存储系统的整体效率。Seastore是Crimson为了适应Seastar模型而开发的一个ObjectStorage系统,取代了原有的BlueStore。Seastore的设计目标是优化SSD等Flash设备的性能,避免...