一种数据近存储计算方法、装置和存储介质

未命名 08-26 阅读:195 评论:0


1.本发明涉及数据处理技术领域,更具体地说,特别涉及一种数据近存储计算方法、装置和存储介质。


背景技术:

2.随着数据库本身的蓬勃发展,数据库技术也同时成为了计算机科学的一个研究领域。数据库技术作为研究数据库的一个领域,其主要的研究方向就是对数据的存储、使用和管理方式。随着数据体量膨胀,中央处理器cpu采用的串行流水的指令执行的形式实现数据处理的性能与其时钟频率等相关联,不能满足大数据的计算性能需求。在不考虑通过集群或分布式的方式实现高性能的情况下,利用异构计算的方式来提高计算性能已经成为技术发展的趋势。由于cpu优点主要在于调度、管理等方面,与协处理器相比,计算能力不是其优势。对于协处理器而言,接受cpu的调度,拥有并行计算的结构基础,利用高并发计算能力可以提高系统的性能。
3.近存储技术近年来作为计算机领域效能提升手段而备受关注,其主要思想是通过缩短计算单元和存储单元的距离,从而缓解访存带宽瓶颈,提升数据的互连系数,有效提高受限于带宽的芯片算力。近存计算往往通过在计算芯片内部集成更多的存储单元,或者增加存储单元和计算单元的带宽,来降低数据搬移的开销。
4.目前现有的技术中,专利号为201811547889.x的发明公开了一种基于fpga的国产平台数据库加速系统及方法,主机包括cpu、pcie驱动、host程,fpga板卡通过pcie接口与cpu连接;pcie驱动程序,用于建立cpu和fpga间的数据传输通路;host程序,用于负责操作分析和分配,使cpu将计算密集型任务卸载给fpga去执行;fpga芯片,用于将cpu卸载给的计算密集型任务进行执行操作。专利号为201911205056.x的发明公开了一种数据查询方法、系统、异构计算加速平台及存储介质,该发明是通过fpga进行数据库加速,与前述专利系统架构相似,通信方式采用了异构缓存一致性协议,进一步的提升了数据传输的效率,从而提高数据库整体的执行效率。另外,公开号为cn113312415a的发明专利公开了一种用于数据库操作的近存储器加速,这专利阐述的存储器数据库库加速器主要是在存储器中加入计算单元,将数据和计算单元之间的数据传输距离尽可能的缩短,从而提高内存数据库整体的性能。
5.现有的解决方案中,前两种类型的方案下,fpga内的加速功能单元相对固定,只能针对特定数据库特定的应用进行加速,加速功能单元内的加速模块也是固定的,不利于推广以及功能移植,具有一定的局限性;第三种方法更多是讲述数据传输延时降低带来的性能提升,并没有提到关于计算任务如何卸载、整个数据库管理系统的集成、加速单元模块的设计与调度以及针对硬件实现数据库多样化操作的灵活应对的方法,在实际应用中依然存在实操性差,不利于推广的问题。为此,确有必要开发一种数据近存储计算方法、装置和存储介质。


技术实现要素:

