前言概述
物联网、人工智能、5G 等技术带动数据爆发式增长,企业超大规模数据的存储与治理成本与日俱增,且随着数据库、实时日志分析等关键业务上云,企业对存储系统的性能要求也随之提升,存储系统面临着管理海量数据和提供极致性能的双重挑战。移动云作为国内领先的云服务提供商,与合作伙伴 Intel 一起深耕存储系统性能,打造出了一款百万 IOPS 超高 IO、 4GB/s 超大带宽、百微秒级超低时延、PB 级系统扩展规模的云硬盘产品——移动云极速型云硬盘,全面满足 DT 时代用户对高 IOPS、高带宽、低时延、高扩展性的极致存储需求。
挑战:NVMe磁盘对IO处理模式提出新的要求
NVMe SSD 的新时代已经到来,具有超低时延且提供 IO 并行处理能力的 NVMe 接口正在逐步取代已统治了存储领域 20 多年的 SAS 和 SATA 接口,SSD 市场也逐步转向 NVMe 接口。
在传统的 SATA/SAS HDD/SSD 存储介质数据处理方式中,每一个 IO 都需要以“中断”的方式将数据在用户态和内核态进行频繁交换,整个过程需要经过多次 CPU 上下文切换及数据的内存拷贝,这种处理方式老旧且低效,无法充分发挥 NVMe SSD 的 IO 低时延、高并发的特性。为此,Intel 开发了一套高性能存储套件——SPDK(如图一),
图一:SPDK 组件架构图
Intel SPDK 整体架构分为四层:
➢ 应用和协议层:指 SPDK 支持存储应用类型。iSCSI Target 对外提供 iSCSI 服务,用户可以将运行 SPDK iSCSI 服务的主机作为标准的 iSCSI 存储设备来使用;vhost-scsi,vhost-blk 或 vfio-user 对 QEMU 提供后端存储服务,QEMU 可以基于 SPDK 提供的后端存储为虚拟机挂载 virtio-scsi,virtio-blk 或 NVMe 磁盘;NVMe-oF 对外提供基于 NVMe 协议的存储服务端。
➢ 存储服务层:该层实现了对块和文件的抽象,提供更多存储服务,目前实现了包括QoS 特性,数据压缩和加密,块级缓存,逻辑卷等功能。
➢ 块存储层:该层提供了统一的块设备服务,可以支持不同的存储设备和存储服务,包括本地和远端的存储设备,高性能 NVMe SSD 设备,AIO 设备,Ceph RBD 设备,和 virtio 设备。并且支持自定义的第三方的块存储设备。
➢ 驱动层:这一层主要实现了高性能用户态驱动来支持不同的存储设备和硬件加速设备,比如本地 PCIe NVMe 驱动和网络 RDMA, TCP NVMe 驱动,以及 virtio-blk 和 virtio-scsi 驱动。同时支持 QuickData, DSA 和 VMD 等相关硬件设备。
通过以上对 Intel SPDK 应用和协议层的介绍可知,Intel SPDK 可通过 vhost-blk 对 QEMU 提供后端存储服务,以下我们以 Intel SPDK 前端配置成 vhost-blk,后端配置成 NVMe SSD 场景为例,分析 SPDK 的 IO 栈模型 (如图二1),
图二:传统内核和 SPDK 的 IO 栈对比图
参考文献1:https://rootw.github.io/2018/05/SPDK-iostack/
虚机 IO 请求处理方式差异:
- IO 下发处理方式差异:传统 NVMe SSD 驱动将请求通过系统调用传递给内核块层和 NVMe 驱动层进行处理;而 SPDK vhost 进程以轮循的方式不断从 IO 环中取出请求(意味着虚拟机下发 IO 请求时,不用通知虚拟设备),对于取出的每个请求,vhost 将其以任务方式交给 bdev 抽象层进行处理。
- IO 响应处理方式差异:传统 NVMe SSD 驱动在 NVMe 控制器处理完成后以物理中断方式通知 QEMU IO 线程,由它将响应放入虚拟机 IO 环中并以虚拟中断通知虚拟机请求完成;而 SPDK vhost 进程则会轮循物理 NVMe 设备的 Queue Pair,如果有响应会立刻进行处理,而无须等待物理中断。
- IO 线程模型差异:对比传统 NVMe SSD 在操作前端虚拟机 IO 环或后端 IO Channel 时的多线程加锁处理模式,SPDK 的每个 IO 环或 IO Channel 只会在一个 vhost 线程中被轮循,因而避免了多线程并发操作同一个对象,可以通过无锁的方式操作 IO 环或 IO Channel。
Intel SPDK 通过 IO 轮询和无锁化的优化处理,带来了 IO 时延和吞吐的巨大优化,经过端到端的测试:
➢ IO 时延:传统 NVMe IO 栈的总时延约 40us,而 SPDK 用户态 NVMe IO 栈时延不到 30us,时延上有 25%以上的优化 (如图 2)。
➢ 吞吐量:传统 NVMe IO 栈在单个 QEMU IO 线程处理时,最多能达到 20 万 IOPS,而 SPDK vhost 在单线程处理时可达 100 万 IOPS,同等 CPU 开销下,吞吐量上有 5倍以上的性能提升。
鉴于 Intel SPDK IO 低延时、高吞吐的巨大优势,移动云云存储团队与 Intel 进行深度合作,在结合 Intel SPDK 的基础上设计实现了百万 IOPS 的移动云极速型云硬盘产品。
解决方案:借力 SPDK+RDMA, 打造百万 IOPS 云硬盘产品
移动云极速型云硬盘产品系统整体架构(如图三)由块存储接口层、块存储业务层和底层统一存储引擎层组成:
➢ 块存储接入层:结合 Intel SPDK 技术实现云盘私有客户端驱动 ebsdriver,主要负责接收 KVM+QEMU 的 IO,并根据云盘路由信息将 IO 请求通过块存储服务层分发,至不同的存储节点;
➢ 块存储业务层:blockfs 负责块数据索引管理、云盘 IO 分发管理等功能;
➢ 统一存储引擎层:megrez 专注在数据面,提供数据集群的大规模水平拓展能力、集群容灾及其他服务治理能力,提供数据可靠性管理等功能。
图三:极速型云盘架构概览
在架构设计的技术实现上,移动云极速型云硬盘产品具备以下 4 点创新:
➢ 中心化元数据设计,快速响应 IO 请求
移动云极速型云硬盘产品设计理念之一是支撑超大规模集群,超大规模集群治理首先要解决的问题是数据量增大之后的索引尺度,这个问题长期被业界探讨,根据移动云存储团队在分布式存储领域的多年耕耘与积累,认为去中心化(share-nothing)的设计复杂化了集群的可管理性以及扩容操作的可观察性,相反,中心化索引的分布式存储系统更具有调度灵活、架构简单的优势。
我们通过增大数据存储的粒度来降低索引数量的尺度。为此,移动云极速型云硬盘产品的数据管理单元做了 GB 级别切片设计,并通过内存驻存索引数据快速地响应元数据访问请求,这样即使单集群规模超百 PB,一组通用 x86 服务器组成的元数据索引集群也足够应对使用需求。
➢ 实现追加写特性,支持 Non-stop Write
通过中心化索引管理和追加写的数据模型,实现快速、无中断的可用数据节点选择和替换,在感知到节点不可用时,可立即为后续到来 IO 分配一组新的副本节点用于数据追加写入,此时只需更新索引指向新分配的数据块,即可实现 IO 的 non-stop write 特性,该特性可有效消除因网络异常等导致的 IO 抖动问题,保证存储系统的低延时、高吞吐能力。
➢ 实现 CopySet 副本组,降低副本丢失概率
随着数据的增长,存储集群规模的扩大,多副本技术在面临数据中心关联故障(大面积集群重启或掉电)时数据丢失的风险也越来越被业界关注。为解决该问题,移动云极速型云硬盘产品在研发阶段根据业界总结的多种分布式存储系统副本模式对存储系统可靠性影响(如图四,《Copysets: Reducing the Frequency of Data Loss in Cloud Storage》),并最终在产品系统中设计了基于 CopySets 概念的副本管理能力,通过将所有节点划分为N/R 个 CopySet【N 为节点数,R 副本数】,每次数据写入的时候,按照预置的策略均匀地选择 CopySet 进行写入,能够有效降低数据丢失风险。
图四:极速型云盘的 CopySet 副本选择策略
➢ RDMA+SPDK+CPU affinity,为百万IOPS 保驾护航
为了解决网络传输中服务器端数据处理的延迟,移动云极速型云硬盘产品引入了远程直接数据存取(如图五)协议的支持,RDMA 将数据从一个系统快速传输到远端内存中,而不对操作系统造成任何影响,它消除了数据复制和进程上下文切换的开销,解放内存、带宽和 CPU 处理能力。
Intel SPDK 的轮询、异步、无锁的 NVMe 驱动程序,提供了从用户空间应用程序直接访问 NVMe SSD 的零拷贝、高度并行能力。
CPU affinity 保证同一进程只能被调度到同一 CPU 上,有效避免因缓存未命中等对 CPU 处理性能不利的情况,从而使得进程的运行更高效,程序的性能表现更优秀。
图五:RDMA+SPDK 集成
效果:快稳融智,移动云极速型云硬盘产品正式进入百万 IOPS 时代
依托以上架构设计优势及不断的技术打磨,移动云极速型云硬盘产品在性能、扩展性、协议支持等方面表现优异:
➢ 读写操作极致性能:基于高性能 Intel NVMe SSD 和移动云自研的统一存储引擎,移动云极速型云硬盘产品可为用户提供单盘 100 万的随机 IOPS,最高 4GB/s 的吞吐,500us 的系统平均时延,200us 的单路平均时延,满足应用的极致性能需求;
➢ 集群按需灵活扩展:移动云极速型云硬盘产品允许用户根据业务需求自由配置存储容量,按需扩容。目前系统单磁盘容量最大可支持32TB,满足用户超大存储空间的使用要求;
➢ 协议支持多样性:支持 Vhost、NVMe-oF 协议,可满足虚拟化、裸金属、容器等多种应用场景。
图六:移动云极速型云硬盘产品能力
展望:与 Intel 深度合作为用户提供更极致云存储体验
移动云极速型云硬盘产品,是中国移动云能力中心云存储团队过去几年在公有云存储领域的 深耕和沉淀的成果输出,结合当前业务的需求和存储领域的发展动态,全新打造的自研分布式存储解决方案。随着全新第三代英特尔®至强®可扩展处理器的到来,其更多的处理核心、更优的架构设计及更大的内存容量会为移动云极速型云硬盘产品带来更强劲的性能助力。同时移动云后续计划结合英特尔最新 OPTANE SSD 和/或非易失性内存 OPTANE PMEM,以及 RDMA 网卡,进一步为移动云极速型云硬盘产品提升性能。