问题意识
Crimson项目产生的背景,及其特性 ?
Crimson项目背景
Crimson项目产生的背景主要是由于现代硬件技术的快速发展与Ceph存储系统原有架构之间的不匹配。具体来说:
- 1. 硬件性能提升:
- • 内存和IO技术:内存容量和IO性能在过去几十年中显著增加。例如,最新的NVMe设备可以提供数百万的IOPS读写和TB级的磁盘容量。
- • 网络IO:网卡设备现在能够提供超过400Gbps的速度,而几年前只有10Gbps。
- • CPU核心数量:逻辑核心的数量随着晶体管规模的增加而迅速增长,但CPU频率和单线程性能的增长相对缓慢。
- 2. Ceph架构的限制:
- • Ceph最初设计时主要部署在机械硬盘上,依赖于单核CPU性能。随着硬件的发展,Ceph的原有架构难以充分利用多核CPU和高速IO设备。
- • 传统Ceph OSD(对象存储守护程序)依赖线程池处理不同的IO操作,跨CPU核心通信会产生大量的延迟开销。
Crimson项目的特性
Crimson项目通过重新设计Ceph OSD,旨在解决上述问题,并提供以下特性:
- 1. shared-nothing设计:
- • 每个内核或CPU运行一个固定线程,并在用户空间中分配非阻塞任务。请求及其资源被分配到各个核心,可以在同一个核心中处理直到完成。
- 2. run-to-completion模型:
- • 强制每个任务在一个核心中运行直到完成,减少锁和上下文切换的开销。理想情况下,性能将随着内核数量线性扩展,直到IO设备达到其极限。
- 3. 基于Seastar框架:
- • Seastar是一个异步编程框架,提供one-thread-per-core的shared-nothing架构,并提供高效的非阻塞通信和用户空间任务调度。
- • 资源默认情况下不在分片之间共享,Seastar实现了自己的内存分配器以进行无锁分配。
通过这些特性,Crimson项目旨在提高Ceph存储系统的性能和扩展性,使其能够更好地适应现代硬件环境。
参考阅读:
Crimson:高性能,高扩展的新一代 Ceph OSD
Crimson 在Ceph系统中的作用位置-OSD
图描述了Ceph分布式存储系统的架构和Crimson(一个新的OSD实现)在其中的位置。图片主要表达以下几点:
- 1. Ceph的分层架构:从上层应用到底层存储的完整结构。
- 2. 多种接口和协议:包括LIBRADOS、RADOSGW、RBD和CEPH FS,支持不同类型的存储需求。
- 3. RADOS协议:作为核心协议,连接上层接口和底层存储组件。
- 4. 核心组件:OSD(Object Storage Daemon)、Monitor和MGR(Manager)。
- 5. Crimson的位置:通过黄色框突出显示OSD,表明Crimson作为新的OSD实现,是Ceph系统的核心组件之一。
Crimson OSD 软件栈
与传统OSD软件栈相比,Crimson在已有基础上增加了 Seastar Framework
单核线程模型
图展示了Ceph存储系统中的单核线程模型架构。它描述了一种初始实现方式,其中每个对象存储设备(OSD)运行在单独的核心上,采用单线程模型。
主要特点包括:
- 1. 简化的架构:每个OSD独立运行在一个核心上,减少了复杂性。
- 2. 通信效率:逻辑处理不需要跨核心通信,简化了操作。
- 3. 性能限制:由于采用单核心设计,整体性能受到限制。
- 4. 资源约束:存在存储设备数量不足以匹配每个OSD的问题。
- 5. 扩展性挑战:OSD实例变大导致Osdmap大小增加,可能影响系统扩展性。
- 6. 执行模式:采用运行至完成的模型,每个任务在开始后会一直执行到结束。
这种模型虽然简单直观,但在性能和可扩展性方面存在明显局限。它可能适用于小规模或初始部署场景,但对于大规模、高性能的存储系统来说,可能需要考虑更复杂的多核心或分布式模型来克服这些限制。
Ceph IO 路径
展示了Ceph存储系统的IO数据放置层次结构,从上到下依次为:
- 1. 文件层
- 2. 对象层
- 3. 放置组(PG)层
- 4. 对象存储设备(OSD)层
专业术语解释:
- • ino: inode number,文件的唯一标识符
- • ono: object number,对象编号
- • oid: object ID,对象标识符
- • pgid: placement group ID,放置组标识符
- • CRUSH: Controlled Replication Under Scalable Hashing,Ceph使用的数据分布算法
图清晰地展示了Ceph存储系统的数据放置机制。它说明了从文件到最终物理存储的整个数据映射过程,涵盖了对象存储、数据分布算法和故障域概念。这种设计使Ceph能够高效地管理海量数据,同时保证数据的可靠性和系统的可扩展性。理解这一机制对于深入掌握Ceph的工作原理和优化Ceph集群的性能至关重要。
多核线程模型
图描述了一个基于多核线程模型的存储系统架构,主要用于优化OSD(对象存储设备)的性能。其核心特点包括:
- 1. 架构设计:采用seastar分片框架,允许每个OSD使用多个线程,充分利用多核处理器的优势。
- 2. 性能优化:通过使用更多核心处理每个OSD,显著提升了系统性能,超越了单核设计。
- 3. 资源分配:每个分片共享一个物理存储设备(SSD),提高了硬件资源的利用效率。
- 4. 通信机制:实现了跨核心通信,确保了不同核心上运行的线程之间的协调和数据交换。
- 5. 模块化结构:每个分片包含Crimson Messenger、Crimson OSD/PG和Crimson Seastar三个主要组件,形成了一个完整的处理单元。
- 6. 可扩展性:设计支持多个分片(从shard 0到shard n),适应不同规模的存储需求。
多核消息机制
图展示了一个多核心消息传递系统的工作流程,主要用于分布式存储系统中的通信。
- 1. 分片架构:系统使用OSD(对象存储设备)和Msgr(消息处理器)的分片结构,以实现并行处理和负载均衡。
- 2. 核心分配:每个核心都有一个对应的Msgr分片,负责特定的消息处理任务。
- 3. Seastar框架:使用Seastar Reactor作为底层的事件驱动框架,优化了高并发IO操作。
- 4. 协议处理:Msgr分片0负责初始连接和协议处理,包括握手和收集信息。
- 5. 消息分发:所有Msgr分片都具备分发消息和事件的能力,确保高效的消息传递。
- 6. 套接字管理:系统使用seastar套接字进行通信,每个核心都可以接受这些套接字。
- 7. 客户端交互:底层架构支持与客户端或其他OSD的通信。
多核OSD工作流
图展示了一个多核OSD(对象存储守护进程)的工作流程,主要阐述了以下几个关键点:
- 1. 分片结构:系统被划分为多个分片(shard),包括seastore、osd和Msgr分片,每个分片对应一个处理器核心。
- 2. OSD组件:每个OSD分片包含多个关键组件,如本地状态、分片服务、PG到分片的映射表等,用于管理和处理存储请求。
- 3. 状态管理:系统通过获取OSD状态(活动或停止中)来控制工作流程。
- 4. 请求路由:使用PG(Placement Group)到分片的映射来确定请求应该被发送到哪个分片处理。
- 5. 跨分片通信:通过Submit_to机制实现不同分片之间的请求传输。
- 6. 负载均衡:通过将请求分散到不同的分片和核心上,实现了工作负载的均衡分配。
- 7. 并行处理:多核结构允许系统同时处理多个请求,提高整体性能和吞吐量。
全局数据在shards间共享机制
图描述了分布式存储系统中分片间全局数据共享的机制。其主要特点和目的如下:
- 1. 分片架构:系统采用多核心(分片)结构,每个核心代表一个独立的处理单元。
- 2. 状态同步:每个核心维护本地状态(Osd_local_state),包含OSDState、Set_stopping和Set_active等关键状态信息。
- 3. 异步处理:使用seastar::shared_promise和wait_for_active机制实现异步操作,提高系统效率。
- 4. 主核心更新模式:采用"主核心更新并通知其他核心"的策略,确保数据一致性。
- 5. 跨核心通信:通过"Invoke_on_others"方法实现核心之间的通信和状态同步。
- 6. 扩展性:图中显示的"Core n"暗示系统可以扩展到多个核心,具有良好的可扩展性。
图片描述了,当core1没找到本地信息时,会启动通信机制,通过Core0去拉取,并在自身core和远程core同步复制,保证全局数据的一致性。
Seastore 工作流
- 1. 图展示了Seastore存储系统的架构和工作流程,清晰地呈现了其分层设计。
- 2. 架构分析:
- • 逻辑层:负责处理高级抽象,如SeaStore接口和各种管理器(OnodeManager, OmapManager, ObjectDataHandler)。
- • 物理层:负责底层操作,包括事务管理、缓存、日志、LBA管理等。
- • 底层支持:使用Seastar框架作为基础构建块。
- 3. 关键组件:
- • TransactionManager:协调和管理事务,确保数据一致性。
- • Cache和Journal:优化性能和保证数据持久性。
- • LBAManager:管理逻辑块地址,是存储系统的核心组件。
- • BackrefManager和Cleaner:负责垃圾回收和空间管理。
多核 Seastore 工作流
图示在seastore引擎中,会为每个OSD分配 Seastore shard,支持OSD读写操作调用SSD中的数据,其中每个 Seastore shard 都会将挂载的元数据信息写入到SSD superblock中,从而实现共享,提高多核间的通信效率。
值得一提的是 Seastore shard 0 作为第一个启动的引擎流,负责初始化SSD上超级块的文件系统。
总结
- 1. Crimson架构的多核心设计与实现:通过Seastar框架实现多线程模型,优化了Ceph OSD的性能和资源利用,解决了传统单核模式的性能瓶颈。
- 2. 高效的跨核心通信与异步I/O处理:详细讨论了跨核心通信需求及Seastat框架的高效异步I/O处理,确保了请求在不同OSD shard间的高效转发和数据一致性。