6.本发明的目的在于提供一种数据近存储计算方法、装置和存储介质,以克服现有技术所存在的缺陷。
7.为了达到上述目的,本发明采用的技术方案如下:
8.一种数据近存储计算方法,包括以下步骤:
9.s1、接收用户发起的数据库操作请求任务;
10.s2、cpu端将请求任务进行解析,选择加速单元并进行卸载,通知加速处理器启动加速任务;
11.s3、硬件加速器接受通知后,从硬件加速器中的存储单元中直接取数传输到计算单元,并根据计算任务链表,调用计算单元中的资源池的模块进行组合,搭建完成从主机端卸载计算任务的加速功能单元;
12.s4、计算单元计算完成后将计算结果放入存储单元指定的地址,以中断的方式或查询方式通知cpu读取计算结果。
13.进一步地,所述步骤s2中cpu端将请求任务进行解析具体为:利用资源管理部件根据请求任务进行解析。
14.进一步地,所述步骤s4中的计算单元一次计算任务完成,释放资源模块或者传递给其他加速卡计算单元,等待下一次计算任务或者开始其他加速计算单元的计算。
15.本发明还提供一种数据近存储计算装置,包括:
16.host端,在用户发起的数据库操作请求任务时,利用cpu端将请求任务进行解析,选择加速单元并进行卸载,通知加速处理器启动加速任务;
17.硬件加速器,在接受通知后,从硬件加速器中的存储单元中直接取数传输到计算单元,并根据计算任务链表,调用计算单元中的资源池的模块进行组合,搭建完成从主机端卸载计算任务的加速功能单元,在计算单元计算完成后将计算结果放入共享存储单元指定的地址,以中断的方式或查询方式通知cpu读取计算结果。
18.进一步地,还包括postgresql数据库、postgresql-加速器hook回调插件和postgresql-加速器中间件,所述postgresql-加速器hook回调插件cvd用于通过回调函数将查询请求信息进行转换后通过postgresql-加速器中间件发给硬件加速器进行加速处理,计算完成后postgresql-加速器中间件返回满足过滤条件的元组信息返给回调函数,postgresql数据库继续执行;
19.所述postgresql-加速器中间件包括一到多个工作者线程,从任务队列中取出任务执行,工作者线程根据任务信息将页面数据、元组描述符、过滤条件写入到加速器的存储单元,完成数据拷贝后,向计算单元提交申请,开始数据块的dma写入。
20.进一步地,所述加速器hook回调插件的处理流程为:
21.对postgresql数据库的任务进行重编码,生成硬件可识别可执行的指令码流,包括计算任务解析信息、表结构信息以及控制信息;
22.所述计算任务解析信息的编码中,postgresql数据对用户查询子句进行词法、语法解析后,将运算的过程以链表+树的数据结构进行描述,节点包括算术运算节点、比较运算节点和逻辑运算节点,
23.所述算术运算节点位于树结构的最下层,输入为元组中的列字段、常量或其它算
术节点的结果,输出计算结果供上层节点使用;
24.所述比较运算节点位于树结构的中间,输入为下层算术运算的结果或sql语句中的常量,输出计算结果供上层逻辑节点使用;
25.所述逻辑运算节点位于树结构的最上层,输入为下一层比较运算的结果,输出为布尔值,根节点的布尔值,用于判断该元组是否满足过滤条件;
26.所述表结构信息的编码中仅提取其中长度和对齐信息编码为元组描述符,以用于对硬件加速器解析部件的控制;
27.所述控制信息的编码包括需进行加速任务的数据源文件路径、用户操作的类型、操作条件个数、需要解析字段的列索引,用于硬件加速器核函数参数的设置。
28.进一步地,所述postgresql-加速器中间件中工作者线程采用将数据分块处理、使用乱序执行实现对数据分块流水处理以及使用多个工作者线程的优化方法。
29.进一步地,所述硬件加速器包括控制单元、存储单元和计算单元,所述计算单元为多个,每个计算单元绑定独立的hbm缓存端口,每个计算单元内采用采用硬件流水性能优化方式,包括读取部件、数据表解析部件、过滤部件、正则表达式部件和回写部件;
30.所述读取部件从hbm缓存中读取元组描述符、过滤条件的控制和数据信息,元组描述符用于描述一个表中各个字段的对齐信息与长度信息,过滤条件由sql语句中的where子句重编码转换而来,用于描述过滤计算的参数信息,数据表读取,多通路分时传输,分发给行列解析部件;
31.所述解析部件根据配置模块中的元组描述符与页面数据,解析出页面中元组的位置与长度,元组中列字段的偏移与列长度,将解析的结果送入过滤部件;
32.所述过滤部件根据配置模块中的过滤条件,计算元组是否符合过滤条件,将满足过滤条件的元组在页面中的位置与长度送入结果回写部件,若有正则表达式查询则送入正则表达式部件,计算完成后将结果送入回写部件;
33.所述正则表达式部件根据配置模块中的正则表达式匹配条件,判断元组是否符合匹配条件,将满足条件的元组在页面中的位置与长度信息送入结果回写部件,正则表达式部件在流水线中是可选流水站,如果sql语句中有正则表达式查询则执行正则表达式部件,计算完成后将结果送入回写部件,否则跳过;
34.所述回写部件接收过滤部件或正则表达式部件的计算结果并统计满足条件的元组个数,将数据写回hbm内存中,传回中间件,postgresql-数据库继续执行。
35.进一步地,所述读取部件采用多通道设计,所述解析部件采用流水行列数据解析。
36.本发明还提供一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述的数据近存储计算方法的步骤。
37.与现有技术相比,本发明的优点在于:本发明打破了使用硬件进行加速时根据需求的变化而不断更改硬件底层逻辑的模式,理论上可实现任意形式的查询语句或过滤条件。
附图说明
38.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本
发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
39.图1是本发明数据近存储计算装置的实现框图。
40.图2是本发明共享内存连接图
41.图3是本发明数据库api计算库结构图
42.图4是本发明中重编码指令码流结构示意图。
43.图5是本发明中数据分块后执行时序图。
44.图6是本发明中硬件计算卡中数据库表解析和过滤逻辑微体系结构图。
45.图7是本发明中板卡间通信模块结构图。
46.图8是加速单元cu流水线结构图。
47.图9是本发明中postgresql页面存储结构。
48.图10是本发明中数据库表解析功能单元结构图。
49.图11是本发明中过滤计算功能单元结构图。
50.图12是本发明中正则表达式匹配器工作流程。
51.图13是本发明中正则三要素的关系图。
52.图14是本发明中token和state的全连接图。
53.图15是本发明中复杂表达式分割为3个子表达式的示意图。
具体实施方式
54.下面结合附图对本发明的优选实施例进行详细阐述,以使本发明的优点和特征能更易于被本领域技术人员理解,从而对本发明的保护范围做出更为清楚明确的界定。
55.参阅图1所示,本实施例公开了一种数据近存储计算方法,创新性提出了一种单机多加速卡近存储计算解决方案,加速任务不再使用单一加速卡完成,而是采用面向数据库硬件加速库的模式,每块板卡完成一种特定加速功能,通过多个加速设备共同完成,包括以下步骤:
56.步骤s1、在host端,当用户发起的数据库操作请求任务时执行步骤s2。
57.步骤s2、cpu端将请求任务进行解析,利用资源管理部件根据请求任务进行解析,选择加速单元并进行卸载,通知加速处理器启动加速任务。
58.步骤s3、硬件加速器接受通知后,从硬件加速器中的存储单元中直接取数传输到计算单元,并根据计算任务链表,调用计算单元中的资源池的模块进行组合,搭建完成从主机端卸载计算任务的加速功能单元。
59.步骤s4、计算单元计算完成后将计算结果放入存储单元指定的地址,以中断的方式或查询方式通知cpu读取计算结果。一次计算任务完成,释放资源模块,等待下一次计算任务。
60.本实施例中,数据库管理系统运行的服务器或者主机端host与配备数据库处理器的设备之前通过高速接口互联,该接口根据处理器与存储器接口的形态而可进行修改,若处理器以pcie板卡设备形态进行适配,那么二者之间通过pcie接口互联;若加速器以ssd或nvme的形式,则通过相应的协议进行通信。
61.参阅图1所示,本发明还提供一种数据近存储计算装置,包括:
62.host端,在用户发起的数据库操作请求任务时,利用cpu端将请求任务进行解析,选择加速单元并进行卸载,通知加速处理器启动加速任务;
63.硬件加速器,在接受通知后,从硬件加速器中的存储单元中直接取数传输到计算单元,并根据计算任务链表,调用计算单元中的资源池的模块进行组合,搭建完成从主机端卸载计算任务的加速功能单元,在计算单元计算完成后将计算结果放入存储单元指定的地址,以中断的方式或查询方式通知cpu读取计算结果。
64.本发明提出了近存储计算加速库api层次化的设计方法,api平台包括应用解析层、设备管理层、设备驱动层以及硬件加速层,层次化的设计使得每一层相对独立,方便移植和调用。
65.本发明提出的api平台包括应用解析层,应用解析层的表信息管理以及元组解析主要是对数据库的任务进行重编码,生成硬件可识别可执行的指令码流,主要涉及计算任务解析信息、表结构信息以及控制信息。
66.本发明提出的api平台包括硬件管理层,硬件管理层的功能是接收来自应用层的加速任务请求,根据加速任务的类型和数据体量评估硬件加速平台的承载情况,进行资源的调度与协调。面向数据库加速场景特点,提出了设备管理层动态维护设备信息表的方法,实时更新硬件的使用状态,可以方便快捷将应用层的加速任务卸载至硬件加速卡。
67.本发明提出的api凭条包含设备驱动层,设备驱动层是完成加速卡的驱动工作,包括配置接口信息、数据传输启动配置等。
68.为了降低数据搬移带来的数据延时,本发明提出了一种多加速卡共享内存的网络传输模型,主机只需要将数据库数据搬移到共享内存,所有加速卡分时复用共享内存,共享内存与主机端内存统一编址,支持cpu缓存一致性。
69.为了降低数据主从模式的传输瓶颈问题,本发明提出了一种板卡间三维网络数据传输方法,避免了反复传输带来的性能损失和拥塞瓶颈。
70.本发明提出了一种面向近存储计算硬件加速库模式的拓扑结构,3d-near拓扑结构,这种结构下,星形的中间节点是共享内存,正方体的八个节点是8块近存储计算卡。
71.本发明中的拓扑结构下,通过两两连接以及互联的路由结构,可以实现全节点的全连接,实现全网节点的互连互通。
72.本发明为了实现全节点的全连接,制定了一种通信协议,在该协议的指导下,可以完成路由算法的实现。
73.本发明中的加速卡节点,除了完成数据库卸载的加速任务,还具备路由器的功能,以转发其他节点的通信信息。
74.每个加速卡中的路由器模块包含3-8条虚通道、状态解析以及路由算法实现功能。
75.发明提出了一种固定的路由算法表,该算法表避开了与主机互连的节点1的转发功能,每个加速卡节点在进行任务转发时按照路由表所规划的路径即可,不需要实现路由算法,以减少逻辑资源的消耗。
76.本实施例还包括postgresql数据库、postgresql-加速器hook回调插件和postgresql-加速器中间件。
77.postgresql-加速器hook回调插件和postgresql-加速器中间件和硬件加速器整体组成加速系统。
78.postgresql-加速器hook回调插件的设计如下:
79.以往的技术中,通过用户自定义函数udf(user define function)的方式将硬件加速器的算子集成到样就导致对用户层的不透明以及无法兼容不同的硬件平台,通用性差。本发明利用postgresql-加速器hook回调插件,将将查询过程中所执行的代码逻辑进行重载,在不修改源码的情况下实现用户的自定义功能,进而实现对原生sql语句的支持。该postgresql-加速器hook回调插件用于通过回调函数将查询请求信息进行转换后通过postgresql-加速器中间件发给硬件加速器进行加速处理,计算完成后postgresql-加速器中间件返回满足过滤条件的元组信息返给回调函数,postgresql数据库继续执行。其具体的处理流程如图2所示,即加速器hook回调插件的处理流程为:
80.对postgresql数据库的任务进行重编码,生成硬件可识别可执行的指令码流,包括计算任务解析信息、表结构信息以及控制信息。
81.计算任务即sql语句中具体的用户操作请求,包括读取、解析、过滤、连接、分组、排序、聚合以及正则表达式等。所述计算任务解析信息的编码中,postgresql数据对用户查询子句进行词法、语法解析后,将运算的过程以链表+树的数据结构进行描述,节点包括算术运算节点、比较运算节点和逻辑运算节点,数据结构中三种运算节点的组织如下:
82.所述算术运算(加、减、乘、除)节点位于树结构的最下层,输入为元组中的列字段、常量或其它算术节点的结果,输出计算结果供上层节点使用。
83.所述比较运算(大小比较等)节点位于树结构的中间,输入为下层算术运算的结果或sql语句中的常量,输出计算结果供上层逻辑节点使用。
84.所述逻辑运算(与、或)节点位于树结构的最上层,输入为下一层比较运算的结果,输出为布尔值,根节点的布尔值,用于判断该元组是否满足过滤条件。
85.表结构信息描述了表中各字段包含的属性信息,也就是数据库源数据中tupledesc数据结构。该数据结构包含比较多的信息,本发明的表结构信息的编码中仅提取其中长度和对齐信息编码为元组描述符,以用于对硬件加速器解析部件的控制。
86.所述控制信息的编码包括需进行加速任务的数据源文件路径、用户操作的类型、操作条件个数、需要解析字段的列索引,用于硬件加速器核函数参数的设置。
87.postgresql-加速器中间件进程中会将原始数据、解析过滤的结果,分块组织存放在存储器中,也就是离计算单元最近的存储器中。中间件进程完成一个数据块的处理后,会通过socket向hook发送处理完成信号,hook进程根据消息中的地址信息进行访存,将符合查询条件的元组信息返回给host,完成扫描节点的重载处理。
88.本发明为了灵活支持sql语句,在硬件加速器中实现复杂的表达式计算,创新性的提出了一种实现方式:由软件对“链表+树”数据结构进行遍历,同时统计分析其中包含的算数运算、比较运算、逻辑运算节点个数以及依赖关系,并将节点按照深度降序排列,每一层生成可并行的多指令组,不同层的多指令组顺序执行,最后是完成逻辑的单指令组,指令全部完成后得到过滤结果。
89.所述postgresql-加速器中间件的设计如下:
90.为了从整体上实现性能的提升,host侧需要从数据传输、内存管理、消息同步等方面进行性能优化。本发明提出的postgresql-加速器中间件程序通过数据分块、多线程等技术来提高整体性能。postgresql-加速器中间件中有一到多个工作者线程,从任务队列中取
出任务执行,工作者线程根据任务信息将页面数据、元组描述符、过滤条件写入到加速器的存储器,完成数据拷贝后,向计算单元(cu)提交申请,开始数据块的dma写入。为优化中间件执行效率,工作者线程使用如下优化方法:
91.一是将数据分块处理,降低处理过滤结果的延迟。通常情况下,根据硬件加速器存储单元和计算单元的特性,将原本为每个计算单元分配的128mb的页面存储空间进行更小分块处理,可以尽早开启对数据的传输与计算操作,以降低数据传输等待的时间,从而提高传输效率,图3位数据分块后任务执行的时序图。
92.二是使用乱序执行实现对数据分块流水处理,提高带宽利用率。由于数据库中数据块有如下特点:数据块的dma传输与硬件加速器计算没有相互依赖关系;计算单元之间的数据传输与计算操作没有相互依赖关系,因此可以采用乱序执行,使传输与计算流水执行,从而提升整体执行效率。
93.三是使用多个工作者线程,提高带宽降低拷贝延迟。异构系统的瓶颈是数据传输,总体性能会受限于总线访问速度,对于多cpu的体系架构,可配置多个工作者线程同时工作,提高有效吞吐率。工作者线程数量与cpu使用率、整体性能之间的关系。
94.所述硬件加速器包括控制单元、存储单元和计算单元,控制单元,用于加速任务队列的管理、调度和分配;存储单元,用于存储待操作的数据库源数据;加速单元,具体实现计算任务的模块,并行分布了多个正则表达式匹配器、查询器、过滤器以及其他扫描、hash等运算模块。
95.以下对加速器的关键部件,计算单元进行重点描述。通常使用硬件专用加速器实现时,会将行数据解析与待加速的操作放在一个模块内顺序执行。以过滤操作为例,计算单元按字节读取行数据,遇到需要过滤的列字段时,执行过滤条件的判断,处理效率较低。本发明采用硬件流水性能优化方式,将数据的读取、解析、过滤、写回设计成四个功能模块,以流水方式执行,微体系结构如图4所示,包含多个计算单元(cu),为了减少计算单元并行执行时对内存的竞争,每个计算单元绑定独立的hbm缓存端口。
96.所述计算单元为多个,每个计算单元包括读取部件、解析部件、过滤部件和回写部件,所述读取部件从hbm缓存中读取元组描述符、过滤条件等控制和数据信息,元组描述符用于描述一个表中各个字段的对齐信息与长度信息,过滤条件由sql语句中的where子句重编码转换而来,用于描述过滤计算的参数信息,数据表读取,多通路分时传输,分发给行列解析部件。所述解析部件根据配置模块中的元组描述符与页面数据,解析出页面中元组的位置与长度,元组中列字段的偏移与列长度,将解析的结果送入过滤部件。所述过滤部件根据配置模块中的过滤条件,计算元组是否符合过滤条件,将满足过滤条件的元组在页面中的位置与长度送入结果回写部件,若有正则表达式查询则送入正则表达式部件,计算完成后将结果送入回写部件。所述回写部件接收过滤部件或正则表达式部件的计算结果并统计满足条件的元组个数,将数据写回hbm内存中,传回中间件,postgresql-数据库继续执行。
97.所述正则表达式部件根据配置模块中的正则表达式匹配条件,判断元组是否符合匹配条件,将满足条件的元组在页面中的位置与长度信息送入结果回写部件,正则表达式部件在流水线中是可选流水站,如果sql语句中有正则表达式查询则执行正则表达式部件,计算完成后将结果送入回写部件,否则跳过。
98.本发明采用多通道并行数据读取,为了最大程度发挥硬件的并行优势,减少传输
单元和执行单元的竞争,在多个并行计算单元间做了数据传输优化,读取部件采用多通道设计,支持2-16个hbm片内存储通道,保证数据的读写可以同时进行,即传输和计算可以同时运行,数据传输采用16mb、32mb或64mb的大小dma传输,完成dma操作后产生中断信号发给数据库和数据派发逻辑,并切换到其他通道读写数据。在加速逻辑中,页表大小为8kb,每个处理单元对应两个page页ram缓存,完成一个页的处理后,切换到另一个页处理,同时进行数据读取和处理,保证数据的有效吞吐率。
99.本发明采用定制化流水行列数据解析,postgresql使用行存储模式存放每一行记录,在页面的固定偏移位置,使用:

