-
摘要:
随着工业物联网(industrial Internet of things,IIoT)的不断发展,越来越多的设备和传感器开始连接到网络中,产生了大量的时间序列数据(简称“时序数据”),时序数据爆炸式的增长给数据库管理系统带来了新的挑战:持续高吞吐量数据摄取、低延迟多维度数据查询、高性能时间序列索引以及低成本数据存储. 近年来时序数据库技术已经成为一个研究热点,一些学者对时序数据库技术进行了深入的研究,同时出现了一些专门用于管理时序数据的时序数据库,并且已经被应用在多个领域,成为工业物联网中不可缺少的关键组成. 现有的时序数据库相关综述侧重于时序数据库的功能和性能比较,以及在特定领域中对时序数据库的选择建议,缺少对时序数据库持久化存储、查询、计算和索引等关键技术的研究,同时这些综述工作出现的时间较早,缺少对现代时序数据库关键技术的研究. 对学术界时序数据存储研究和工业界时序数据库进行了全面的调查和研究,凝练了时序数据库的4类关键技术:1)时间序列索引优化技术;2)内存数据组织技术;3)高吞吐量数据摄取和低延迟数据查询技术;4)海量历史数据低成本存储技术. 同时分析总结了时序数据库评测基准. 最后,展望了时序数据库关键技术在未来的发展方向.
Abstract:With the continuous development of the industrial Internet of things (IIoT), an increasing number of devices and sensors are being connected to networks, resulting in a massive influx of time series data. The explosive growth of time series data presents new challenges for database management systems: continuous high-throughput data ingestion, low-latency multidimensional data queries, high-performance time series indexing, and cost-effective data storage. In recent years, time series database technology has become a hot research topic in the field of databases. Some scholars have conducted in-depth research on time series database technology, while specialized time series databases have emerged for managing time series data and have been applied in various fields. These databases have become essential components in IIoT. The existing reviews of time series databases primarily focus on the comparison of functionalities and performance, as well as providing selection recommendations for specific domains. There is a lack of research on key technologies such as data persistence, querying, computation, and indexing in time series stores. Additionally, these reviews appeared earlier and lacked research on modern time series database technologies. We conduct a comprehensive investigation and research analysis of both academic research on time series data storage and industrial time series databases. We take a deep dive into four key technologies in time series databases: 1) time series index optimization techniques; 2) in-memory data organization techniques; 3) high-throughput data ingestion and low-latency data query techniques; 4) cost-effective storage techniques for massive historical data. We also analyze and summarize existing TSDB benchmarks. Finally, we present future development directions for the key technologies in time series databases.
-
一直以来,高性能计算机(high performance computer, HPC)都是解决科学研究各领域实际问题的重要工具,依靠HPC的强大计算能力,能使很多求解空间极大的科研问题在现实可见的时间内完成解算.
最近20年,科学研究已经从计算科学时代进入数据科学范式时代,科学家需要从海量的数据中去探索科学规律和突破科学发展瓶颈,这就意味着传统的用高密度计算去模拟复杂现象进行科学研究的方法需要创新发展,用高性能计算与人工智能相融合的新方法(HPC+AI)去解决实际问题,正逐渐成为一种行之有效的科研方法,例如2020年的戈登贝尔高性能计算应用奖就颁发给基于深度学习实现1亿原子分子动力学的应用[1].
人工智能应用的开发和运行,往往依赖于人工智能编程框架,如TensorFlow[2],Pytorch[3]等,这些框架在本质上均是数据流计算系统,它们将神经网络模型组织成数据流图,并利用图节点融合、图剪枝、常量传播等技术进行图优化,然后再通过运行系统将图节点调度到实际的计算资源上执行. 换言之,数据流计算系统是支撑人工智能应用的重要基础软件,但是,要在国产高性能计算机上支持高效的数据流系统,则面临着严峻的挑战.
从底层硬件的角度来说,国产异构众核处理器具有独特的复杂结构,新一代国产异构处理器sw26010pro[4-5]具有多级计算资源、多层次存储和多级互联网络结构,在体系架构上与传统的多核CPU、众核GPU以及专用的人工智能处理器相比有着本质的区别.
要在sw26010pro上高效执行数据流系统,需重点解决2个问题:
1)如何充分利用sw26010pro的众核计算资源. 计算核心阵列是国产异构众核处理器的性能来源,具有众多的精简核心和强大算力,但也存在着访存效率低、片上缓存小和管理复杂等实际问题. 为实现数据流图的高效执行,就需要实现自适应的众核阵列加速方法,能够自动加速数据流图中的关键节点,充分利用众核计算资源.
2)如何设计高效的两级并行策略,充分利用国产异构众核处理器的全片计算资源.sw26010pro采用全片多核组集成的体系结构,每个核组都是同构的众核阵列,多核组之间可以共享全局存储,数据流图中的节点执行以单核组为基本单元. 要充分结合硬件结构特性,实现两级并行策略,通过相应的图优化和调度方法,确保多核组能够并行执行数据流图,提升系统性能.
对于上层用户而言,传统高性能计算机的软件环境也很难满足HPC+AI领域应用的动态化和智能化需求,并且,用户更希望将重心放在上层算法设计上,而非底层体系结构相关的优化上.
为此,本文提出了一种面向国产异构众核处理器的数据流计算系统swFLOWpro,支持使用TensorFlow接口构建数据流计算和深度学习典型模型,并实现了对用户透明的众核并行加速,可以支持数据流程序的高效开发,在运行时充分利用国产异构众核处理器的硬件能力.
本文的主要贡献有4点:
1)在国产异构众核处理器上构建了功能完备的数据流计算系统swFLOWpro,能够支持以深度学习为代表的数据流应用的开发和运行;
2)设计并实现了一种专门针对国产异构众核处理器的核心计算加速引擎swHMAE,将之与数据流计算系统松耦合,实现自动化的众核并行加速及算子分析、调试功能;
3)针对sw26010pro的多核组共享内存结构,设计了一种面向异构融合体系结构的两级并行策略,结合图分裂技术,能充分利用全片核组的计算资源;
4)基于swFLOWpro进行Alexnet,ResNet,VGG,Inception等典型CNN神经网络模型训练测试,实验结果表明本文设计的数据流计算系统能够获得很好的异构众核并行加速效果.
1. 相关工作
1.1 数据流计算
传统的冯•诺依曼计算机以控制流为执行模型,而数据流计算则采用了不同的思路,将程序组织成有向图,每个图节点表示一个算子,边则代表节点之间的依赖关系,数据在边上流动,当一个节点的所有输入数据均已就绪时,该节点就会被启动. 数据流计算由程序本身的数据依赖关系来激活计算,更有利于充分发挥其天然的可并行性.
20世纪90年代,麻省理工大学提出一种基于数据流思想的处理器设计方案,该方案没有共享存储和寄存器的设计,数据直接在计算部件之间流动. 当一条指令所有操作数均已就绪时,即可以进入执行状态. 这种体系架构能够充分挖掘程序的指令级可并行性,但也存在着运行开销大、并行粒度过小等实际问题,与传统计算机系统的天渊之别也限制了其进一步发展.
相关研究[6]还提出了一种硬件集成数据流芯片和冯•诺依曼架构芯片的体系结构设计,程序在编译系统的支持下,可以在运行过程中动态调度到不同的芯片架构上去. 这种处理器架构设计比较新颖,但对编译和硬件实现的环境要求比较高.
纯硬件的数据流计算系统面临着诸多问题,最本质的问题在于其与传统计算机软硬件生态无法兼容,发展严重受限. 于是,数据流计算机逐渐向与冯•诺依曼架构融合的方向发展,出现了“类数据流”计算机,这一类计算机融合了控制流和数据流的思想,将程序组织成一系列的宏指令或者代码块,每个宏指令或代码块内部采用数据流执行模式,而在宏指令和代码块之间依然采用传统的控制流思想进行组织管理,该类计算机包括TRIPS[7],T3,EVX等. 类数据流计算机将数据流的思想用于最底层的指令层面,在程序层面则保持着和传统架构相同的程序逻辑,例如EDGE[8]架构执行模型,就是将程序编译成由超块组成的控制流图,将超块内部的代码编译成数据流指令,数据直接在计算部件之间流动而不通过寄存器,但EDGE架构必须运行在专门的类数据流处理器架构上,通用性较差. 目前,最常见的数据流系统是在传统冯•诺依曼架构上实现的软件数据流系统.
Codelet[9-10]执行模型由特拉华大学提出,它是一种针对E级计算机的需求而进行设计的细粒度并行、事件驱动的程序执行模型. Codelet模型从数据流执行模型中得到启发,结合传统的冯•诺依曼体系架构,形成了一种在通用计算机上运行的数据流程序执行系统.
TensorFlow是一款具有数据流思想的软件计算系统,该系统运行于通用处理器架构上,并对众核GPU和人工智能专用芯片TPU有后端支持.TensorFlow是人工智能领域非常热门的编程框架,它将人工智能的算法模型组织成数据流图,并通过运行支持数据流图的高效映射和资源分配.TensorFlow给用户提供了丰富的API接口来构建数据流计算,对深度学习的支持也比较完善,不过缺乏对于国产异构众核架构的后端支持.
1.2 在国产异构众核处理器上的数据流计算系统
在国产异构众核处理器上,关于数据流计算系统的研究也一直在进行中.
SunwayFlow[11]是基于神威太湖之光高性能计算机系统开发的数据流计算系统,该系统将Codelet执行模型移植到国产处理器上,并使用高性能共轭梯度基准测试(HPCG)作为测试数据,获得10.32倍的加速效果. 但SunwayFlow支持的Codelet模型适用范围有限,特别是对深度学习的支持严重不足.
swCaffe[12-13]是面向国产异构众核处理器的深度学习编程框架,它在底层通过swDNN库支持众核加速,针对VGG-16有4倍的加速效果. 但是Caffe框架[14]的编程接口已逐渐被淘汰,而swCaffe要实现众核加速,对模型的参数也有严格的限制,已无法适应数据流计算和深度学习应用的实际需求.
swFLOW[15]是2021年推出的针对国产异构众核处理器的数据流计算系统,该系统重构了TensorFlow框架,支持在sw26010处理器上执行数据流计算,针对典型神经网络模型有10.42倍的加速. 不过,swFLOW在功能上只支持TensorFlow的C++接口,在优化设计上重点考虑面向大规模计算资源的分布式训练,缺乏针对单进程的深度优化,也没有针对全片多核组运行模式的优化支持,实际使用效果有待增强.
针对上述多款数据流计算系统软件的缺陷,本文设计并实现了面向国产异构众核处理器sw26010pro的新一代数据流计算系统swFLOWpro.该系统在编程接口支持上复用了TensorFlow的前端模块,可以完全兼容TensorFlow的Python和C++编程接口,提升系统易用性,在后端则通过独立的核心计算加速引擎模块来提供针对数据流图节点的执行加速,除此之外,还针对sw26010pro的多核组共享内存设计,开发了一种面向异构融合的两级并行方法,从而提升全片计算资源的应用效率.
1.3 面向数据流计算的相关研究
Megatron-LM[16]主要讨论如何在大规模GPU集群上通过tensor/pipline/data等多种并行模式高效实现大模型的训练,通过并行模式的混合能够提升10%的数据吞吐量,在3072个GPU上训练1万亿参数模型,单GPU峰值效率达到52%.
Gspmd[17]提出一种基于编译器的自动化机器学习并行系统,可以在单节点代码上通过添加编译指示实现自动化并行代码生成,在2048块TPUv3上达到了50%~62%的计算利用率.
DAPPL[18]面向大模型提出了结合数据并行和流水线并行方法的并行训练框架,主要解决的问题是针对模型结构和硬件配置决策最优并行策略,如何调度数据流计算的不同流水线阶段.
Alpa[19]针对分布式深度学习训练提出了算子内和算子间并行策略,通过系统化的方式将分布式并行策略的优化空间结构化,并在这个优化空间中寻找最优策略并实现自动化.Alpa以计算图为输入,输出并行方案,主要考虑如何划分子图和计算任务调度.
目前,面向数据流计算的相关研究大多是针对大模型和大规模并行系统,专注于如何切割数据流图并将其调度到各计算节点上,本文则主要针对sw26010pro的异构众核结构和普通深度学习模型,专注于单处理器内部的计算流程,通过算子内和算子间的两级并行策略,高效利用单处理器计算能力. 在后续工作中,swFLOWpro会在寻找最优并行策略以及调度模型的优化上加强研究.
2. swFLOWpro:新一代数据流计算系统
本节主要介绍国产异构众核处理器sw26010pro的结构特点,以及swFLOWpro的整体架构和工作流程.
2.1 sw26010pro架构
sw26010pro是一款国产异构众核处理器,它包含6个核组(core group , CG),核组之间通过片上环网互连,每个核组包含2种异构核心,一种是管理核心(management processing element,MPE),另一种是计算核心(computing processing elements, CPE),1个MPE和1个8×8的CPE组成1个异构计算阵列. 一般而言,MPE主要负责计算任务、全局内存和运算核心的管理;CPE负责计算任务的执行,每个CPE通过一个软件管理的片上便签存储器(LDM)来提升访存效率. sw26010pro结构如图1所示.
sw26010pro采用SW64自主指令集设计. 其中, MPE具有32 KB L1指令缓存、32 KB L1数据高速缓存和512 KB L2高速缓存;CPE支持512 b的SIMD运算,支持双精度、单精度和半精度浮点及整数等多种数据类型的向量运算,每个CPE具有独立的指令缓存和片上LDM存储,其中LDM可以配置为L1数据缓存,也可以配置为用户管理的局存空间,支持通过DMA方式实现LDM和全局内存之间的数据传输;支持通过RMA方式实现不同CPE之间的LDM存储传输.
sw26010pro全处理器包含6个同构的核组,6核组之间可以共享全局内存. 通常情况下,1个进程运行在1个核组上,多个核组之间通过MPI消息进行通信,但这样会导致单进程可用的内存空间和计算能力都较小,频繁的MPI通信也会造成性能损失. 事实上,通过多核组的共享全局内存,可以结合多线程管理和核组资源分配,实现全片视角的统一编程,这样能大幅度提升单进程的可用内存空间和计算能力,减少进程间通信造成的性能损失.
与常规的处理器设计不同,sw26010pro将更多的硬件逻辑用于计算,从而最大程度地提升计算密度,精简的CPE核心设计导致了其计算能力很强,但访存能力较弱. sw26010pro提供了用户可以显式管理的LDM存储来弥补访存与计算能力不匹配的问题,从而支持用户充分挖掘异构众核的计算能力. 不过,这种设计模式就意味着程序的高效运行需要更加复杂的优化策略和更加全面的算法改造.
对于数据流计算和深度学习领域的编程用户来说,他们更关注的是数据流图的结构、模型的构造以及训练模型的超参数调整等上层算法设计,而非底层硬件细节和体系结构相关优化技术.
为此,swFLOWpro的主要设计目标就是构建国产异构众核处理器与用户之间的桥梁,提供可移植性强、功能丰富的编程接口,并将底层硬件细节对用户透明,实现自动化的众核并行加速.
2.2 swFLOWpro结构设计
swFLOWpro数据流计算系统的整体架构图如图2所示.swFLOWpro系统可以划分为2个子模块:前端模块和后端模块. 中间层由C-API桥接.
前端模块是一个支持多语言的编程环境,它提供基于数据流图的编程模型,方便用户使用TensorFlow 的Python和C++编程接口构造各种复杂的计算图,从而实现各种形态的模型搭建.
C-API是桥接前端模块和后端模块的中间层次,主要是通过SWIG(simplified wrapper and interface generator)机制支持前端多语言编程环境与C++实现的后端模块之间的通道.
为保证系统的易用性和提升深度学习程序的可移植性,swFLOWpro框架的前端模块和C-API复用了TensorFlow框架的相应模块,主要是为了保持对TensorFlow编程的兼容性.
后端模块则是体系结构相关的运行模块,也是swFLOWpro针对sw26010pro架构特点重点开发的模块.swFLOWpro的后端模块主要包括数据流图优化、运行时系统、算子(OP)实现层等子模块. 其中,数据流图优化模块支持面向异构众核处理器的混合精度训练优化和节点融合优化,混合精度训练优化在数据流图中插入数据类型转化节点,将单精度运算转换为效率更高、精度更低的半精度运算,而在更新参数节点等对精度要求更高的节点之前,再将半精度转化为单精度,从而支持混合精度训练;图节点融合优化则将多个图节点融合,形成更大的计算单元,减少内存管理开销,提升运行效率. 运行时系统主要负责计算图节点的管理、调度、执行以及内存分配,根据图中依赖关系依次执行各个节点. OP实现层则是针对sw26010pro的存储层次和结构特点,将OP的定义和执行解耦,通过独立的异构众核加速引擎(swHMAE)实现对关键性能OP的众核加速,这一部分将在2.3节中详细介绍.
2.3 异构众核加速引擎(swHMAE)
swHMAE是一个独立于swFLOWpro系统之外的独立模块,其设计目的是为数据流计算系统提供一个松耦合的、体系结构相关深度优化的核心计算加速框架. 框架整体结构如图3所示.
swHMAE提供了一系列性能关键计算的调用接口,这些接口在swFLOWpro的算子实现层进行调用,而其真正实现则集成于一个独立的动态库中.
swHMAE提供的这些接口是完全虚拟化的,仅用来描述要完成哪种运算和需要哪些参数,swHMAE可以向上支持不同的人工智能编程框架或数据流系统的图节点实现模块,向下则可以调用多种众核加速算法库,也可以集成用户自定义的众核算法,具有很好的可扩展性.
在swHMAE中,针对不同的计算类型,主要完成2方面的工作:1)收集核心计算的参数. 2)根据参数类型、参数特性及输入规模,判断是否适合使用众核加速,如不适合,则该API返回失败,swFLOWpro将调用默认的实现算法;否则,swHMAE将根据不同的参数类型和规模自适应地选择最优的异构众核加速算法.
swHMAE支持的核心计算类型涵盖了数据流计算常见的计算类型,核心计算类型既有深度学习领域的常见计算,例如卷积、矩阵乘、激活、归一化等,这类计算的众核加速主要是通过swDNN,swBLAS,Sw_OPs等第三方库来支持,又有一些更通用的数据流计算节点类型,如批量数据的基础运算、数据的Padding,tile,slice等访存操作,以及其他一些定制的计算类型.
swHMAE的工作原理算法如算法1所示:
算法1. swHMAE工作原理算法.
输入:计算类型OP-type, 张量t1
,t 2,…,数据类型 data-type,常量参数params;输出:计算结果张量t-results.
① if notSuitforMC(OP-type,params,t1,t2,…)
② return false;/* 如果该OP不适合众核加速返 回false,执行swFLOWpro的默认计算模式 */
③ end if
④ timing_or_debug_this_op_start();
⑤ if OP-type ∈ {SW_Conv,SW_Activate, SW_Pooling}
⑥ t-results = swDNN(OP-type,params,t1,t2,…);
⑦ else if OP-type ∈ {SW_Matmul}
⑧ t-results = swBLAS(OP-type,params, t1,t2,…);
⑨ else
t-results=MC_accelete_op(OP-type,params, t1,t2,…);
⑩ end if
⑪ timing_or_debug_this_op_end();
⑫ return true.
swHMAE是面向国产异构众核处理器的数据流计算后端,作为一个独立模块,它将关键计算的众核加速与数据流系统的整体框架解耦,既能够高效利用swDNN, swBLAS,sw_OPs等众核计算库,由于本身也集成了一系列众核优化算子,也能够对更多的核心计算进行众核加速.
swHMAE针对非计算密集类运算实现了众核加速算法,其主要思想是通过数据分割将运算任务分配到各CPE上执行,通过DMA数据传输机制将具有局部性的数据显式地搬运到CPE的片上内存LDM中,并通过2个数据传输缓冲的动态切换,实现数据传输与数据计算的并行操作,其算法思想如图4所示.
除此之外,swHMAE还可以通过多种方式对关键计算进行调试、错误定位和性能分析,进一步提升易用性.
swHMAE的松耦合和模块化设计使得用户可以更加方便地集成新的众核计算到swFLOWpro系统中去. 事实上,swHMAE还可以支持其他的数据流计算系统,其仅需要在原始系统中做极少量的修改.
3. 面向异构融合的两级并行策略
在异构融合的众核处理器上执行数据流图的基本流程为:MPE负责数据流图的生成、优化和调度管理;在执行过程中,将已满足执行需求的图节点分配到众核阵列上执行.
有2种任务分配方法可以考虑:1)将每个节点调度到1个CPE上,CPE阵列协同完成整个数据流图的执行过程;2)将CPE阵列视为一个整体部件,所有计算核心共同完成数据流图中的一个节点.
第1种任务分配方法与异构融合众核架构的适应性并不好,其主要原因有3点:1)单CPE的访存能力有限,其LDM的容量大小也很难承载一个完整的图节点计算逻辑,比如卷积、矩阵乘等常用算子,在单CPE上执行效率较差;2)数据流图的可并行性有限,考虑某些具有强相关性的数据流图,每个节点都依赖于上一个节点的计算结果,则程序在这种模式下执行的效率就会很差,因为大部分时间内CPE可能因为依赖另一个CPE的计算结果而处于等待状态;3)负载均衡问题,由于每个数据流图节点运算量相差较大,保证各计算核心的负载均衡也是个难以解决的问题.
本文主要采用第2种任务分配方法,也就是将CPE阵列视为整体部件,所有CPE协同完成一个图节点的执行过程,这样每个CPE的计算任务量都在可以接受的范围之内,而在每个图节点内部,主要通过数据分割的方式将输入数据映射到各个CPE上,这样能保证LDM空间够用和保证各计算节点的负载均衡性. 并且,由于并行发生在图节点内部,整体效率不会受限于数据流图本身的可并行性.
图5是在sw26010pro的单核组上运行一个数据流图的示例.
输入数据的后继图节点是Reshape,该节点是为了改变输入形状,属于功能类算子,所以将其调度到MPE上执行即可;其后的Matmul,Biasadd,Softmax都是计算密集的图节点,需要调度到CPE阵列上进行众核并行计算,例如,CPE在执行Matmul图节点的时候,首先将矩阵进行分块,每个CPE执行子矩阵乘法运算,再通过CPE阵列内部的RMA操作进行全局通信,获得原始矩阵的乘法运算结果.
sw26010pro异构众核芯片采用多核组设计,处理器内部包含6个同构的核组,每个核组都有一个MPE和一个8×8的CPE阵列. 因此,要在6核组结构上实现更高层次的并行.
在单核组内部,我们将1个图节点分配到1个MPE或者1个CPE阵列上执行,实现了低层次的图节点内并行;在基于全片视角的多核组上,利用6个等价队列分别维护由上层图计算过程产生的计算任务;在运行核组选择过程中采用Round-Robin的轮询调度策略;在计算任务选择中采用先入先出(FIFO)方法,进而支持高层次的图节点间并行. 这就是本节提出的两级并行策略,该策略能够充分适应sw26010pro的异构融合架构.
值得注意的是,图节点间的并行要求图节点之间没有数据依赖关系,但实际上一般单输入的数据流计算图可并行性并不高,如果将不同的图节点调度到不同核组上,由于图节点之间的数据依赖关系,会导致部分核组处于空闲状态,需要等待其他核组的计算结果才能开始计算.
为此,本文设计了一种图分裂优化方法,首先将输入数据进行平均分割,分割之后的每个输入都进行相同的数据流图执行流程,在输出结果时再进行归并,从而生成并行性更好的数据流计算图.
以图5的数据流图为例,将split值设置为2,经过图分裂之后的数据流图如图6所示.
经过图分裂之后,数据并行输入到不同的数据流子图中,每个子图都是原数据流图的一个复制,各个子图之间没有强相关性,从而具有很好的可并行性,可以映射到不同的处理器分区上执行.
图分裂是一种与体系结构无关的图变换技术,分裂值split可以调整,以适应不同的硬件体系结构. 如果众核处理器集成更多的核组数,只需要提升分裂值,无需改变整体算法就能充分利用硬件计算资源.
在具体实现上,本文采用多线程机制来管理图节点的调度,根据核组数来确定线程个数. 在sw26010pro上会启动6个线程来执行数据流图,每个线程绑定在1个核组上运行,这样能保证各线程不存在资源冲突问题.
调度器将所有图节点组织成任务池,并记录每个节点的前继节点. 在执行过程中,一个图节点可能处于不可用、可用、执行中、完成中这4种状态的一种. 每种状态对应一个任务池.
初始情况下,将没有前继节点的图节点状态设置为“待命”,其余节点状态均设置为“不可用”. 线程函数从任务池里通过抢占方式获取一个图节点任务,如果该图节点的已处于可用状态(所有前继节点均已完成),则执行该节点,并将该节点状态设置为“执行中”,完成后则设置状态为“完成”. 值得注意的是,线程选择下一个执行节点时,优先从该节点的后继节点中选取,如果后继节点不可用,则从该节点前继节点的其他后继节点中选择. 这种搜索方法可以使得单个相对独立的数据流子图在一个线程内部完成.
图节点状态变换关系如图7所示.
4. 实 验
本文选择6种典型神经网络模型作为数据流计算的输入,通过TensorFlow编程接口编写数据流程序,实现这些模型的训练过程,这些模型及其变种也是HPC+AI领域应用经常使用的模型. 具体模型信息如表1所示.
表 1 6种典型神经网络模型Table 1. Six Typical Neural Network Models测试硬件平台为sw26010pro处理器,其包含6个核组,6个MPE和384个CPE,全片主存空间大小为96 GB,每个CPE的片上高速缓存LDM大小为256 KB.
软件环境为swFLOWpro数据流计算系统、swHMAE核心计算加速引擎,以及swPython编程环境.
本文选择众核加速比ManyAccRatio作为主要的性能评价指标,其定义为:
ManyAccRatio=MPE_timeCPE_time×100%, 其中MPE_time表示在MPE主核上的运行时间,CPE_time表示在单核组阵列上的运行时间. 由于sw26010pro结构的特殊性,其与GPU,TPU等人工智能专用芯片的性能对比意义不大,通过众核加速比可以体现SwFlowpro在sw26010pro独特的异构融合结构上的适配性和优化效果.
4.1 swHMAE针对典型模型核心计算的众核加速效果
本文使用swFLOWpro构建了6种典型模型,并统计了模型中所有核心计算(数据流图节点)类型,选择7种典型核心计算类型,通过swHMAE引擎进行众核加速. 具体统计信息如表2所示.其中Conv2D, Conv2DBackpropFilter, Conv2DBackpropInput都是卷积类计算,Matmul是矩阵乘计算,Relu是激活类计算,Poolmax是池化类计算,ApplyGradientDescent是训练更新参数计算.
表 2 典型核心计算Table 2. Typical Core Computing核心计算类型 分类 Conv2D SW_Conv Conv2DBackpropFilter SW_Conv Conv2DBackpropInput SW_Conv Matmul SW_Matmul Relu SW_Activate Poolmax SW_Pooling ApplyGradientDescent SW_OPs 在表1的6种典型模型中,统计了典型核心计算在sw26010pro的单核组CPE上的运行时间,通过对比swFLOWpro未经众核优化的MPE运行时间,并获得众核加速比.详细测试数据如表3所示.通过计算,获得的各类型的典型核心计算众核加速比如图8所示.
表 3 典型模型中的典型核心计算测试时间Table 3. Test Time of Typical Core Computing in Typical Modelsms 模型 Conv2D Conv2DBackpropFilter Conv2DBackpropInput Matmul Relu Poolmax ApplyGradientDescent Alexnet-MPE 153470 141700 51100 20260 352 340 528 Alexnet-CPE 611 1320 238 548 11 23 21 VGG16-MPE 1629210 1114340 718380 37430 5260 2120 1080 VGG16-CPE 3140 1910 2310 1120 119 172 50 ResNet50-MPE 250690 285090 152940 181 2170 373 250 ResNet50-CPE 652 1690 1690 9 56 24 14 ResNet101-MPE 578400 552900 303010 182 3410 372 449 ResNet101-CPE 1060 2200 2220 9 90 24 25 Inception3-MPE 489790 443940 216850 86 2140 3730 215 Inception3-CPE 1160 1480 1540 3 61 278 16 Inception4-MPE 1019110 1010510 472480 21 3610 6370 413 Inception4-CPE 2670 2960 3660 0.8 101 503 26 卷积类运算是实验的6种典型模型的关键,也是swHMAE实现众核加速的重点运算.swHMAE会根据输入规模和相关参数,自适应选择swDNN库中最优的算法实现. 由图8实验结果可以看出,Conv2D的众核加速比达250~545,Conv2DBackpropFilter的众核加速比达107~583,Conv2DBackpropInput的众核加速比达90~310,加速效果良好.
其他核心计算类型的众核加速比测试数据如图9所示.
针对矩阵乘类核心计算,swHMAE从swBLAS库中自适应选择众核算法. 测试表明,矩阵乘核心计算的众核加速比仅有26.1~38.7,由表3可以看出,本文选择的典型模型都是卷积类神经网络,矩阵乘的计算量很小,不能充分发挥CPE从核阵列的全部计算能力. 除此之外,swBLAS库中矩阵是按列优先模式存储,在接入模型时还需要先进行矩阵转置. 所以,矩阵乘的实际众核加速比效果远低于卷积类算子,在后续工作中可以针对矩阵转置进行优化.
针对Relu激活类运算,swHMAE通过swDNN库进行加速,众核加速比达到26.1~38.7.
除了计算密集类运算之外,模型中也会用到一些其他算子,这类算子虽然计算量小,但如果不进行众核优化,则会成为性能瓶颈. 如本文实验选择的更新参数操作(ApplyGradientDescent),是模型训练中常见的算子类型,但缺乏专属的算法库支持. 本文选择在swHMAE中直接集成其众核优化算法,实验表明众核加速比达13.9~25.2.
测试结果表明,在sw26010pro上,卷积类运算的众核加速比要远高于其他运算类型,这主要是因为国产异构众核的架构设计对于卷积这类计算密集类运算的适应性更好.
4.2 swFLOWpro+swHMAE针对典型模型训练的众核加速效果
本文使用swFLOWpro+swHMAE运行6种典型模型的训练过程,单步训练batch大小统一设置为32.
实验分别测试在sw26010pro的单MPE和单CPE阵列上的单步训练时间,并计算众核加速比. 测试数据如表4所示.
表 4 典型模型的单步训练测试数据Table 4. Single Step Training Test Data of Typical Models典型模型 MPE运行时间/s CPE运行时间/s 众核加速比 Alexnet 379.8 3.1 123 VGG16 3525.5 10.2 346 ResNet50 973.6 8.2 119 ResNet101 1876.6 12.1 155 Inception3 1373.1 11.9 115 Inception4 2996.9 20.1 149 由图10可见,VGG16模型的众核加速比最高,达到346,其余的模型加速比相差不大,在115~155之间.
模型的性能与模型中各类型核心计算的性能紧密相关,由4.1节测试结果可知,在sw26010pro上,卷积类运算的众核加速比要远高于其他运算,所以卷积类运算占比较高的模型,在sw26010pro上的整体加速比也更高.
本文统计了在6种典型模型中,卷积类和非卷积类核心计算的运行时间占比,如表5所示. 这6种典型模型都属于卷积神经网络,它们的卷积类运算占比为82.5%~97.4%.
表 5 典型模型的卷积类和非卷积类核心运算占比Table 5. Core Computing Proportion of Convolutional and Non-Convolutional of Typical Models% 典型模型 Conv2D Conv2DBackpropFilter Conv2DBackpropInput 非卷积类运算 Alexnet 11.5 27.2 54.8 6.5 VGG16 11.1 37.2 49.1 2.6 ResNet50 9.2 25.3 48 17.5 ResNet101 10.1 23.7 51.3 14.9 Inception3 11.8 31.6 40.5 16.1 Inception4 11.6 29.7 45.2 13.5 表5中,VGG16的卷积类运算占比最高,达到了97.4%(11.1%+37.2%+49.1%),所以这个模型的众核加速比也最高,Alexnet的卷积类运算虽然占比高达93.5%(11.5%+27.2%+54.8%),但由于其卷积类运算的计算量较小,不能充分发挥sw26010pro的计算能力,所以整体众核加速比只有123.
实验表明,针对典型模型的训练过程,swFLOWpro+swHMAE比原始运行模型,特别是卷积类计算占比较高的模型(如实验中的VGG16)有显著的众核加速效果.
4.3 两级并行优化效果
我们将sw26010pro的单处理器(包含6个核组)作为一个执行单元,测试6种典型模型经过面向全片的两级并行优化之后的加速效果.
首先,测试不使用图分裂技术的6个核组并行加速效果,在这种模式下,6个核组的利用效率受限于不同模型构建出的数据流图本身的可并行性,测试数据如图11所示.
加速比最高的是Inception4模型,达1.49;最低的是Alexnet模型,达1.19.这是因为,Inception模型本身的数据流图具有不错的可并行性,而模型结构简单的Alexnet模型可并行性并不好.
整体而言,在不使用图分裂的情况下,6核组的加速比较低,这是因为计算图的核心计算节点之间存在依赖关系,导致高层次的节点间并行不能同时进行计算,限制了并行效果,这也是本文提出图分裂技术的主要原因.
然后,使用图分裂技术进行优化,将split值分别设为2,4,6,并测试典型模型在全片6核组上运行对比单核组(split = 1)运行的加速比,测试数据如图12所示.
图12中加速效果最好的是ResNet50(split = 6),加速比达4.96,并行效率达到了82.6%. 通过使用图分裂技术,选择合适的参数split,典型模型全片加速比能达到1.78~4.96.
图分裂技术结合面向异构融合的两级并行策略,在sw26010pro的多核组异构众核结构上取得了很好的并行效果,测试表明,图分裂技术针对典型模型的性能提升效果最高达到246%(ResNet50),最低也能达到50%(AlexNet).
值得一提的是,从实验数据中也可以看出2个问题:1)sw26010pro的众核结构对模型和核心计算的计算量要求较高,一些轻量级的模型无法充分利用众核资源,所以Alexnet的单核组和6核组加速比都不理想. 2)图分裂结束也会带来图节点数量的大幅度增长,会增大内存需求,对于Inception这种本身就具有一定并行性的计算图,会出现图节点膨胀的现象,进而增大节点调度和分配的开销,所以其6核组并行加速比只有2.54~2.88,这也是图分裂技术目前存在的缺陷.
5. 结 论
本文提出了一种面向新一代国产异构众核处理器的数据流计算系统swFLOWpro,该系统通过核心计算加速引擎swHMAE支持在国产异构众核处理器上的并行加速,并提出面向异构融合的两级并行策略,支持面向国产异构众核处理器全芯片视角的调度和并行方法. 实验表明,swHMAE针对卷积类核心计算,众核加速比达90~545,针对其他核心计算,众核加速比达13.9~38.7;swFLOWpro+swHMAE支持典型模型在sw26010pro上的高效执行,VGG16模型众核加速比可达346;通过面向异构融合的数据流调度策略,全片ResNet50加速比达4.96倍,6核组并行效率达到82.6%.
未来的工作主要包括3个方面:1)继续拓展swHMAE支持的核心计算类型;2)优化面向全片多核组的两级并行策略,优化图分裂算法,探索更高效的数据流调度算法,提升图节点间并行效率;3)完善系统,支持更多种类的神经网络模型高效运行,并引入新的优化算法.
作者贡献声明:肖谦提出了技术方案,实现系统和撰写论文;赵美佳和李名凡负责核心计算众核优化实现和论文完善;沈莉和陈俊仕负责数据流调度算法实现和优化;周文浩和王飞负责部分实验代码编写;安虹提出指导意见并修改论文.
-
表 1 气象监测数据
Table 1 Weather Monitoring Data
指标 标签集 测量字段 时间戳 weather location=southeast1, id=1 temp=9.6, humidity=51 1672531200 weather location=west2, id=2 temp=7.6, humidity=20 1672531200 weather location=southeast2, id=1 temp=9.6, humidity=53 1672531200 weather location=southeast1, id=1 temp=9.6, humidity=52 1672531260 weather location=west2, id=2 temp=7.5, humidity=22 1672531260 表 2 时序数据库面临的挑战、关键技术和描述
Table 2 Challenges, Key Technologies and Descriptions of Time Series Databases
挑战 关键技术类别 描述 时间序列元数据管理 时间序列索引优化技术 通过优化时间序列索引,解决时序数据高基数问题. 特殊工作负载 内存数据组织技术 通过新颖的内存数据组织技术,在有限的内存资源中缓存更多的时序数据,高效地处理热数据. 高吞吐量数据摄取技术 面向写入密集型工作负载,优化时序数据存储方法,
减小时序数据存储的写放大问题,提高写入吞吐量.低延迟数据查询技术 通过过滤器、索引等技术,减小复杂查询中的读放大问题,降低数据查询延迟. 海量历史数据存储 海量历史数据低成本存储技术 通过数据生命周期管理、数据压缩和分级存储技术,减小海量历史数据的存储成本. 表 3 时序数据库的存储架构分类与比较
Table 3 Classification and Comparison of Storage Architectures for Time Series Databases
表 4 时序数据库关键技术总览
Table 4 Overview of Key Technologies of Time Series Databases
技术类别 关键技术 代表性工作 主要优点 主要缺点 时间序列索引优化技术 面向索引模型和架构的优化技术 InfluxDB TSI[55]
TimescaleDB[12]
TDengine[56]
QuestDB[57]
DolphinDB[24]性能高 复杂度高 面向基数分析的索引优化技术 VictoriaMetrics[58]
TimescaleDB[12]定位准确 需手动执行 内存数据组织技术 基于内存压缩的数据组织技术 ByteSeries[59]
DolphinDB[24]压缩比高 复杂度高,需要数据解压缩 对齐时间序列 IoTDB[54] 复杂度低 内存占用减小有限 高吞吐量数据摄取和
低延迟数据查询技术LSM-tree:减小写放大 IoTDB 分离策略
Cassandra TWCS[60]提高写入性能 影响查询性能 LSM-tree:减小读放大 BloomFilter[42]
聚合计算索引提高查询性能 影响写入性能 海量历史数据
低成本存储技术数据生命周期管理 InfluxDB[10]
IoTDB[54]
TDengine[56]- - 数据压缩 IoTDB[54]
InfluxDB[10]
VictoriaMetrics[58]- - 分级存储 TDengine[56] - - 注:“-”表示该技术没有显著的优缺点对比. 表 5 时序数据库评测基准比较
Table 5 Comparison of Benchmark for Time Series Databases
评测基准 模拟场景/数据 评价指标 主要优点 主要缺点 TSBS[110] DevOps(CPU、内存等监控数据)
IoT(一组卡车的数据流)写入性能
查询性能模拟数据考虑了真实世界存在的影响因素,
如乱序数据、缺失数据和空数据.需要手动进行数据正确性验证. iot-benchmark[108] 工业(模拟多种数据分布,
包括具有可控的高斯噪声)写入性能
查询性能
系统资源占用可以模拟具有噪声的数据,
以及乱序数据,支持数据正确性验证,
支持生成测试报告及可视化.模拟的数据不能保证
真实世界的数据分布.TPCx-IoT[115] 工业(发电站传感器数据) 摄取吞吐量
性价比
可用性考虑了基准评测的现实意义,
即经济性和可用性.缺少乱序数据场景. TS-Benchmark[118] 工业(风力涡轮机监控数据) 写入性能
查询性能基于DCGAN[119]模型,通过对真实
种子数据训练,生成高质量的测试数据.缺少乱序数据场景. influxdb-comparisons[117] DevOps(CPU、网络等监控数据)
IoT(天气、智慧家居等数据)写入性能
查询性能模拟的数据类别多. 缺少乱序数据场景. -
[1] 黄向东,郑亮帆,邱明明,等. 支持时序数据聚合函数的索引[J]. 清华大学学报:自然科学版,2016,56(3):229−236,245 Huang Xiangdong, Zheng Liangfan, Qiu Mingming, et al. Time-series data aggregation index[J]. Journal of Tsinghua University: Science and Technology, 2016, 56(3): 229−236, 245 (in Chinese)
[2] Oetiker T. RRD tool: Round-robin database tool [EB/OL]. [2023-04-10]. http://oss.oetiker.ch/rrdtool/
[3] Gelbmann M. Time series DBMS are the database category with the fastest increase in popularity[EB/OL]. [2023-04-10].https://db-engines.com/de/blog_post/62
[4] solid IT. DB-Engines ranking of time series DBMS[EB/OL]. [2023-04-10].https://db-engines.com/en/ranking/time+series+dbms
[5] Jensen S K, Pedersen T B, Thomsen C. Time series management systems: A survey[J]. IEEE Transactions on Knowledge and Data Engineering, 2017, 29(11): 2581−2600 doi: 10.1109/TKDE.2017.2740932
[6] Huang Jian, Badam A, Chandra R, et al. WearDrive: Fast and energy-efficient storage for wearables[C] //Proc of the 2015 USENIX Annual Technical Conf. Berkeley, CA: USENIX Association, 2015: 613-625
[7] Pelkonen T, Franklin S, Teller J, et al. Gorilla: A fast, scalable, in-memory time series database[J]. Proceedings of the VLDB Endowment, 2015, 8(12): 1816−1827 doi: 10.14778/2824032.2824078
[8] Khalefa M E, Fischer U, Pedersen T B, et al. Model-based integration of past & future in TimeTravel[J]. Proceedings of the VLDB Endowment, 2012, 5(12): 1974−1977 doi: 10.14778/2367502.2367551
[9] Bader A, Kopp O, Falkenthal M. Survey and comparison of open source time series databases[C] //Proc of the 17th Conf on Database Systems for Business, Technology, and Web. Bonn, Germany: German Informatics Society, 2017: 249−268
[10] InfluxData. InfluxDB time series database[EB/OL]. [2023-04-10].https://www.influxdata.com
[11] The OpenTSDB Team. OpenTSDB-A distributed, scalable monitoring system [EB/OL]. [2023-04-10]. http://opentsdb.net/
[12] Timescale. TimescaleDB time series database[EB/OL]. [2023-04-10].https://www.timescale.com/
[13] The Apache Software Foundation (ASF). Apache Cassandra is an open source NoSQL distributed database [EB/OL]. [2023-04-10].https://cassandra.apache.org/
[14] Sanaboyina T P. Performance evaluation of time series databases based on energy consumption [D]. Karlskrona, Sweden: Blekinge Institute of Technology, 2016
[15] Fadhel M, Sekerinski E, Yao Shucai. A comparison of time series databases for storing water quality data[C] //Proc of the 12th Int Conf on Interactive Mobile Communication Technologies and Learning. Berlin: Springer, 2019: 302−313
[16] The Cloud Native Computing Foundation (CNCF). Prometheus is a free software application used for event monitoring and alerting[EB/OL]. [2023-04-10].https://prometheus.io/
[17] Grzesik P, Mrozek D. Comparative analysis of time series databases in the context of edge computing for low power sensor networks[C] //Proc of the 20th Int Conf on Computational Science. Berlin: Springer, 2020: 371−383
[18] Riak. Riak TS is a distributed NoSQL key/value store optimized for time series data[EB/OL]. [2023-04-10].https://riak.com/products/riak-ts/index.html
[19] The PostgreSQL Global Development Group. PostgreSQL is a free and open-source relational database management system [EB/OL]. [2023-04-10].https://www.postgresql.org/
[20] SQLite Consortium. SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine [EB/OL]. [2023-04-10]. https://sqlite.org/index.html
[21] Brillinger D R. Time Series: Data Analysis and Theory[M]. Philadelphia, PA: SIAM, 2001
[22] International Electrotechnical Commission (IEC). IEC 61400-25-6: 2016: Wind energy generation systems-part 25-6: Communications for monitoring and control of wind power plants-Logical node classes and data classes for condition monitoring [S]. Geneva, Switzerland: International Electrotechnical Commission, 2016
[23] Dotis-Georgiou A. When you want holt-winters instead of machine learning[EB/OL]. [2023-04-10]. https://www.influxdata.com/blog/when-you-want-holt-winters-instead-of-machine-learning/
[24] DolphinDB. DolphinDB database[EB/OL]. [2023-04-10].https://dolphindb.com/
[25] Lampson B, Sturgis H E. Crash recovery in a distributed data storage system[R]. Palo Alto, CA: Xerox Palo Alto Research Center, 1979
[26] Gray J N. Notes on data base operating systems[M] //Operating Systems: An Advanced Course. Berlin: Springer, 2005: 393-481
[27] Bernstein P A, Hadzilacos V, Goodman N. Concurrency Control and Recovery in Database Systems[M]. Reading, MA: Addison-Wesley, 1987
[28] InfluxData. InfluxDB edge data replication[EB/OL]. [2023-04-10].https://www.influxdata.com/products/influxdb-edge-data-replication/
[29] Yang Yang, Cao Qiang, Jiang Hong. EdgeDB: An efficient time-series database for edge computing[J]. IEEE Access, 2019, 7: 142295−142307 doi: 10.1109/ACCESS.2019.2943876
[30] O’Neil P, Cheng E, Gawlick D, et al. The log-structured merge-tree (LSM-tree)[J]. Acta Informatica, 1996, 33(4): 351−385 doi: 10.1007/s002360050048
[31] Lu Lanyue, Pillai T S, Gopalakrishnan H, et al. WiscKey: Separating keys from values in SSD-conscious storage[J]. ACM Transactions on Storage, 2017, 13(1): 1−28
[32] Raju P, Kadekodi R, Chidambaram V, et al. Pebblesdb: Building key-value stores using fragmented log-structured merge trees[C] //Proc of the 26th Symp on Operating Systems Principles (SOSP). New York, ACM, 2017: 497−514
[33] Doekemeijer K, Trivedi A. Key-Value stores on flash storage devices: A survey[J]. arXiv preprint, arXiv: 2205. 07975, 2022
[34] Daim T U, Ploykitikoon P, Kennedy E, et al. Forecasting the future of data storage: Case of hard disk drive and flash memory[J]. Foresight, 2008, 10(5): 34−49 doi: 10.1108/14636680810918496
[35] Chang F, Dean J, Ghemawat S, et al. Bigtable: A distributed storage system for structured data[J]. ACM Transactions on Computer Systems, 2008, 26(2): 1−26
[36] Ghemawat S, Dean J. LevelDB database[EB/OL]. [2023-04-10].https://github.com/google/leveldb
[37] Agrawal N, Prabhakaran V, Wobber T, et al. Design tradeoffs for SSD performance[C] //Proc of the 2008 USENIX Annual Technical Conf. Berkeley, CA: USENIX Association, 2008: 57–70
[38] Yang Mingchang, Chang Yuming, Tsao C W, et al. Garbage collection and wear leveling for flash memory: Past and future[C] //Proc of the 2014 Int Conf on Smart Computing. Piscataway, NJ: IEEE, 2014: 66−73
[39] Caulfield A M, De A, Coburn J, et al. Moneta: A high-performance storage array architecture for next-generation, non-volatile memories[C] //Proc of the 43rd Annual IEEE/ACM Int Symp on Microarchitecture (MICRO). Piscataway, NJ: IEEE, 2010: 385−395
[40] Condit J, Nightingale E B, Frost C, et al. Better I/O through byte-addressable, persistent memory[C] //Proc of the 22nd ACM Symp on Operating Systems Principles (SOSP). New York: ACM, 2009: 133−146
[41] Bender M A, Farach-Colton M, Johnson R, et al. Don’t thrash: How to cache your Hash on flash[J]. Proceedings of the VLDB Endowment, 2012, 5(11): 1627−1637 doi: 10.14778/2350229.2350275
[42] Rottenstreich O, Keslassy I. The Bloom paradox: When not to use a Bloom filter[J]. IEEE/ACM Transactions on Networking, 2014, 23(3): 703−716
[43] Fan Bin, Andersen D G, Kaminsky M, et al. Cuckoo filter: Practically better than Bloom[C] //Proc of the 10th ACM Int Conf on Emerging Networking Experiments and Technologies (CoNEXT). New York: ACM, 2014: 75−88
[44] Graf T M, Lemire D. Xor filters: Faster and smaller than Bloom and cuckoo filters[J]. Journal of Experimental Algorithmics,2020,25:1−16
[45] Pugh W. Skip lists: A probabilistic alternative to balanced trees[J]. Communications of the ACM, 1990, 33(6): 668−676 doi: 10.1145/78973.78977
[46] Rothermel K, Mohan C. ARIES/NT: A recovery method based on write-ahead logging for nested transactions[C] //Proc of the 15th Int Conf on Very Large Data Bases (VLDB). San Francisco, CA: Morgan Kaufmann, 1989: 337–346
[47] Balmau O, Didona D, Guerraoui R, et al. TRIAD: Creating synergies between memory, disk and log in log structured key-value stores[C] //Proc of the 2017 USENIX Annual Technical Conf (USENIX ATC 17). Berkeley, CA: USENIX Association, 2017: 363−375
[48] Meta. RocksDB: A persistent key-value store for flash and RAM storage [EB/OL]. [2023-04-10].https://rocksdb.org
[49] Wikimedia Foundation. Locality of reference[EB/OL]. [2023-04-10].https://en.wikipedia.org/wiki/Locality_of_reference
[50] InfluxData. InfluxDB storage engine[EB/OL]. [2023-04-10].https://archive.docs.influxdata.com/influxdb/v0.11/concepts/storage_engine/
[51] The Apache Software Foundation (ASF). Apache HBase is the Hadoop database, a distributed, scalable, big data store [EB/OL]. [2023-04-10].https://hbase.apache.org/
[52] Hawkins B. KairosDB: Fast time series database on Cassandra[EB/OL]. [2023-04-10].https://kairosdb.github.io/
[53] The H2 Database Team. H2 is an embeddable RDBMS written in Java. [EB/OL]. [2023-04-10].https://github.com/h2database/h2database
[54] The Apache Software Foundation (ASF). Apache IoTDB [EB/OL]. [2023-04-10].https://iotdb.apache.org/
[55] InfluxData. Time series index (TSI) overview[EB/OL]. [2023-04-10].https://docs.influxdata.com/influxdb/v1.8/concepts/time-series-index/
[56] TAOS Data. TDengine is an open source, high-performance, cloud native time-series database[EB/OL]. [2023-04-10].https://tdengine.com/
[57] The QuestDB Team. QuestDB is an open-source time-series database for high throughput ingestion and fast SQL queries with operational simplicity [EB/OL]. [2023-04-10].https://questdb.io/
[58] The VictoriaMetrics Team. VictoriaMetrics: The high-performance, open source time series database & monitoring solution[EB/OL]. [2023-04-10].https://victoriametrics.com/
[59] Shi Xuanhua, Feng Zezhao, Li Kaixi, et al. ByteSeries: An in-memory time series database for large-scale monitoring systems[C] //Proc of the 11th ACM Symp on Cloud Computing (SoCC). New York: ACM, 2020: 60−73
[60] DataStax. How is data maintained[EB/OL]. [2023-04-10].https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlHowDataMaintain.html#dmlHowDataMaintain__twcs-compaction
[61] TDengine. High cardinality in time series data[EB/OL]. [2023-04-10].https://tdengine.com/tsdb/high-cardinality-in-time-series-data/
[62] Ilyushchenko V. How databases handle 10 million devices in high-cardinality benchmarks[EB/OL]. [2023-04-10].https://questdb.io/blog/2021/06/16/high-cardinality-time-series-data-performance/
[63] O’neil E J, O’neil P E, Weikum G. The LRU-K page replacement algorithm for database disk buffering[J]. ACM SIGMOD Record, 1993, 22(2): 297−306 doi: 10.1145/170036.170081
[64] Dix P. Announcing InfluxDB IOx - The future core of InfluxDB built with rust and arrow[EB/OL]. [2023-04-10].https://www.influxdata.com/blog/announcing-influxdb-iox/
[65] Comer D. Ubiquitous B-tree[J]. ACM Computing Surveys, 1979, 11(2): 121−137 doi: 10.1145/356770.356776
[66] Flynn M J. Some computer organizations and their effectiveness[J]. IEEE Transactions on Computers, 1972, 100(9): 948−960
[67] VictoriaMetrics. VictoriaMetrics cardinality explorer[EB/OL]. [2023-04-10].https://victoriametrics.com/blog/cardinality-explorer/
[68] De La Briandais R. File searching using variable length keys[C] //Proc of the 1959 Western Joint Computer Conf. New York: ACM, 1959: 295−298
[69] Samulowitz H, Reddy C, Sabharwal A, et al. Snappy: A simple algorithm portfolio[C] //Proc of the 16th Int Conf on Theory and Applications of Satisfiability Testing (SAT 2013). Berlin: Springer, 2013: 422−428
[70] The Apache Software Foundation (ASF). Aligned timeseries[EB/OL]. [2023-04-10].https://iotdb.apache.org/UserGuide/Master/Data-Concept/Data-Model-and-Terminology.html#aligned-timeseries
[71] Yao Ting, Zhang Yiwen, Wan Jiguang, et al. MatrixKV: Reducing write stalls and write amplification in LSM-tree based KV stores with a matrix container in NVM[C] // Proc of the 2020 USENIX Annual Technical Conf. Berkeley, CA: USENIX Association, 2020: 17−31
[72] Narayanan D, Thereska E, Donnelly A, et al. Migrating server storage to SSDs: Analysis of tradeoffs[C] //Proc of the 4th ACM European Conf on Computer Systems (EuroSys). New York: ACM, 2009: 145-158
[73] RocksDB. Strategies to reduce write amplification[EB/OL]. [2023-04-10].https://github.com/facebook/rocksdb/issues/19
[74] Luo Chen, Carey M J. LSM-based storage techniques: A survey[J]. The VLDB Journal, 2020, 29(1): 393−418 doi: 10.1007/s00778-019-00555-y
[75] Kerrisk M. Fsync: Standard C library[EB/OL]. [2023-04-10].https://man7.org/linux/man-pages/man2/fdatasync.2.html
[76] Valialkin A. WAL usage looks broken in modern time series databases [EB/OL]. [2023-04-10].https://valyala.medium.com/wal-usage-looks-broken-in-modern-time-series-databases-b62a627ab704
[77] Dias L B, Silva D S, de Sousa Junior R T, et al. C* DynaConf: An Apache Cassandra auto-tuning tool for Internet of things data[C] //Proc of the 6th Int Conf on Internet of Things, Big Data and Security. Setúbal, Portugal: SciTePress, 2021: 92−102
[78] Tangwongsan K, Hirzel M, Schneider S. Optimal and general out-of-order sliding-window aggregation[J]. Proceedings of the VLDB Endowment, 2019, 12(10): 1167−1180 doi: 10.14778/3339490.3339499
[79] Grulich P M, Traub J, Breß S, et al. Generating reproducible out-of-order data streams[C] //Proc of the 13th ACM Int Conf on Distributed and Event-based Systems. New York: ACM, 2019: 256−257
[80] Weiss W, Jimenez V J E, Zeiner H. Dynamic buffer sizing for out-of-order event compensation for time-sensitive applications[J]. ACM Transactions on Sensor Networks, 2020, 17(1): 1−23
[81] 张凌哲,黄向东,乔嘉林,等. 面向时序数据的两阶段日志结构合并树文件合并框架[J]. 计算机应用,2021,41(3):618−622 Zhang Lingzhe, Huang Xiangdong, Qiao Jialin, et al. Two-stage file compaction framework by log-structured merge-tree for time series data[J]. Journal of Computer Application, 2021, 41(3): 618−622 (in Chinese)
[82] Kang Yuyuan, Huang Xiangdong, Song Shaoxu, et al. Separation or not: On handing out-of-order time-series data in leveled LSM-tree[C] //Proc of the 38th Int Conf on Data Engineering (ICDE). Piscataway, NJ: IEEE, 2022: 3340−3352
[83] Huang Xiangdong, Wang Jianmin, Wong R, et al. Pisa: An index for aggregating big time series data[C] //Proc of the 25th ACM Int on Conf on Information and Knowledge Management (CIKM). New York: ACM, 2016: 979−988
[84] Qiao Jialin, Huang Xiangdong, Wang Jianmin, et al. Dual-PISA: An index for aggregation operations on time series data[J]. Information Systems, 2020, 87(C): 101427
[85] 赵东明,邱圆辉,康瑞,等. 面向聚合查询的 Apache IoTDB 物理元数据管理[J]. 软件学报,2022,34(3):1027−1048 Zhao Dongming, Qiu Yuanhui, Kang Rui, et al. Physical metadata management in Apache IoTDB for aggregate queries[J]. Journal of Software, 2022, 34(3): 1027−1048 (in Chinese)
[86] InfluxData. Data retention in InfluxDB[EB/OL]. [2023-04-10].https://docs.influxdata.com/influxdb/v2.7/reference/internals/data-retention/
[87] Xiao Jinzhao, Huang Yuxiang, Hu Changyu, et al. Time series data encoding for efficient storage: A comparative analysis in Apache IoTDB[J]. Proceedings of the VLDB Endowment, 2022, 15(10): 2148−2160 doi: 10.14778/3547305.3547319
[88] The Apache Software Foundation (ASF). Encoding methods[EB/OL]. [2023-04-10].https://iotdb.apache.org/UserGuide/Master/Data-Concept/Encoding.html
[89] Golomb S. Run-length encodings[J]. IEEE Transactions on Information Theory, 1966, 12(3): 399−401 doi: 10.1109/TIT.1966.1053907
[90] Campobello G, Segreto A, Zanafi S, et al. RAKE: A simple and efficient lossless compression algorithm for the Internet of things[C] //Proc of the 25th European Signal Processing Conf. Piscataway, NJ: IEEE, 2017: 2581−2585
[91] Spiegel J, Wira P, Hermann G. A comparative experimental study of lossless compression algorithms for enhancing energy efficiency in smart meters[C] //Proc of the 16th IEEE Int Conf on Industrial Informatics. Piscataway, NJ: IEEE, 2018: 447−452
[92] Blalock D, Madden S, Guttag J. Sprintz: Time series compression for the Internet of things[J]. Proceedings of the ACM on Interactive, Mobile, Wearable and Ubiquitous Technologies, 2018, 2(3): 1−23
[93] Welch T A. A technique for high-performance data compression[J]. Computer, 1984, 17(6): 8−19 doi: 10.1109/MC.1984.1659158
[94] Howard P G, Vitter J S. Parallel lossless image compression using Huffman and arithmetic coding[C] //Proc of the Data Compression Conf. Piscataway, NJ: IEEE, 1992: 299−308
[95] Anh V N, Moffat A. Index compression using 64-bit words[J]. Software: Practice and Experience, 2010, 40(2): 131−147 doi: 10.1002/spe.948
[96] AVEVA. AVEVA PI server[EB/OL]. [2023-04-10].https://www.aveva.com/en/products/aveva-pi-server/
[97] Bristol E H. Swinging door trending: Adaptive trend recording[C] //Proc of the ISA National Conf. 1990: 749−754. [2023-04-10].https://cir.nii.ac.jp/crid/1574231875546173824
[98] Feng Xiaodong, Cheng Changling, Liu Changling, et al. An improved process data compression algorithm[C] //Proc of the 4th World Congress on Intelligent Control and Automation. Piscataway, NJ: IEEE, 2002: 2190−2193
[99] Gailly J L. GNU Gzip[EB/OL]. [2023-04-10].https://www.gnu.org/software/gzip/
[100] Bartík M, Ubik S, Kubalik P. LZ4 compression algorithm on FPGA[C] //Proc of the IEEE Int Conf on Electronics, Circuits, and Systems. Piscataway, NJ: IEEE, 2015: 179−182
[101] Cheng Hongze. Compressing time series data[EB/OL]. [2023-04-10].https://tdengine.com/compressing-time-series-data/
[102] Jensen S K, Pedersen T B, Thomsen C. ModelarDB: Modular model-based time series management with Spark and Cassandra[J]. Proceedings of the VLDB Endowment, 2018, 11(11): 1688−1701 doi: 10.14778/3236187.3236215
[103] Eichinger F, Efros P, Karnouskos S, et al. A time-series compression technique and its application to the smart grid[J]. The VLDB Journal, 2015, 24(2): 193−218 doi: 10.1007/s00778-014-0368-8
[104] Chiarot G, Silvestri C. Time series compression survey[J]. ACM Computing Surveys, 2023, 55(10): 1−32
[105] Yu Xinyang, Peng Yanqing, Li Feifei, et al. Two-level data compression using machine learning in time series database[C] //Proc of the 36th Int Conf on Data Engineering (ICDE). Piscataway, NJ: IEEE, 2020: 1333−1344
[106] Schizofreny. Middle-out compression for time-series data[EB/OL]. [2023-04-10].https://github.com/schizofreny/middle-out
[107] TAOS Data. Tiered storage[EB/OL]. [2023-04-10].https://docs.tdengine.com/tdinternal/arch/#tiered-storage
[108] Thulab. iot-benchmark[EB/OL]. [2023-04-10].https://github.com/thulab/iot-benchmark
[109] Timescale. TimescaleDB vs. InfluxDB: Purpose built differently for time-series data[EB/OL]. [2023-04-10].https://www.timescale.com/blog/timescaledb-vs-influxdb-for-time-series-data-timescale-influx-sql-nosql-36489299877/
[110] Timescale. Time series benchmark suite[EB/OL]. [2023-04-10].https://github.com/timescale/tsbs
[111] Valialkin A. High-cardinality TSDB benchmarks: VictoriaMetrics vs TimescaleDB vs InfluxDB[EB/OL]. [2023-04-10].https://valyala.medium.com/high-cardinality-tsdb-benchmarks-victoriametrics-vs-timescaledb-vs-influxdb-13e6ee64dd6b
[112] TAOS Data. DevOps performance comparison: InfluxDB and TimescaleDB vs TDengine[EB/OL]. [2023-04-10]. https://tdengine.com/devops-performance-comparison-influxdb-and-timescaledb-vs-tdengine/
[113] The QuestDB Team. Comparing InfluxDB, TimescaleDB, and QuestDB Time-Series Databases[EB/OL]. [2023-04-10]. https://questdb.io/blog/comparing-influxdb-timescaledb-questdb-time-series-databases/
[114] Liu Rui, Yuan Juan. Benchmarking time series databases with IoTDB-benchmark for IoT scenarios[J]. arXiv preprint, arXiv: 1901. 08304, 2019
[115] The Transaction Processing Performance Council (TPC). TPCx-IoT[EB/OL]. [2023-04-10].https://www.tpc.org/tpcx-iot/default5.asp
[116] Poess M, Nambiar R, Kulkarni K, et al. Analysis of TPCx-IoT: The first industry standard benchmark for IoT gateway systems[C] //Proc of the 34th Int Conf on Data Engineering (ICDE). Piscataway, NJ: IEEE, 2018: 1519−1530
[117] InfluxData. influxdb-comparisons[EB/OL]. [2023-04-10].https://github.com/influxdata/influxdb-comparisons
[118] Hao Yuanzhe, Qin Xiongpai, Chen Yueguo, et al. TS-Benchmark: A benchmark for time series databases[C] //Proc of the 37th Int Conf on Data Engineering (ICDE). Piscataway, NJ: IEEE, 2021: 588−599
[119] Radford A, Metz L, Chintala S. Unsupervised representation learning with deep convolutional generative adversarial networks[J]. arXiv preprint, arXiv: 1511. 06434, 2016
[120] Shah B, Jat P, Sashidhar K. Performance study of time series databases[J]. arXiv preprint, arXiv: 2208. 13982, 2022
[121] The Apache Software Foundation (ASF). Druid is a high performance, real-time analytics database[EB/OL]. [2023-04-10].https://druid.apache.org/
[122] Mei Fei, Cao Qiang, Jiang Hong, et al. SifrDB: A unified solution for write-optimized key-value stores in large datacenter[C]//Proc of the Symp on Cloud Computing (SoCC). New York: ACM, 2018: 477−489
[123] Chen Feng, Hou Binbing, Lee R. Internal parallelism of flash memory-based solid-state drives[J]. ACM Transactions on Storage, 2016, 12(3): 1−39
[124] Chen Feng, Lee R, Zhang Xiaodong. Essential roles of exploiting internal parallelism of flash memory based solid state drives in high-speed data processing[C] //Proc of the 17th Int Symp on High Performance Computer Architecture (HPCA). Piscataway, NJ: IEEE, 2011: 266−277
[125] Wang Peng, Sun Guangyu, Jiang Song, et al. An efficient design and implementation of LSM-tree based key-value store on open-channel SSD[C/OL] //Proc of the 9th European Conf on Computer Systems (EuroSys). New York: ACM, 2014[2023-04-10].https://dl.acm.org/doi/10.1145/2592798.2592804
[126] Kannan S, Bhat N, Gavrilovska A, et al. Redesigning LSMs for nonvolatile memory with NoveLSM[C] //Proc of the 2018 USENIX Annual Technical Conf (USENIX ATC 18). Berkeley, CA: USENIX Association, 2018: 993−1005
[127] 游理通,王振杰,黄林鹏. 一个基于日志结构的非易失性内存键值存储系统[J]. 计算机研究与发展,2018,55(9):2038−2049 You Litong, Wang Zhenjie, Huang Linpeng. A log-structured key-value store based on non-volatile memory[J]. Journal of Computer Research and Development, 2018, 55(9): 2038−2049 (in Chinese)
[128] 董昊文,张超,李国良,等. 云原生数据库综述[J/OL]. 软件学报,2023[2023-04-10]. http://www.jos.org.cn/jos/article/abstract/6952 Dong Haowen, Zhang Chao, Li Guoliang, et al. A survey of cloud-native databases[J/OL]. Journal of Software, 2023[2023-04-10]. http://www.jos.org.cn/jos/article/abstract/6952 (in Chinese)
[129] 孟小峰,马超红,杨晨. 机器学习化数据库系统研究综述[J]. 计算机研究与发展,2019,56(9):1803−1820 Meng Xiaofeng, Ma Chaohong, Yang Chen. Survey on machine learning for database systems[J]. Journal of Computer Research and Development, 2019, 56(9): 1803−1820 (in Chinese)
-
期刊类型引用(1)
1. 张秀再,邱野,沈涛. 基于改进SSD算法的地铁场景小行人目标检测. 计算机研究与发展. 2025(02): 397-407 . 本站查看
其他类型引用(0)