近数据处理与可计算存储:一探虚实
01 背景
国际数据公司 (IDC) 估计,2020年全球新产生或者复制的数据量是64.2ZB [1],这需要消耗64,000,000,000 (640亿) 块1TB容量的存储设备。到2025年,这个数据可能会增长到175ZB。数据量的增大需要高效的数据处理框架。在当前主流的大数据处理架构中,存储设备作为一种被动设备,通常与具有数据处理能力的主机通过PCIe/U.2/SAS/SATA等数据传输接口互联。
数据处理时,应用程序调用主机操作系统接口向存储设备发命令,将需要的数据移动到主机的内存中做计算,然后将结果或者产生的新数据写回到存储设备。数据移动产生存储互联带宽、算力、功耗等开销,这种持续的大数据移动成为数据处理框架中难以突破的性能瓶颈。
当前被动存储架构的一个有希望的替代方案是在空间上离数据近的地方部署算力,让数据处理离数据源更近,这种方式也被称为近数据处理 [2]。可计算的存储设备(Computational Storage Device, 简称CSD)是近数据处理的一种代表性实现方案。CSD原型可以追溯到 1970 年代 [3]和 1990 年代 [4]的一些开创性工作,但是从概念提出至今鲜有产品问世。
最近,随着SSD在数据中心的广泛部署,CSD的概念再次得到关注,有一些定制化的学术和商业原型,并且有支持设备内数据压缩的固态盘量产 [5]。存储网络工业协会(SNIA)近期也发布了可计算存储的架构模型 [6]和接口规范 [7]。本文,我们探讨计算存储领域的研究工作和工业实践,并展望相关技术的市场化前景。
近数据处理和可计算存储的基本思路是“在离原料仓库近的地方开展生产”。
图1:传统存储架构中的设备接口调用和数据流
图2:可计算存储架构中的设备接口调用和数据流 [7]
02 架构比较
我们通过与传统架构对比的办法来理解可计算存储的概念。图1和图2分别是传统的存储计算架构和可计算存储架构中设备接口调用和数据流示意图。
传统存储架构的数据处理
图1所示的传统架构中一次完整的数据访问、处理、结果保存大致可以分为如下五个步骤:
1. 内存分配:
主机分配内存
2. 读数据请求:
主机发起从存储设备读取数据的请求(通常通过文件、key-value等接口)
3. 数据传输:
存储设备响应主机的请求,返回主机需要的数据。
主机将返回数据放入步骤1分配的内存中。
4. 数据处理:
主机对内存中的数据做处理(查询、计算、加密、压缩等)
5. 写结果:
主机发起写请求并将计算处理结果写入存储设备(可选步骤,应用可能不需要存结果)
可计算存储架构的数据处理
图2所示的可计算存储架构中一次完整的数据访问、处理、结果回传、保存大致可以拆分为如下七个步骤:
1. 主机请求存储设备在设备内部分配内存
2. 读数据请求:
主机请求存储设备将数据读取到步骤1分配的内存
3. 数据传输:
存储设备响应主机的请求,将数据传输到步骤1分配的内存中(通常通过存储设备内部的快速总线)
4. 计算请求:
主机请求存储设备对写入步骤1分配的内存中的数据做处理
5. 数据处理:
存储设备响应主机的计算请求,对设备内存中的数据做处理(查询、计算、加密、压缩等),并将结果保存在设备内存中
6. 检索结果请求:
主机请求存储设备返回处理好的结果(6-7为可选步骤,主机可能不需要设备返回结果,比如数据加密或压缩操作)
7. 结果传输:
存储设备将处理后的结果数据传输到主机
可计算存储架构的效率优势从何而来?
对比图1和图2所示的两种架构的数据访问处理流程,我们可以看出其中的一些根本性差异,列举在表1中。
表1:传统存储计算架构与可计算存储架构的操作流程区别。
表1总结的传统架构和可计算存储架构的八个操作步骤中,耗时的操作主要涉及数据移动或者复杂计算,其他资源分配和请求相关的步骤执行时间通常很短。两个架构的结果传输和结果保存开销相互抵消。那么,对比两个架构的其他耗时操作,可以发现可计算存储架构具有优势,其更高的效率来自如下两方面。
可计算存储架构的优势:
1. 利用盘内高速总线的设备内部数据传输胜过主机设备之间的互联接口性能。
2. 盘内硬件加速器的数据处理胜过主机端通用处理器上的软件方案性能。
如果以上两方面优势在实际系统中不成立,或者还有其他主导性能的因素需要加以考虑,那么对可计算存储架构效率优势的上述分析就需要重新评估。
图3:Solana 的软件栈提供三种不同的通信路径:
(a) 通过 NVMe 驱动程序到主机的传统数据路径;
(b) 通过片上连接到具有文件系统抽象的 ISP 子系统的路径;
以及 (c) PCIe/NVMe 上的TCP /IP 隧道。[8]
图4:POLARDB中部署带数据库表扫描功能的可计算存储设备。表扫描由FPGA实现硬件加速 [9]
可计算存储的实现关键
从以上的架构比较,我们可以看出可计算存储实现的两个关键点。
第一,需要将算力部署在存储设备内部。存储设备内部有主控芯片用来做IO处理。理论上可以编程设备固件,或者在设备内部运行操作系统,利用主控芯片的算力通过软件的方式来执行数据处理操作。图3展示Solana 可计算存储的软件栈,其设备端在ARM A53核上运行操作系统来执行自然语言处理应用。但是,由于传统主控芯片是小核实现,其算力往往非常有限。为了达到高效的近数据处理,需要在可计算存储设备内部,针对特定的应用场景,部署定制化的硬件加速器。这些硬件加速器常以FPGA或者ASIC芯片的形式实现。图4展示POLARDB中部署带数据库表扫描的可计算存储设备。数据库扫描由FPGA实现硬件加速。
图5:可编程的闪存存储基本软件架构 [10]
第二,主机能够指示存储设备处理数据并返回结果。传统的存储栈在应用程序、文件系统、块设备驱动层进行模块化开发,天然形成不同层次的“语义鸿沟”。应用程序访问数据的典型接口是文件名和文件内偏移地址。传统架构中,应用程序需要对数据做处理的唯一办法是先通过文件系统接口把数据读到内存,然后对数据做处理。如图2所示,可计算存储要求应用程序可以指示存储设备去访问和处理数据,传统的存储栈无法达到这个目标,因为存储设备内部没有文件的概念。那么要使得应用程序可以指导存储设备来做数据处理,就必须要跨越应用程序与存储设备之间的“语义鸿沟”,让应用程序可访问的接口信息,通过层层传递后仍能以存储设备可理解的方式到达设备端。那么实现可计算存储,就需要修改现有软件栈的所有层次。从主机上面向用户的接口到可计算存储设备的硬件抽象层。图5展示了可编程闪存存储的基本软件架构,这是可计算存储的一种具体实现。
可计算存储的实现关键:
1. 在存储设备内部部署算力(通常以硬件加速器的形式实现)
2. 实现让主机能够指示存储设备处理数据并返回结果的接口和协议
03 业界动态
本章,我们总结工业界在可计算存储领域的标准化工作。我们通过两个具体的产品案例来分析可计算存储技术落地的关键。
图6:基于NVMe可计算存储扩展的简单数据筛选程序执行流[12]
行业标准
第一章,我们提到存储网络工业协会(SNIA)近期发布了可计算存储的架构模型 [6]和接口规范 [7]。第二章,我们基于SNIA的架构和接口进一步比较了可计算存储与传统存储架构中的设备接口调用和数据流。从这些工作,我们看到SNIA近年在可计算存储方向引领整个行业所取得的重大进展。在此基础上,NVMe任务组也扩展NVMe协议以支持可计算特征。NVMe扩展协议的一个有趣特征是将盘内可执行的计算功能分为固定程序和可下载程序。前者是NVMe控制器上固化的,而后者则允许主机端的应用程序运行时将程序推送到设备控制器上运行。可下载程序为设备的运行时计算功能更新提供了可能。图6展示了扩展的NVMe协议支持的数据库表格筛选功能的执行流,它与图2所示的SNIA标准执行流很接近,此处我们对细节就不作赘述。下一节我们谈谈业界的相关案例。
图7: NGD Systems Newport Platform - 64TB PCIe AIC [13]
产品案例
NGD Systems公司发布了一系列具有可计算功能的NVMe/M.2接口固态盘。公开资料没有显示其可计算存储处理器、协处理器、和硬件加速器跟主机之间是如何协同工作,以及它们是否遵守SNIA的模型接口规范。有资料显示这些产品确实量产,并且在高性能计算、边缘计算等场景部署。图7展示了NGD的大容量旗舰产品的软硬件架构。
另一个有代表性的可计算存储驱动是ScaleFlux公司量产并发布,带有盘内压缩功能的CSD2000/3000系列固态盘[5]。盘内压缩功能是可计算存储一个实实在在成功落地的案例,但是这个成功是基于两方面特殊因素的。第一,由于数据压缩的特殊属性,运行在主机上的应用程序和存储设备控制器在压缩这个处理操作上并不存在“语义鸿沟”,因此不需要跨主机和设备的协同处理,也就不需要整个存储栈自上而下的修改。虽然盘内压缩仍然涉及闪存页面逻辑物理地址映射、闪存介质访问、元数据管理等诸多设计和实现上的修改,但由于这些修改只涉及存储设备的内部组件,事情因此简单了很多。第二,数据压缩带来的价值具有普遍接受性,这使得数据压缩盘可以成为标品,而不是定制品,这就给压缩盘的量产落地创造了条件。其他的盘内计算功能,比如数据库查询、正则表达式、图计算等,恰恰是因为缺少数据压缩这样的普适价值属性而无法以标品的形式量产落地。即使是数据加密这类与数据压缩属性相当类似的计算,由于其不具有普适价值,因此仅以可支持的特征存在而实际中并没有被广泛使用。
04 总结与展望
过去几年,可计算存储领域的进展让人振奋。可计算存储,让计算在离数据源最近的地方进行。这原理非常合理,但是这个想法的提出 [4] 至今已有20余年,量产落地的产品屈指可数。随着数据处理器(DPU)的逐年成熟,存储内部部署算力已经不是问题。另外,SNIA推出的可计算存储的模型及接口规范为主机指示设备处理数据提供了参考。可计算存储的两个实现关键都已经不是问题。我们预测,可计算存储在未来几年会进入一个快速发展期。可计算存储广泛的市场化还有没有难以逾越的挑战呢?如我们在2.4节分析的,可计算存储架构的一个的主要性能优势是基于盘内硬件实现的特定功能加速器,而这种加速器通常只能完成少数定制功能,这就极大限制了可计算存储设备的应用场景,为量产制造了障碍。NVMe的可计算存储扩展协议支持可下载程序,这极大丰富了盘内计算类型,可以支持更广泛的应用场景。问题是这个程序是以软件的形式在盘内运行,那么与将数据读到主机执行计算相比,盘内软件执行是否还有性能优势呢?Kwon等研究人员 [14] 在他们最近的盘内执行图计算的文章中提出在盘内集成FPGA,让整个可计算固态盘的硬件计算功能可编程,从而既能支持多种图计算,也能维持硬件的性能优势,这是一个具有启发性的方案。近数据处理在效率上很有吸引力,但是这个效率主要是建立在定制加速器的基础上。定制加速器的高效率和通用计算引擎的广泛应用兼容难以兼得,这可能是未来一段时间内可计算存储设备量产落地面临的一个主要挑战。
参考文献
[1] Data Creation and Replication Will Grow at a Faster Rate than Installed Storage Capacity, According to the IDC Global DataSphere and StorageSphere Forecasts, http://www.idc.com/getdoc.jsp?containerId=prUS47560321
[2] Balasubramonian, Rajeev, Jichuan Chang, Troy Manning, Jaime H. Moreno, Richard Murphy, Ravi Nair, and Steven Swanson. "Near-data processing: Insights from a micro-46 workshop." IEEE Micro 34, no. 4 (2014): 36-42.
[3] Baum, Richard I., and David K. Hsiao. "Database Computers? A Step Towards Data Utilities." IEEE Transactions on Computers 25, no. 12 (1976): 1254-1259.
[4] Acharya, Anurag, Mustafa Uysal, and Joel Saltz. "Active disks: Programming model, algorithms and evaluation." ACM SIGOPS Operating Systems Review 32, no. 5 (1998): 81-91.
[5] ScaleFlux. CSD 2000 Data Sheet. http://oss.scaleflux.com/202105/file_20210527_125844179.pdf, 2021. Online; accessed 3 March 2022.
[6] SNIA. 2021. Computational Storage Architecture and Programming Model Version 0.8 Revision 0.
http://www.snia.org/sites/default/files/technical_work/PublicReview/SNIA-Computational-Storage-Architecture-and-Programming-Model-0.8R0-2021.06.09.pdf
[7] SNIA. 2021. Computational Storage API Version 0.5 rev 0.
http://www.snia.org/sites/default/files/technical-work/computational/draft/SNIA-Computational-Storage-API-v0.5r0-DRAFT.pdf
[8] HeydariGorji, Ali, Mahdi Torabzadehkashi, Siavash Rezaei, Hossein Bobarshad, Vladimir Alves, and Pai H. Chou. "In-storage Processing of I/O Intensive Applications on Computational Storage Drives." arXiv preprint arXiv:2112.12415 (2021).
[9] Cao, Wei, Yang Liu, Zhushi Cheng, Ning Zheng, Wei Li, Wenjie Wu, Linqiang Ouyang et al. "{POLARDB} Meets Computational Storage: Efficiently Support Analytical Workloads in {Cloud-Native} Relational Database." In 18th USENIX Conference on File and Storage Technologies (FAST 20), pp. 29-41. 2020.
[10] Lukken, Corne, and Animesh Trivedi. "Past, Present and Future of Computational Storage: A Survey." arXiv preprint arXiv:2112.09691 (2021).
[11] Eli Tiomkin, NGD Systems, Computational Storage Architectural Discussion, http://www.snia.org/sites/default/files/SDCEMEA/2020/7%20-%20Eli%20Tiomkin%20NGD%20-%20Computational%20Storage.pdf
[12] Stephen Bates, Eideticom, NVMe Computational Storage Update, http://www.snia.org/sites/default/files/SDC/2021/pdfs/SNIA-SDC21-Malone-Bates-NVMe-CS.pdf
[13] NGD Systems, Newport Platform AIC, http://www.ssdcompute.com/Newport-Platform-PCIe-AIC.asp
[14] Kwon, Miryeong, Donghyun Gouk, Sangwon Lee, and Myoungsoo Jung. "Hardware/Software Co-Programmable Framework for Computational SSDs to Accelerate Deep Learning Service on Large-Scale Graphs.", In 20th USENIX Conference on File and Storage Technologies (FAST), 2022.