暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Curve 基于 SPDK target 的 iSCSI 性能优化实践

OpenCurve 2023-05-05
793

背景

Curve 是云原生计算基金会 (CNCF) Sandbox 项目,是网易主导自研和开源的高性能、易运维、云原生的分布式存储系统。

网易游戏基础设施团队给美术、策划、QA 业务部门做了一套 win PC + iSCSI 云盘 + 快照克隆能力的素材分发加速流程,能给相关研发流程的用户提供分钟级的分发体验(相比之前的人肉给 PC 机加硬盘扩容、svn clone/checkout 分支耗时数小时),要快上 N 倍,大大提升了研发效率,非常受研发团队欢迎。

但是这个方案的性能目前有一些业务场景不能完全满足(之前是基于开源 Ceph RBD + 开源 tgt target 实现的),Curve 要做的事情就是分析性能瓶颈点、进一步提升整个方案的性能,让更多的研发团队能体验到极速云盘,同时也能覆盖更多的业务场景。


部署架构介绍


存储服务器配置:

- CPU Intel® Xeon® Silver 4114 \* 2

- 内存128G,800G SATA SSD \* 6


- 网卡Mellanox ConnectX-5 10GbE \* 1


- Target 服务器+缓存节点:普通办公 PC 机配置千兆网卡
基于 Curve 块存储方案的部署结构如下图所示:

与开源 Ceph 块存储方案部署架构的区别主要包括:
1. 存储节点之间采用 RDMA 网络;
2. Target 服务器就近部署在办公区,并配置本地缓存;

问题分析

性经过反复对测试和分析,现有方案的瓶颈主要是:
  • win PC 也就是 iSCSI initiator 端到目标节点之间的网络时间

  • 目标的能力

  • 目标本地区存在能力

  • 分布式存储集群性能

优化方案

针对上述瓶颈点,Curve 提出了多项针对性的优化方案:
  • 网络时延:配合集团 IT 部门进行交换机参数调优,将ms级时延降低到数百us,极大提升了 PC 机到 IT 交换机的网络性能;

  • target性能:使用 spdk 版本的 target 替换 tgt target,后端对接 Curve 集群,利用用户态协议栈增加极限性能;

  • target缓存能力:tgt版本的target不支持本地缓存,spdk版本通过配合Open CAS缓存模块,极大提升了PC端iSCSI盘的性能;

  • 分布式集群性能:从 Ceph rbd 集群更换为 Curve 块存储集群,并使用RDMA网络方案,进一步降低存储网络时延,提升集群 IOPS 和吞吐能力;

部署架构调整

比较原始的 Ceph RBD 部分方案,Curve 在部分方案方面做了以下几点调整:

1. 把 iSCSI target 从边缘 IDC 节点迁移到办公区;
2. 为 iSCSI target 配置存储;
3. 把边缘缘 IDC 节点之间的网络改造成 RDMA 协议;

这些调整都得到了性能提升的预期效果。


优化效果

使用 win 操作系统上比较流动的硬盘基准工具 CrystalDiskMark 进行大小型 IO 对比测试,结果如下:

  • Ceph RBD 方案(开启 RBD 缓存):

  • Curve 块存储方案(开启 SPDK OCF 缓存):

通过对比数据可以看出,随着小 IO 性能有 2~3 倍的提升。大 IO 受 PC 机千兆网卡限制达到带宽瓶颈。


后续规划


  • 还需要进一步结合业务实际场景分析性能优化效果,并做进一步的优化调整;

  • CurveFS + SMB 协议支持渲染等依赖共享存储场景探索;


扩展知识

→ Curve 块存储 

与 Ceph 块存储相比,Curve 小文件随机性能比较高,大文件顺序读写性能差别不大。

这方面的指标数据可以参考 GitHub 上的版本 release notes:
https://github.com/opencurve/curve/blob/master/CHANGELOG-1.2.md
Curve 块存储相比Ceph RBD在架构上的优势有相关资料可以参考例如:
https://github.com/opencurve/curve-meetup-slides/tree/main/2020 
https://github.com/opencurve/curve-meetup-slides/tree/main/2021

→ iSCSI

iSCSI 是一种比较经典的存储协议,可以通过以太网挂载远程存储盘使用,在各大主流操作系统上都有广泛的兼容性,因此对于办公常用的 Win PC 来说也是非常合适的远程挂载协议。

→ SPDK target

之前 Curve 提供的 iSCSI target 也是基于开源的 tgt 项目来实现的,当然也做了一些性能调优(参考之前的公众号文https://www.modb.pro/db/329665),但是其最大的问题在于不支持本地缓存,所有的数据读写都要与后端的存储集群交互才能实现,无法针对特定的业务场景进行读写加速。
为此我们基于 SPDK 项目实现了新的target服务,SPDK 项目默认支持了 Open CAS Framework 也即 Open CAS 缓存框架,可以很方便的启用 iSCSI 的缓存加速服务。相关代码已上传到:
https://github.com/skypexu/spdk/tree/cbd_for_v22.05.x

→ Open CAS

Open CAS 是 Intel 主导开源的块设备级别的缓存方案,主要目标是通过使用更高性能的存储设备加速后端块存储 IO 访问。其已被默认集成到了 SPDK 项目中,其项目介绍可以参考:https://open-cas.github.io/getting_started_spdk.htmlSPDK 和 Open CAS Framework 的结合架构示意图如下:

使用 fio 进行性能对比测试发现,配置 OCF 缓存与不启用 OCF 缓存,在同样的 Curve 卷作为后端数据盘场景下,4K 单深度随机写入的 IOPS 性能提升了 5 倍之多。


------ END. ------


🔥 火爆报名中:

2023 Curve 开发者活动来了!

2023 开源之夏 | Curve 邀你与中国存储软件共成长,赢万元奖金

Curve丨Google 编程之夏 2023 招募中

🔥 推荐用户案例:
Curve 文件存储在 Elasticsearch 冷热数据存储中的应用实践
扬州万方:基于申威平台的 Curve 块存储在高性能和超融合场景下的实践
创云融达:基于 Curve 块存储的超融合场景实践 
🔥 推荐硬核技术解析:
ChunkServer 优化使用 bthread 的思考
通过 Samba 来使用 CurveFS 
Curve 块存储 IO 链路零拷贝





关于 Curve 

Curve 是一款高性能、易运维、云原生的开源分布式存储系统。可应用于主流的云原生基础设施平台:对接 OpenStack 平台为云主机提供高性能块存储服务;对接 Kubernetes 为其提供 RWO、RWX 等类型的持久化存储卷;对接 PolarFS 作为云原生数据库的高性能存储底座,完美支持云原生数据库的存算分离架构。

Curve 亦可作为云存储中间件使用 S3 兼容的对象存储作为数据存储引擎,为公有云用户提供高性价比的共享文件存储。

  • GitHub:https://github.com/opencurve/curve
  • 官网https://opencurve.io/
  • 用户论坛:https://ask.opencurve.io/
    微信群:搜索群助手微信号 OpenCurve_bot

文章转载自OpenCurve,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论