在云计算和大数据时代,企业数据总量呈现出激增的趋势,尤其是在人工智能、自动驾驶和 GIS 地理测绘等创新技术领域。其中,值得注意的是非结构化数据的增长尤为惊人。目前非结构化数据的内容占据了当前主要的数据增长量。根据国际数据公司(IDC)预测,到 2023 年,中国的数据量将达到 40zb,其中 80% 超过是非结构化数据,同时非结构化数据的增长速度也会远远超过结构化数据。由此可见,企业用户对于高性能存储的需求愈发强烈。
众所周知,高性能存储离不开硬件技术的支持。当前,已经出现了为新一代性能型全闪分布式存储,提供更高性能存储的裸金属服务器,不仅升级了处理器的工艺及架构,支持更多的核数、更高的主频,帮助企业用户实现性能、算力的不断提升,更是全面提高了 DDR 通道及 PCIe 通道的扩展性。
目前看来,无论是从第一代 InfiniBand 到 40Gb/s、56Gb/s 和 100Gb/s,还是现在的 200 Gb HDR InfiniBand 技术,都在不断创造更高的数据吞吐量记录,为高性能计算、人工智能、云计算、存储等众多数据密集型应用提供领先的效率和可扩展性。
同时,随着 SSD 技术的发展,NVMe 也因高性能、低延时、低功耗、兼容性高和逐渐降低的价格等优势,而被广泛应用。在硬件快速迭代的同时,软件技术也受到了一定的良性影响,如 SPDK、io-uring、DPDK、RDMA 等技术。
实际上,想要构建高性能全闪存储系统,并不只是简单的高性能硬件和软件堆叠,而是需要对存储的系统框架进行重新设计。同时,文件存储系统的性能指标,我们具体指的是元数据性能和数据性能。为此,我们在系统设计之前,主要会考虑以下几个方面:
- 网络延迟
- 无锁队列
- 网络 RPC 与存储 IO 模型
- 上下文切换
- 内存零拷贝
就目前而言,CPU 架构在进行快速地迭代,架构升级带来的就是更高的 CPU 性能。在同代平台中,主频和核心就直接决定了 CPU 的性能上限,虽然主频无法大幅度提升,但是核心数可以较容易地提升。在实际业务中,在多核场景下的“锁”,对性能限制很大,如无锁队列单 core 可以提供百万级的能力,并且可以实现随着 core 数量的增加,而线性提升。但是如果引入了锁,不仅会将系统整体性能限制在单 core 以下,而且随着核心数的提升,性能反而会逐步降低。
常见的网络 RPC 模型是基于 epoll + 线程池的实现,一旦陷入到这种架构中,单个存储节点的性能就很难有所突破。虽然网络 RPC 模型在理论上非常优秀,但是在实际高性能场景中,它并不合适。
工作任务从 A 队列转移到 B 队列,一定概率是从一个 core 调度到另一个 core 上。在转移过程中,唤醒的延迟开销、上下文切换的开销,其中产生的延迟很难保证。很多开源网络 RPC 组件,和一些基于软件模拟实现的存储 Target 方案,很容易出现性能瓶颈明显,单节点基本在 50W IOPS左右。再加上一些内部功能逻辑的限制,很多文件存储单节点仅能提供 40W IOPS,对于全 SATA SSD 节点可能基本发挥硬件性能性能,但对于 NVMe 节点,则会出现性能严重浪费的问题。
在解决掉网络 RPC 性能瓶颈后,下一步需要解决的事,如何高效解决磁盘读写的问题。如使用大量工作线程并发读写 NVME 设备,将带来巨大的调度开销。可使用 SPDK、io-uring 或 AIO 等技术进行 IO 聚合收发,从而缩减工作线程数量,减小调度损耗。
另外,刚才我们也提及了上下文切换的问题,因为 CPU 核数有限,不可能给存储业务配太多工作线程,毕竟大量线程来回调度开销很大,所以就算是绑定 CPU 资源,整体的数量也需要控制,不然调度和上下文切换开销就会大于业务实际开销,导致性能更差。
目前,200G 网络正在普及, 400G 网络也已经发布,如果双卡聚合,则直接可提供 800G 网络带宽。为此,PCIe5.0 的需求也会越来越迫切,全闪的带宽能力也极大提升,从而凸显出内存带宽瓶颈,不可能数据在缓存中来回搬移。想要实现高带宽场景的高利,RDMA 技术就有着天然的优势。而如何高效地管理 RDMA 内存,以及如何在 RDMA 场景中,保证低延迟的前提下,提升集群随机 4K 和 8K并发读写能力,也是需要对 RDMA 做出相应的优化。
总结
综上所述,YRCloudFile 从客户端到 Server 端做了全链路的优化,高并发场景解决连接池中锁的影响,在 Server 端重新设计的网络异步模型和 IO 异步模型,控制路径为保证文件存储系统的语义,深度优化锁相关逻辑,保证极小粒度。在数据流路径上,实现完全无锁化。依赖资源隔离,在低负载时,使用少量 Polling 资源逻辑在负载提升时,Polling 资源也随着提升,直到达到节点性能上限。
在 RDMA 小 IO 场景中,我们为了用 CPU 资源换取更低的延迟,进行了重新设计。针对 RDMA 的 NUMA 环境带宽能力,也进行了优化。因此,YRCloudFile 单节点不仅能提供高 IOPS,还能提供更低的延迟,以及带宽实现将网卡打满。
具体 YRCloudFile 实际测试数值如下(最小集群采用 3 节点服务器 ,每节点配置为单颗 7742 CPU,32G X 8 内存,单个 200Gb Infiniband 卡):