页面行数字段,使用特定计算规则,记录页面中存放的元组个数。每插入一行新的记录,记录的原始数据会封装为元组,从页面的底部向顶部方向逐个存放;

元信息,从页面固定偏移开始,向底部方向逐个存放元组的元信息,元信息包含了该元组在页面中的行偏移(bit0-bit14)、行标记(bit15-bit16)和行长度(bit17-bit31),页面存储数据结构如图5所示。
100.元组中头部包含了原始数据的起始位置,从起始位置开始依次存放了各个列字段的数据。列字段有定长与变长两种类型,其存储方式有行内、行外、压缩、非压缩几种方式,本发明将主要研究常用的行内非压缩存储方式。
101.在表创建时,会生成元组描述符,用于描述元组中每个列字段的长度与对齐方式。元组描述符中attalign变量用于标记对应列字段的对齐方式,attlen变量用于标记对应列字段的长度。page内包含的行数以及每行的长度是不确定的,对于变长数据,硬件中,比如fpga中较难并行处理。本发明创新性的提出了在硬件中直接解析postgresql原始数据帧,支持不定长数据的处理。以tpc-h q6为例,fpga解析一个完整元组需要30个时钟周期,有较好的加速效果。元组解析部件根据中间件配置的控制信息和页表包含的行地址/行偏移信息等,对元组中列字段进行解析,将解析后的数据存放行列指示信息存储器ram中,ram的地址是行号加列号、ram中的内容是列数据的起始位置以及长度信息。根据这些信息,后续计算模块即可在page数据存储器中读出不定长的数据。
102.本发明采用并行流水计算单元,根据加速任务的不同,调用的计算模块不同,根据不同硬件资源的情况,设计最大的规模运算单元,并反馈给软件,软件在进行码流设计时会根据硬件支持情况进行调整。
103.以过滤计算为例进行详细描述,过滤计算功能单元结构图如图6所示,中间件将过滤条件重编码的指令队列存入缓存中,硬件收到指令流数据后,首先解帧格式,从帧头中得到操作指令的个数,以操作指令的顺序为地址,按照各类算子的划分,把各类算子的配置信息存入ram。
104.下面详细介绍正则表达式匹配器的详细设计单元,本发明提出的解决方案依赖于将正则表达式转换为非确定性有限状态自动机(nfa)的技术。使用nfa的好处是,多个状态可以同时处于活动状态,输入字符可以在恒定时间内触发许多不同的状态转换,这在软件中是不可能的。与大多数相关工作不同是,在数据库域中,正则表达式通常用于搜索文本,而不是对数据包内容进行匹配。自然文本通常包含较长的单词或句子,在匹配时即便使用nfa,也可能导致较高的状态计数,因为每个字符都转换为一个状态。在本发明中中,将字符匹配与nfa状态转换逻辑分开,并允许字符序列作为单个令牌进行匹配。字符的范围(例如[0-9])只是作为一种特殊字符,也可以是令牌的一部分。正则表达式匹配器内部的这种解
耦直接定义了电路的两个合成时间参数:它可以识别的最大字符数和nfa可以包含的最大状态数。将正则表达式的特定实例部署到硬件的流程是:首先,使用perl library2将正则表达式转换为nfa表示;然后,使用c++程序,从这个nfa中提取所有由令牌表示的字符序列,并将相应的状态压缩为单个状态;基于nfa的这种压缩形式和字符序列,设置驱动fpga的配置。
[0105]
正则表达式匹配器每个周期处理1个字节,为了获得更高的吞吐量,并行部署了多个匹配器,并使用512位宽的fifo分发输入数据。输出在16位宽的fifo中收集,以循环方式读取,并写入内存页。每个输出值都是一个16位无符号整数,如果匹配,则为匹配结束时的字节位置,否则为零。正则表达式匹配器的工作流程如图7所示。
[0106]
本发明中提出硬件计算功能包含数据读取、数据库全表解析、投影、过滤。其中过滤包括比较,算术运算,正则表达式匹配等操作。数据库加速计算库还可以包括group分组-聚合、排序、哈希计算、多表连接等其他操作。
[0107]
本发明还提供一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如实施例所述的数据近存储计算方法的步骤。
[0108]
本发明打破了使用硬件进行加速时根据需求的变化而不断更改硬件底层逻辑的模式,理论上可实现任意形式的查询语句或过滤条件。
[0109]
本发明近存储计算加速库api层次化的设计方法如下:
[0110]
本发明引入多块fpga卡的协同工作的方法,并将每块加速卡实现的任务封装为api计算库,多块fpga加速卡组成的api加速簇作为cpu的卸载库,根据数据库的加速需求设置相应的库模块,完成加速任务,提升数据库的整体性能,下面将详细介绍计算库api加速簇的具体设计方法。
[0111]
数据库加速api平台自下而上分为硬件板卡层、设备驱动层、硬件管理层、加速应用解析层。平台内部从上到下完成调用加速操作并完成下层硬件加速卡的调用及管理。用户发出操作请求后,加速应用解析层首先根据任务的类型判断是否需要将任务卸载至硬件,若需要则将任务进行解析并编译为适合fpga硬件执行的命令下发给硬件管理层,同时启动将数据库源数据传输到硬件加速平台的共享内存中;硬件管理层在接受到任务请求后,根据任务类型进行分配和调度,选择要使用的加速卡并启动加速卡执执行加速任务;设备启动层是软件与硬件之间的桥梁,负责将命令、数据等信息传输到硬件并对硬件进行相关的配置,以驱动板卡正常工作;被调用的硬件加速卡接收到任务请求后,从共享内存中读取源数据进行计算,计算完成后通知软件计算完成;计算完成的信息再层层反馈给加速应用解析层,继续判断是直接读取计算结果或启动其他类型计算任务,至此一次数据库操作计算完成,等待或执行下一次计算任务。加速库api平台的结构图如图3所示。
[0112]
数据库加速api平台在本发明提出的方案中起到承上启下的作用,其对上层数据库应用提供数加速库应用程序编程接口,对下层多个加速卡进行任务分配、资源协调与调度以及加速任务的分配。从主机host来看每个api是独立的计算卡,主机控制数据的输入和完成计算后的输出,主机通过统一地址编址的共享内存和板卡间数据传输,来协同各个api操作。
[0113]
本发明将加速库平台分为三个层次,这种层次化的结构将各层进行分装,以实现信息的隔离,方便扩展和应用。下面对几个层级展开详细的描述。
[0114]
应用解析层设计,应用层主要的功能是为上层数据库提供支持多种硬件加速的加速功能的api,如正则、过滤、排序、哈希、计算等操作。如果平台没有相关硬件实现对应的加速功能,则不提供相应的api,当用户有相关需求时,会通知数据库使用原有的cpu方式完成。在系统开始阶段,应用层向硬件管理层申请调用加速功能,如果申请成功,表示硬件加速层支持当前功能的加速,可以进行任务卸载,申请使用成功后,上层可调用对应的数据库加速ip核函数,实现用户需求的数据库模块硬件加速。除了特定的与数据库操作有关的加速任务库,还有一些通用库,比如数据库源数据的读取与传递、计算结果读取等接口供上层调用,已完成完整的计算任务的卸载与实现。
[0115]
应用层的表信息管理以及元组解析主要是对数据库的任务进行重编码,生成硬件可识别可执行的指令码流,主要涉及计算任务解析信息、表结构信息以及控制信息。
[0116]
计算任务指令编码,计算任务即数据库操作语句中具体的用户操作请求,包括读取、解析、过滤、连接、分组、排序、聚合以及正则表达式等。通常情况下,数据库管理软件对用户查询子句进行词法、语法解析后,将运算的过程以“链表+树”的数据结构进行描述,节点包括算术运算节点、比较运算节点和逻辑运算节点。数据结构中三种运算节点的组织如下:
[0117]
1)算术运算(加、减、乘、除)节点,位于树结构的最下层,输入为元组中的列字段、常量或其它算术节点的结果,输出计算结果供上层节点使用;
[0118]
2)比较运算(大小比较等)节点,位于树结构的中间,输入为下层算术运算的结果或sql语句中的常量,输出计算结果供上层逻辑节点使用;
[0119]
3)逻辑运算(与、或)节点,位于树结构的最上层。输入为下一层比较运算的结果,输出为布尔值。根节点的布尔值,用于判断该元组是否满足过滤条件。
[0120]
表结构信息编码,表结构信息描述了表中各字段包含的属性信息,也就是数据库源数据中行数据结构。该数据结构包含比较多的信息,本发明根据实际需求仅提取其中长度和对齐信息编码为元组描述符,其用于对硬件加速器解析部件的控制。
[0121]
控制信息编码,控制信息包括需进行加速任务的数据源文件路径、用户操作的类型、操作条件个数、需要解析字段的列索引,用于硬件加速器核函数参数的设置等。
[0122]
应用层的主要功能就是理解用户的需求,将可使用硬件进行加速的任务进行解析,并将重组后的码流发给硬件管理层以启动相应的硬件加速任务。
[0123]
硬件管理层设计,硬件管理层的主要工作是接收来自应用层的加速任务请求,根据加速任务的类型和数据体量评估硬件加速平台的承载情况,进行资源的调度与协调,合理将任务分配到不同的加速卡中,避免加速卡的空载或过载,完成硬件加速卡的管理、状态监测和任务分配的工作。硬件管理层需要动态维护硬件设备状态信息表,如表1所示。
[0124]
表1硬件加速卡设备状态表
[0125][0126]
此外,硬件管理层还负责管理共享内存的使用,对于多卡同时工作的情况,数据库数据存在共享内存中,通过控制计算卡对共享内存的访问,完成计算数据的输入和结果的输出。
[0127]
设备驱动层设计,设备驱动层的主要功能是驱动加速器接口,控制加速卡正常工作,主要通过pcie或其他总线协议,通过控制总线配置加速卡的寄存器信息,如启动板卡工作、获取板卡信息、读取指令以及写入指令等。
[0128]
面向数据库近存储计算的多加速卡共享内存的网络传输模型
[0129]
为了提高实际数据中心中数据库管理系统的加速效果,本发明提出的方案中,每个加速卡使用专卡专用的方式,每块加速卡根据卡内的逻辑资源设计对应数据库的加速任务,并将计算资源根据加速任务的特点和资源的使用情况,进行资源最大化的设计,每块加速卡完成唯一的计算任务。硬件计算库不限于正则查询、group分组-聚合、排序、哈希、多表连接、计算、过滤和全表扫描等功能。本发明以8块计算卡和数据库表解析、过滤和正则表达式查询为例进行加速库的设计说明。
[0130]
多加速卡共享内存设计,本发明提出的拓扑结构如图1所示,通过cxl异构缓存一致性协议互连,硬件计算卡与ddr通过cxl switch芯片进行数据通信;如果是fpga加速卡,那么主机与其中一块加速卡连接,这块加速卡作为管理及仲裁者,负责转发从主机来的命令和数据,计算设备间遵循cxl异构缓存一致性协议进行互连,保证缓存的一致性和统一内存编址。
[0131]
fgpa加速卡拓扑结构设计,本发明提出的api加速簇的最大特点是由一组加速卡完成全备的数据库加速任务,最大的挑战就是这组加速卡的互联互通方式,不仅决定了任务的串行执行方案同时也限制了加速的优化效果。本发明在充分考虑数据库的工作特性以及数据的流转方式的条件下,提出一种3d-mesh加星状的拓扑结构,本发明称为3d-near拓扑结构,下面将详细介绍这种结构的实现方式。
[0132]
3d-near拓扑结构,本发明提出的拓扑结构如图1所示,立方体的8个节点代表8块加速卡,中间的节点是共享内存。图中,主机与其中一个加速卡连接,这块加速卡a作为“中继站”,负责转发主机侧的加速请求并将加速任务分配给其他加速节点,同时负责将数据库的数据转存到共享内存中。该节点除了转发的功能也会承担一些相对消耗资源较少的加速任务。
节点33

