Curve核心组件之snapshotclone
克隆快照和克隆的特点 • 快照的定义 快照是云盘数据在某个时刻完整的只读拷贝,是一种便捷高效的数据容灾手段, 常用于数据备份、制作自定义镜像、应用容灾等。 • 快照的特点 • 转储到s3对象存储 • 异步转储快照,底层使用copy-on-write技术,读写不影响转储 • 增量转储,第一次全量转储s3之后,后续只需转储增量部分 • 高可用,快照任务中断自动拉起继续转储快照和克隆的特点 • 克隆的定义 高可用,克隆任务中断自动拉起继续克隆快照克隆服务器架构 • 基于brpc提供restful API的对外http接口 HttpService: • Serivce层面区分上层请求为同步接口调用,还是异步接口调用, 同步接口调用直接调用Core层接口实现功能,异步接口创建Task, 并交由TaskManager调度。 SnapshotService & CloneService: • 任务管理层负责调度SnapshotTask和CloneTask,并向上提供如 读请求到来时,根据bitmap中的信息, • 对于已写过的区域,从本地chunk file读 • 对于未写过的区域,从远端源chunk file读 • 之后,将两者合并返回。 • 同时把源chunk读到的数据异步写入到本地 chunk,并标记bitmap,这个过程称之为 PasteChunk 读时复制原理:CHUNKSERVER端克隆实现-读时复制实现 • 判断是非clone chunk 或者读取的区域已经被拷贝过0 码力 | 23 页 | 1.32 MB | 5 月前3openEuler 22.03 LTS SP2 技术白皮书
及内存带宽控制:支持对低优先级虚拟机的 LLC 和内存带宽进行限制,当前仅支持静态分配。 • CPU 干扰控制:支持 CPU 时间片 us 级抢占及 SMT 干扰隔离,同时具有防优先级反转能力。 • memcg 异步内存回收:支持限制混部时离线应用使用的总内存,并在在线内存使用量增加时动态压缩离线业务内存 使用。 • QuotaBurst 柔性限流:支持关键在线业务被 CPU 限流时允许短时间突破 limit 实现细节, 用户通过 OpenSSL、zlib 标准接口即可以实现快速迁移现有业务。 提供高性能对称加解密、非对称加解密算法能力,兼容 OpenSSL 1.1.1a 及其之后版本,支持同步 & 异步机制。 通过加速引擎可以实现不同场景下应用性能的提升,例如在分布式存储场景下,通过 zlib 加速库加速数据压缩和解压。 应用场景 KAE 加解密 KAE 加解密是鲲鹏加速引擎的加解密模块,使用鲲鹏硬加速引擎实现 及其之后版本,支持同步 & 异步机制。 • 摘要算法 SM3/MD5,支持异步模型。 • 对称加密算法 SM4,支持异步模型,支持 CTR/XTS/CBC/ECB/OFB 模式。 • 对称加密算法 AES,支持异步模型,支持 ECB/CTR/XTS/CBC 模式。 • 非对称算法 RSA,支持异步模型,支持 Key Sizes 1024/2048/3072/4096。 • 密钥协商算法 DH,支持异步模型,支持0 码力 | 48 页 | 5.62 MB | 1 年前3Curve核心组件之Client - 网易数帆
4. 将请求发往leader节点CLIENT IO线程模型 用户线程 1. 用户调用接口,发起IO请求 2. AioWrite将请求封装成io task并放入任务队列 3. 放入任务队列后,异步请求发起成功,返回用户 IO拆分线程 4. 从任务队列取出任务后进行拆分 5. 拆分过程依赖元数据,可能会通过MDSClient向 MDS获取 6. 拆分成的子请求放入队列CLIENT IO线程模型 发送写请求给Chunkserver BRPC线程 10.Chunkserver处理完成后返回RPC Response 11.用户请求的所有子请求完成后,调用 IOTracker::Done 12.调用异步请求回调,返回用户CLIENT IO请求重试 IO分发线程将拆分后的子请求通过RPC请求发往指定的Chunkserver上,RPC有可能会失败,一般情况下 处理逻辑是sleep一个较短时间后重试,但是存在两种特殊的场景: Curve Client发送RPC处标记请求成功,并返回 Chunkserver收到RPC处标记请求成功,并返回NEBD性能优化 NEBD Client接收到IO请求后,直接发送 异步RPC(在用户线程) 发送异步4K RPC的平均延迟在11.26us, 这种情况下单线程只有 89055 iops 发送RPC阻塞了用户线程,导致iops下降 优化点: 增加队列,用户请求放入队列,由后台线 程负责发送0 码力 | 27 页 | 1.57 MB | 5 月前3CurveFS S3本地缓存盘方案
当前,s3客户端在写底层存储的时候是直接写入远端对象存储,由于写远端时延相对会较高,所以为了提升性能,引入了写本地缓存盘方案。也即要写底层存储时,先把数据写到本地缓存硬盘,然后再把本地缓存 硬盘中的数据异步上传到远端对象存储。 方案设计© XXX Page 3 of 9 S3模块接收到写入后先写入写内存缓存页,如果满足持久化的条件后,那么则准备持久化。 如果未配置本地硬盘作为写缓存,那么直 入到远端对象存储;否则,则写入到本地硬盘写缓存目录中。文件写入本地硬盘写缓存目录后,从本地硬盘读目录© XXX Page 4 of 9 做一个硬链接链接到该文件。 本次io在本地硬盘写入好之后,异步上传模块会适时把本地硬盘写缓存目录中的文件上传到远端对象存储集群,上传成功后,删除本地写缓存目录中的对应文件。 同时,缓存清理模块会定时检查本地硬盘缓存目录容量情况,如果容量已经达到阈值了,则进行文件的清理工作。 存在的。 缓存盘空间管理 当缓存文件内容达到阈值时,停止向本地缓存盘写入。 同时,缓存清理模块会定时检查本地硬盘缓存目录容量情况,如果容量已经达到阈值了,则进行文件的清理工作。 本地缓存盘的异步上传 工作队列: 该队列中保存缓存盘中的待上传文件名 工作线程: 遍历工作队列(队列swap),从缓存盘目录读取到文件内容并上传到对象存储。文件上传到对象存储后,直接删除。 工作队列做好互斥管理0 码力 | 9 页 | 150.46 KB | 5 月前3openEuler 21.03 技术白皮书
UKUI/DDE/Xfce DB Web 资源编排 消息中间件 内核热升级 文件系统 芯片、外设驱动 Linux Kernel 5.10 计算 架构 进程 管理 驱动 框架 内存分层 扩展 IO异步 通讯框架 虚拟化 增强 调度 管理 引领内核创新: • Linux Kernel 5.10 :调度、IO、内存管理深度优化。 • 内存分层扩展 etMem:支持多种内存、存储介质统一管理,系统容量平滑扩展。 openEuler 21.03 基于 Linux Kernel 5.10 内核构建,带来了超过 20 多项性能与功能提升: 1. 支持调度器优化:优化 CFS Task 的公平性,新增 NUMA-Aware 异步调用机制,在 NVDIMM 初始 化方面有明显的提升;优化 SCHED_IDLE 的调度 策略,可以显著改善高优先级任务的调度延迟, 降低对其他任务的干扰。优化 NUMA balancing 等耗时操作,带来 更好的性能。 11. dm-writecache 特性:提升SSD大块顺序写性能, 提高 DDR 持久性内存的性能。 12. 支持 io_uring:io_uring 是一个新的异步 IO 框架, 支持 polling 模式,在 polling 模式下,性能提升 显著,与 SPDK 接近,在队列深度较高时性能更好。 13. IMA 商用增强:在开源 IMA 方案基础上,增强安0 码力 | 18 页 | 1.30 MB | 1 年前3openEuler 23.09 技术白皮书
还可以减少进程之间的通信开销,提高了系统的整体性能。 • Memcg 异步回收:Memcg 是一种内核机制,用于限制和管理进程组的内存使用量。当一个进程组使用的内存超过了 Memcg 的限制时,Memcg 会触发内存回收,以确保系统的稳定性和可靠性。Memcg 异步回收是一种优化机制,它 可以在系统负载较低的时候,异步地回收 Memcg 中的内存,以避免在系统负载高峰期间出现内存回收的延迟和性能0 码力 | 52 页 | 5.25 MB | 1 年前3Zabbix 7.0 中文手册
server 转发到 Kafka broker。 异步 pollers 新的 poller 进程能够同时执行多个检查,它分出了以下 poller 类型:- agent poller - http agent poller - snmp poller ( 支持 walk[OID] 和 get[OID] 监控项) 这些 poller 进程是异步的 - 它们可以在不等响应的情况下启动新的检查,并可以配置最多 以配置最多 1000 个并发检查。 异步 poller 的设计是为了提高效率,与同步轮询器相比,同步 poller 在同一时间只能执行一个检查,并且大部分时间都花费在等待响应 上。 server/proxy 配置文件中新增了 pollers 参数,你可以通过修改StartAgentPollers 参数值来启动指定数量的 agent pollers。可以通过分别 修改StartHTTPAgentPollers agent pollers 和 SNMP pollers。 异步 pollers (agent, HTTP agent and SNMP) 的最大并发数是由MaxConcurrentChecksPerPoller 定义的。 要注意升级后,所有的 agent、HTTP agent and SNMP walk[OID] poller 检查将都会切换为异步 pollers。 作为开发的一部分,持久连接 cURL0 码力 | 1951 页 | 33.43 MB | 1 年前3Curve支持S3 数据缓存方案
建s3Request,最后生成s3RequestVer。 4.遍历s3Re 接口读取数据。 questVer中request采用异步 5.等待所有的request返回,更新读缓存,获取返回数据填充readBuf。 ReleaseCache流程 1.由于删除采用异步的方式,所以对于delete操作仅仅需要释放client的cache缓存。这里同时要保证的一点是:上层确保该文件没有被打开,才能调0 码力 | 9 页 | 179.72 KB | 5 月前3CurveFS S3数据整理(合并碎片、清理冗余)
如果标记删除到实际删除之间的时间间隔非常短, 并且在标记删除前已经开始了整理任务, 可能会出现边删除边整理的状态(出现概率较小) 可以在实际删除前检查当前整理的inode列表, 如果在列表里就暂时跳过(同步删除)/重新丢进删除队列(异步删除) 或者就不管, 处理一下报错, 让后续的应该会开发的数据清理工具来删除, 因为出现这个冲突的概率比较小 truncate: 只进行元数据里len的改变, 触发一下compact就行, shrink的部分compact会进行处理0 码力 | 3 页 | 101.58 KB | 5 月前3TGT服务器的优化
纯C代码,外加一些脚本 • 完整的源代码和维护工具、手册 • 编写IO驱动比较容易,容易扩展支持新的存储系统 • 代码独立,容易编译、调试、修改,适应性强让TGT支持curve • 编写curve驱动,底层异步提交I/O,pipeline • 利用NEBD PART 1接口,需要与nebdserver运行在同一台机器 • 支持共享打开,两台TGT服务器可以同时打开一个curve卷 • 让Initiator可以使用multipath0 码力 | 15 页 | 637.11 KB | 5 月前3
共 22 条
- 1
- 2
- 3