13
→4→
2~3

43
→7→
53
→4→8→
63

73
→4→
8..................
[0142]
表2中给出了3个节点的路由信息,其他节点使用类似的方式即可。在使用中,为了简化逻辑的计算,会将路由表信息在通过通信协议下发给加速卡,加速卡通过解析协议内容获取路由信息,根据路由表信息项下一个节点直接发起转发请求即可。
[0143]
数据库表解析模块,模块体系结构如图10所示,主要功能是将数据库关系表中的每行数据的每一列解析出来,输出包括页号、行号、列号、列起始地址、列长度和列数据等。数据流是1、从配置存储器中分别取出静态列属性个数和动态列属性个数,因为存在用户手动添加/删除列属性的情况,所以取两者之间的小值作为当前行包含的列属性个数n;兼容数据库存储结构,从行控制信息中获取到用户数据data的偏移量,取出用户数据data逐列进行解析;读取控制信息中的空值表示信息,若有空值列,使用空值向量信息,判断如果是空值继续下一列的解析,若不是空列,按照数据库存储结构,解析当前列属性。
[0144]
1、从页头获取行指针,作为初始值传递给行列数据解析模块,生成行数据访存地址;2、行数据采用两个独立的ram存储,分为高地址up部分和低地址down部分,处理数据的宽度是ram_up的数据宽度加上ram_down的数据宽度,滑动窗口的长度根据配置信息可以按照字节、字、双字、变长length等长度滑动,当窗口指针在低字节时,两个行数据ram的访存地址相同,当窗口指针在高字节时,ram_down的访存地址加1,使整体的数据宽度向前滑动了一个ram的数据宽度;3、取到行数据后,根据行的对齐模式,第二次形成访问行数据ram的地址;4、数据访问完成后生成列数据result和下一列的指针tp_next,传递给模块起始位置,循环处理,直到这一行中的所有列解析完成,开始第二行的解析。
[0145]
过滤计算功能模块,微体系结构如图11所示,主要功能是完成将sql语句中的where条件过滤操作,通过软硬件协同设计,设计表达式编译器,将表达式翻译成独立的指令码,指令码结构如图12所示,在芯片配置阶段将指令码流配置到该模块的指令码ram和立即数ram中,行列数据解析或多表连接完成后启动该模块,各模块间流水线化设计,满足条件即可运行启动。
[0146]
正则表达式匹配功能模块,目前使用fpga实现正则表达式的方案中,都是支持固定的正则表达式,逻辑设计好编译后将可执行文件下载至硬件运行,这种方式应用在正则表达式固定不变的场景下可以,但是对于数据库这种需要用户频繁操作更换正则表达式的情况下就非常不合适,每次需要重新设计逻辑重新编译下载,严重影响系统效率和用户体验。所以本发明提出一种可动态配置正则表达式的方案,每次通过寄存器将控制帧在线传递给fpga,约定支持的最大字符数和最大状态数以及正则三要素的信息即可,具体实现过程描述如下:先通过软件将正则表达式转换为基于nfa的(nondeterministic finite automata,非确定性有限状态自动机)状态转移关系,并将相关信息通过编码后发送给fpga,fpga根据相关的信息完成正则的匹配。
[0147]
正则的三要素包括字符(token)、触发条件(trigger)和状态(state),token代表正则表达式要过滤的字符,通过子帧中的这些字符建立字符搜索引擎,只有包含这些字符的表达式才有可能满足正则匹配,否则不匹配;trigger代表字符与跳转状态之间的对应关系,在输入某个字符下,转态会跳转到哪个状态,这部分信息给到fpga后,作为状态转移的条件,驱动有限状态机的正常跳转;state体现了状态之间的跳转,每个状态的跳转不仅仅
取决于前一个状态,还与触发条件有关,这部分的配置信息体现状态间的跳转关系。三者间的关系通过一张表来进行表述,以正则表达式(a|b)*aba*b为例,其关系表如图13所示:
[0148]
图13中,t1代表字符“a”,t2代表字符“b”,字符t1或t2的输入,会触发状态跳转到s0或s2,t1的输入会触发状态跳转到s1,t2的输入会触发状态跳转到s3,因此四个状态都是有效的;而对于某个有扇出的两个状态,到底会进入哪个状态与图中右半部分状态之间的转移图有关,通过上述的表,即可完成正则表达式的匹配功能。
[0149]
由于硬件的特性,不能无限制的支持所有的正则表达式的所有情况,所以目前大部分的方案设计时会做一些限制,会限制输入字符的最大个数、跳转状态的最大个数。而为了发挥fpga的并行性,硬件实现时会并行同时执行多个正则表达式的逻辑,为了尽可能多的支持正则表达式中的token和state,即保留其多样性,会将这个限制放的比较宽比较大,这样做势必会带来资源的浪费,对于大部分正则表达式来说肯定用不到所有的字符和状态,但是硬件在设计时必须按照所有的状态来进行设计以动态支持某一个场景下的所有正则表达式。所以为了避免资源的浪费,本发明提出一种基于“簇”的有效解决方案,每个簇包含一组小数量token和state,逐级的增加,直到某一个簇可以支持到最大的字符数和状态数,但是每一种簇都只有一个,这样就可以大大减少资源的消耗。下图14以四个token和state为一个簇、10个token和state为一个簇以及20个token和state为例进行说明:
[0150]
图14中表示token和state的全连接,在逻辑设计时状态间是全连接的物理状态,但具体到每个正则表达式的实际连接,通过控制帧发送的相关信息进行选择,图中使用黑色实线表示,虚线代表未被选中的连接。
[0151]
从上面的分析可以看出,当正则表达式包含的字符数以及状态很多时,需要维护的控制帧将会是非常庞大的一个表,在fpga中也会消耗很大的资源,在硬件资源固定的情况下,其支持的正则的个数就会受到限制。为了支持更多的正则表达式,需要对设计方案进行优化设计,本发明提出了以下两种优化方式。
[0152]
合并字符,对于关键因素之一的字符,其数量不仅影响逻辑设计时对应的比较器的个数,也直接影响了全连接边数呈指数级的增加。将固定的字符组合或者基本表达式作为一个字符来表示。比如字符串“text”可以为一个字符,“ab”也可以作为一个字符,这样处理后,状态之间的跳转会大大减少。
[0153]
合并“簇”,如前所述,本发明为了最大限度节省资源,每个簇内包含的token和state的数量是不一样的,在匹配不同的正则表达式时可以根据实际进行配置选用不同规模的“簇”来实现正则匹配,当遇到一个比较复杂的正则表达时目前逻辑设计的“簇”的数量无法满足要求时,可以不用重新设计,而是通过合并“簇”的方式进行,通过将复杂的正则表达式分割成一个个小的表达式,每个表达式放到一个簇里面实现,随后将所有的结果串联起来,完成最终的匹配。通过这种方式可以完成大规模的正则匹配,而不需要重新修改逻辑,可大大提高整体的效率。实现过程如下图15所示:
[0154]
虽然结合附图描述了本发明的实施方式,但是专利所有者可以在所附权利要求的范围之内做出各种变形或修改,只要不超过本发明的权利要求所描述的保护范围,都应当在本发明的保护范围之内。

技术特征:
1.一种数据近存储计算方法,其特征在于,包括以下步骤:s1、接收用户发起的数据库操作请求任务;s2、cpu端将请求任务进行解析,选择加速单元并进行卸载,通知加速处理器启动加速任务;s3、硬件加速器接受通知后,从硬件加速器中的存储单元中直接取数传输到计算单元,并根据计算任务链表,调用计算单元中的资源池的模块进行组合,搭建完成从主机端卸载计算任务的加速功能单元;s4、计算单元计算完成后将计算结果放入存储单元指定的地址,以中断的方式或查询方式通知cpu读取计算结果。2.根据权利要求1所述的数据近存储计算方法,其特征在于,所述步骤s2中cpu端将请求任务进行解析具体为:利用资源管理部件根据请求任务进行解析。3.根据权利要求1所述的数据近存储计算方法,其特征在于,所述步骤s4中的计算单元一次计算任务完成,释放资源模块或者传递给其他加速卡计算单元,等待下一次计算任务或者开始其他加速计算单元的计算。4.一种数据近存储计算装置,其特征在于,包括:host端,在用户发起的数据库操作请求任务时,利用cpu端将请求任务进行解析,选择加速单元并进行卸载,通知加速处理器启动加速任务;硬件加速器,在接受通知后,从硬件加速器中的存储单元中直接取数传输到计算单元,并根据计算任务链表,调用计算单元中的资源池的模块进行组合,搭建完成从主机端卸载计算任务的加速功能单元,在计算单元计算完成后将计算结果放入共享存储单元指定的地址,以中断的方式或查询方式通知cpu读取计算结果。5.根据权利要求4所述的数据近存储计算装置,其特征在于,还包括postgresql数据库、postgresql-加速器hook回调插件和postgresql-加速器中间件,所述postgresql-加速器hook回调插件cvd用于通过回调函数将查询请求信息进行转换后通过postgresql-加速器中间件发给硬件加速器进行加速处理,计算完成后postgresql-加速器中间件返回满足过滤条件的元组信息返给回调函数,postgresql数据库继续执行;所述postgresql-加速器中间件包括一到多个工作者线程,从任务队列中取出任务执行,工作者线程根据任务信息将页面数据、元组描述符、过滤条件写入到加速器的存储单元,完成数据拷贝后,向计算单元提交申请,开始数据块的dma写入。6.根据权利要求5所述的数据近存储计算装置,其特征在于,所述加速器hook回调插件的处理流程为:对postgresql数据库的任务进行重编码,生成硬件可识别可执行的指令码流,包括计算任务解析信息、表结构信息以及控制信息;所述计算任务解析信息的编码中,postgresql数据对用户查询子句进行词法、语法解析后,将运算的过程以链表+树的数据结构进行描述,节点包括算术运算节点、比较运算节点和逻辑运算节点,所述算术运算节点位于树结构的最下层,输入为元组中的列字段、常量或其它算术节点的结果,输出计算结果供上层节点使用;所述比较运算节点位于树结构的中间,输入为下层算术运算的结果或sql语句中的常
量,输出计算结果供上层逻辑节点使用;所述逻辑运算节点位于树结构的最上层,输入为下一层比较运算的结果,输出为布尔值,根节点的布尔值,用于判断该元组是否满足过滤条件;所述表结构信息的编码中仅提取其中长度和对齐信息编码为元组描述符,以用于对硬件加速器解析部件的控制;所述控制信息的编码包括需进行加速任务的数据源文件路径、用户操作的类型、操作条件个数、需要解析字段的列索引,用于硬件加速器核函数参数的设置。7.根据权利要求5所述的数据近存储计算装置,其特征在于,所述postgresql-加速器中间件中工作者线程采用将数据分块处理、使用乱序执行实现对数据分块流水处理以及使用多个工作者线程的优化方法。8.根据权利要求4所述的数据近存储计算装置,其特征在于,所述硬件加速器包括控制单元、存储单元和计算单元,所述计算单元为多个,每个计算单元绑定独立的hbm缓存端口,每个计算单元内采用采用硬件流水性能优化方式,包括读取部件、数据表解析部件、过滤部件、正则表达式部件和回写部件;所述读取部件从hbm缓存中读取元组描述符、过滤条件的控制和数据信息,元组描述符用于描述一个表中各个字段的对齐信息与长度信息,过滤条件由sql语句中的where子句重编码转换而来,用于描述过滤计算的参数信息,数据表读取,多通路分时传输,分发给行列解析部件;所述解析部件根据配置模块中的元组描述符与页面数据,解析出页面中元组的位置与长度,元组中列字段的偏移与列长度,将解析的结果送入过滤部件;所述过滤部件根据配置模块中的过滤条件,计算元组是否符合过滤条件,将满足过滤条件的元组在页面中的位置与长度送入结果回写部件,若有正则表达式查询则送入正则表达式部件,计算完成后将结果送入回写部件;所述正则表达式部件根据配置模块中的正则表达式匹配条件,判断元组是否符合匹配条件,将满足条件的元组在页面中的位置与长度信息送入结果回写部件,正则表达式部件在流水线中是可选流水站,如果sql语句中有正则表达式查询则执行正则表达式部件,计算完成后将结果送入回写部件,否则跳过;所述回写部件接收过滤部件或正则表达式部件的计算结果并统计满足条件的元组个数,将数据写回hbm内存中,传回中间件,postgresql-数据库继续执行。9.根据权利要求8所述的数据近存储计算装置,其特征在于,所述读取部件采用多通道设计,所述解析部件采用流水行列数据解析。10.一种存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至3中任一项所述的数据近存储计算方法的步骤。

技术总结
本发明公开了一种数据近存储计算方法、装置和存储介质。计算方法包括:S1、接收用户发起的数据库操作请求任务;S2、CPU端将请求任务进行解析,选择加速单元并进行卸载,通知加速处理器启动加速任务;S3、硬件加速器接受通知后,从硬件加速器中的存储单元中直接取数传输到计算单元,并根据计算任务链表,调用计算单元中的资源池的模块进行组合,搭建完成从主机端卸载计算任务的加速功能单元;S4、计算单元计算完成后将计算结果放入存储单元指定的地址,以中断的方式或查询方式通知CPU读取计算结果。本发明打破了使用硬件进行加速时根据需求的变化而不断更改硬件底层逻辑的模式,理论上可实现任意形式的数据库近存储加速计算。可实现任意形式的数据库近存储加速计算。可实现任意形式的数据库近存储加速计算。


技术研发人员:张闯 杨文婧 唐学斌 李春潮 彭元喜
受保护的技术使用者:中国人民解放军国防科技大学
技术研发日:2023.05.31
技术公布日:2023/8/24
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