一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于可计算存储架构的任务卸载方法及可计算存储系统

2022-05-18 03:18:19 来源:中国专利 TAG:


1.本发明属于计算机存储领域,更具体地,涉及一种基于可计算存储架构的任务卸载方法及可计算存储系统。


背景技术:

2.随着移动通信技术和物联网技术的发展,人类社会的数据总量以指数形式爆炸增长。在旧摩尔定律失效的情况下,图灵奖获得者jimgray提出了“新摩尔定律”:即每18个月全球新增信息量是计算机有史以来全部信息量的总和。根据idc(互联网络数据中心)的数据,2018年全球的数据总量是33zb,预计2025年将达到175zb。如何存储这些数据,以及如何对数据进行处理已经是当今存储系统面对的挑战。
3.目前的计算机体系结构主要是基于冯
·
诺依曼结构。在该体系结构下,运算系统和存储系统分离,各自独立发展。在冯诺依玛体系结构提出早期,处理器性能较低,数据需要从存储器中搬迁到处理器中进行处理,处理完毕后再通过总线传输回存储器中。但在过去的20多年,处理器性能以每年约55%的速度提升,内存性能的提升速度只有每年约10%左右,经过长期的积累,处理器的计算速度已经远超内存的存取速度,内存成为了高性能系统的一个瓶颈,这就是冯
·
诺依曼结构的“内存墙”问题。
4.针对“内存墙”问题,有研究人员提出将计算任务下发给存储设备,减少数据的搬移,也就是pis(processing in storage),在存储设备内运行一个小型的操作系统对计算任务进行处理。但在现有的任务卸载方法的基本流程如下:主机向ssd(solid state disk或solid state drive)下发计算任务;由内核态对相关结构体进行存储,用户态通过轮询的方式感知有pis任务需要处理后,将相关的结构体从内核态空间拷贝至用户进程的地址空间,并利用用户进程进行处理,生成相应的执行结果;内核态通过轮询的方式获取到计算任务的执行结果后,将该执行结果从用户进程的地址空间拷贝至内核态空间,再返回给主机。该过程存在盘内系统数据拷贝次数过多的问题,下发的计算任务执行效率较低,并且存在cpu资源浪费的问题。


技术实现要素:

5.针对现有技术的缺陷和改进需求,本发明提供了一种基于可计算存储架构的任务卸载方法及可计算存储系统,其目的在于,减少盘内系统的数据拷贝,高效地对pis任务进行下发和回传。
6.为实现上述目的,按照本发明的一个方面,提供了一种基于可计算存储架构的任务卸载方法,可计算存储架构包括主机和ssd;任务卸载方法包括在ssd的盘内系统中执行的初始化步骤和计算步骤;
7.初始化步骤包括:在ssd的盘内系统的内核地址空间中创建一个虚拟的字符设备,并将字符设备占用的内核地址空间映射到用户进程的地址空间;在字符设备中维护命令队列和数据队列;命令队列用于存储来自主机的命令结构体,命令结构体用于描述主机下发
的计算任务,所封装的信息包括任务类型以及执行任务所需的参数;数据队列用于存储主机下发的计算任务的执行结果;
8.计算步骤,包括:
9.(s1)在内核态,接收到主机下发的计算任务后,将描述该计算任务的命令结构体存储到命令队列中;
10.(s2)在用户态,获取到命令结构体在命令队列中的偏移值kernel_cmd_offset以及相应的命令id后,根据偏移值kernel_cmd_offset到命令队列中读取命令结构体,并从中解析出计算任务的任务类型和参数,重新封装为对应的命令并执行,将执行结果存储到数据队列中;
11.(s3)在内核态,获取到命令id、执行结果的长度length和执行结果在数据队列中的偏移值usr_data_offset后,将长度length和偏移值usr_data_offset返回给主机。
12.本发明在ssd的盘内系统的内核地址空间中创建一个虚拟的字符设备,并将该字符设备占用的内核地址空间映射到用户进程的地址空间,由此使得内核态和用户态可以共享该字符设备对应的地址空间,在处理由主机下发的计算任务时,相关的结构体和数据会被存储在该字符设备中,从而在内核态和用户态之间进行切换时,无需进行数据拷贝,有效减少了内核态与用户态的数据交互,提高了任务执行效率。
13.进一步地,步骤(s2)中,在将描述该计算任务的命令结构体存储到命令队列之后,还包括:将命令结构体在命令队列中的偏移值kernel_cmd_offset以及相应的命令id发送给用户态;
14.并且,步骤(s3)中,在将执行结果存储到数据队列之后,还包括:将命令id、执行结果的长度length和执行结果在数据队列中的偏移值usr_data_offset发送给内核态。
15.本发明中,ssd盘内系统的内核态在将命令结构体存储到命令队列之后,会将命令结构体在命令队列中的偏移值kernel_cmd_offset以及相应的命令id发送给用户态,由此能够主动通知用户态有pis任务需要处理;用户态的进程在执行完计算任务之后,也会将命令id、执行结果的长度length和执行结果在数据队列中的偏移值usr_data_offset发送给内核态,由此能够主动通知内核态,计算任务执行完成。相比于传统任务卸载方法中,内核态和用户态之间通过轮询的方式进行通信,本发明中,ssd盘内系统的内核态和用户态之间可以主动地进行通信,使得计算任务能够得到及时地处理,也避免了cpu资源的浪费。
16.进一步地,ssd的盘内系统中,内核态与用户态之间通过netlink通信。
17.netlink是一种支持多播双向异步socket方式的模块化通信机制,可由内核发起,本发明中,ssd盘内系统的内核态与用户态之间通过netlink通信,能够高效地实现内核态与用户态之间双向地、主动地通信,不会造成进程阻塞的问题。
18.进一步地,初始化步骤中,通过mmap机制将字符设备占用的内核地址空间映射到用户进程的地址空间。
19.mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系,本发明通过mmap机制将字符设备占用的内核地址空间映射到用户进程的地址空间,能够有效实现内核态与用户态之间的内存共享。
20.进一步地,命令队列,和数据队列,为环形队列。
21.本发明以环形队列组织命令队列和数据队列,能够减少虚拟字符设备所占用的内存空间。
22.进一步地,本发明提供的基于可计算存储架构的任务卸载方法,还包括:在主机端执行的计算任务下发步骤;
23.计算任务下发步骤包括:将计算任务对应的任务类型和执行任务所需的参数封装为命令结构体后,下发至ssd。
24.进一步地,本发明提供的基于可计算存储架构的任务卸载方法,还包括:在主机端执行的执行结果读取步骤;
25.执行结果读取步骤包括:若ssd返回的执行结果的长度length》0,则在主机端申请与长度length相应大小的存储空间,并根据长度length和偏移值usr_data_offset封装对应的读命令后,下发至ssd。
26.进一步地,本发明提供的基于可计算存储架构的任务卸载方法,还包括在ssd的盘内系统中执行的回传步骤;
27.回传步骤包括:在内核态,接收到主机下发的用于读取计算任务的执行结果的读命令后,从读命令中解析出执行结果的长度length和执行结果在数据队列中的偏移值usr_data_offset,在数据队列中从偏移值为usr_data_offset处开始读取长度为length的数据并返回给主机,以将执行结果存储至主机中已申请的存储空间中。
28.按照本发明的另一个方面,提供了一种可计算存储系统,包括:主机和ssd;
29.ssd的盘内系统包括:初始化模块和计算模块;
30.初始化模块,用于执行上述基于可计算存储架构的任务卸载方法中的初始化步骤;
31.计算模块,用于执行上述基于可计算存储架构的任务卸载方法中的计算步骤。
32.进一步地,主机的操作系统包括:计算任务下发模块和执行结果读取模块;并且,ssd的盘内系统还包括:回传模块;
33.计算任务下发模块,用于执行上述基于可计算存储架构的任务卸载方法中的计算任务下发步骤;
34.执行结果读取模块,用于执行上述基于可计算存储架构的任务卸载方法中的执行结果读取步骤;
35.回传模块,用于执行上述基于可计算存储架构的任务卸载方法的回传步骤。
36.总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
37.(1)本发明在ssd的盘内系统的内核地址空间中创建一个虚拟的字符设备,并将该字符设备占用的内核地址空间映射到用户进程的地址空间,实现了内核态与用户态之间的内存共享,在处理由主机下发的计算任务时,无需在内核态和用户态之间进行数据拷贝,有效减少了内核态与用户态的数据交互,提高了任务执行效率。
38.(2)本发明在ssd的盘内系统中,以队列的形式组织虚拟字符设备所申请的内存空间,主机下发的数据对pis任务进行计算时,可以对多个pis任务进行并行处理。
39.(3)本发明中,ssd盘内系统中的内核态和用户态之间会进行主动通信,由此能够有效避免cpu资源的浪费;在其优选方案中,内核态和用户态之间通过netlink进行通信,由于netlink是一种全双工的异步通信手段,不会造成进程阻塞的问题。
附图说明
40.图1为本发明实施例提供的基于可计算存储架构的任务卸载方法示意图;
41.图2为本发明实施例提供的基于可计算存储架构的任务卸载方法流程图。
具体实施方式
42.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
43.在本发明中,本发明及附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
44.pis(processing in storage),即存储内计算,旨在将计算和存储合二为一,将部分数据密集型应用的计算任务下放给存储设备,利用存储设备内的计算资源进行处理的方式;通过pis,主机端不再从硬盘内读取大量数据,而只需要读取最终执行结果。
45.现有的实现pis的方案中,在任务卸载时,存在盘内系统数据拷贝次数过多的问题,下发的计算任务执行效率较低的问题,为了解决该问题,本发明提供了一种基于可计算存储架构的任务卸载方法及可计算存储系统,其整体思路在于:实现ssd盘内系统中内核态和用户态之间的内存共享,从而有效减少内核态和数据态之间的数据拷贝次数,提高计算任务执行效率;在此基础上,使内核态和用户态之间进行主动通信,避免cpu资源的浪费。
46.本发明所适用的可计算存储架构,包括主机和ssd,其中,ssd既可安装于主机中,也可安装于主机远端,只要保证二者可进行正常通信即可;不失一般性地,在以下实施例中,ssd安装于主机远端,且作为一种可选的实施方式,如图1所示,二者通过nvme协议进行通信,相应地,在主机端和盘内系统端均挂载了相应驱动和nvme设备,驱动中都添加了自定义nvme admin命令的处理逻辑,用于支持nvme命令的下发和处理;盘内系统端运行用户态程序等待主机端下发计算任务,一般地,盘内系统是一个定制的linux操作系统,在linux操作系统的基础上,进行了适当的功能裁剪,其能提供用户可编程性及安全性。
47.基于上述可计算存储架构,在本发明的一个实施例中,提供了一种基于可计算存储架构的任务卸载方法,包括在ssd盘内系统执行的初始化步骤;参阅图1和图2,本实施中,初始化步骤具体包括:
48.在ssd的盘内系统的内核地址空间中创建一个虚拟的字符设备,并将字符设备占用的内核地址空间映射到用户进程的地址空间;在字符设备中维护命令队列和数据队列;命令队列用于存储来自主机的命令结构体,命令结构体用于描述主机下发的计算任务,所封装的信息包括任务类型以及执行任务所需的参数;数据队列用于存储主机下发的计算任务的执行结果;
49.可选地,本实施例中,具体通过mmap机制将字符设备占用的内核地址空间映射到用户进程的地址空间,由此能够有效实现内核态与用户态之间的内存共享;应当说明的,mmap仅为本发明一种可选的实施方式,不应理解为对本发明的唯一限定,在本发明其他的一些实施例中,也可使用/proc等其他方式将内核空间映射到用户进程的地址空间;
50.本实施中,虚拟字符设备中的命令队列和数据队列分别如图1中的cmd和data所
示;可选地,本实施中,命令队列和数据队列均为环形队列;命令队列在内核态和用户态的起始地址分别为kernel_cmd_addr和usr_cmd_addr,数据队列在内核态和用户态的起始地址分别为kernel_data_addr和usr_data_addr,通过内存共享,本实施例中,kernel_cmd_addr和usr_cmd_addr指向相同的物理地址,且kernel_data_addr和usr_data_addr指向相同的物理地址;命令结构体在命令队列中的偏移量为kernel_cmd_offset,命令结构体的存储地址可表示为kernel_cmd_addr kernel_cmd_offset,执行结果在数据队列中的偏移量为usr_data_offset,执行结果的存储地址可表示为usr_data_addr usr_data_offset,kernel_cmd_offset和usr_data_offset的初始值均为0;数据队列的容量和每个队列项的大小分别记为max_offset和bytes_per_offset,命令队列的容量与数据队列的大小相同;
51.为了避免cpu资源浪费,本实施例中,内核态和用户态之间会进行主动地通信,并且如图1所示,作为一种优选的实施方式,本实施例中,内核态和用户态之间通过netlink通信;netlink是一种支持多播双向异步socket方式的模块化通信机制,可由内核发起,本实施例中,ssd盘内系统的内核态与用户态之间通过netlink通信,能够高效地实现内核态与用户态之间双向地、主动地通信,不会造成进程阻塞的问题;由于内核态和用户态之间使用netlink进行通信,本实施例的初始化步骤还包括:
52.在内核态创建netlinksocket,用于与用户态进行通信;
53.在用户态创建netlink socket,进行端口绑定,用于与内核态通信;
54.应当说明的是,netlink仅为本发明可选的实施方式,不应理解为对本发明的唯一限定,在本发明其他的实施例中,还可使用/proc,ebpf协议等实现内核态和用户态之间的通信。
55.本实施例还包括,在主机端执行的计算任务下发步骤;
56.计算任务下发步骤包括:将计算任务对应的任务类型和执行任务所需的参数封装为命令结构体后,下发至ssd;本实施例中,结构体封装完成后,会调用nvme协议中的自定义nvme admin命令,利用ioctl进行下发。
57.本实施例还包括,在ssd的盘内系统执行的计算步骤,包括:
58.(s1)在内核态,接收到主机下发的计算任务后,将描述该计算任务的命令结构体存储到命令队列中;
59.具体地,将结构体数据放置在kernel_cmd_addr kernel_cmd_offset所指向的地址空间中,即可将命令结构体存储到命令队列中;
60.由于本实施例中,内核态与用户态之间通过netlink通信,因此,内核态在将描述该计算任务的命令结构体存储到命令队列中之后,还包括:
61.将命令结构体在命令队列中的偏移值kernel_cmd_offset以及相应的命令id发送给用户态;命令id用于唯一标识命令,本实施例中,由nvme协议自动生成;
62.(s2)在用户态,获取到命令结构体在命令队列中的偏移值kernel_cmd_offset以及相应的命令id后,根据偏移值kernel_cmd_offset到命令队列中读取命令结构体,并从中解析出计算任务的任务类型和参数,重新封装为对应的命令并执行,将执行结果存储到数据队列中;
63.具体地,用户态根据usr_cmd_addr kernel_cmd_offset到地址空间中去读取命令结构体即可;
64.任务执行结束后,执行结果的存储地址为usr_data_addr usr_data_offset;
65.由于本实施例中,内核态与用户态之间通过netlink通信,因此,在将执行结果存储到数据队列之后,还包括:将命令id、执行结果的长度length和执行结果在数据队列中的偏移值usr_data_offset发送给内核态;
66.为了便于后续处理,本实施例中,在将结果的长度length发送给内核态时,会先进行512字节对齐处理;
67.容易理解的是,将执行结果存储到数据队列之后,会对usr_data_offset进行更新,更新后的值为:usr_data_offset=(usr_data_offset 1 length%bytes_per_offset)%max_offset;
68.(s3)在内核态,获取到命令id、执行结果的长度length和执行结果在数据队列中的偏移值usr_data_offset后,将长度length和偏移值usr_data_offset返回给主机;
69.容易理解的是,长度length和偏移值usr_data_offset返回给主机之后,会对kernel_cmd_offset进行更新,更新后的值为:kernel_cmd_offset=(kernel_cmd_offset 1)%max_offset。
70.本实施例还包括:在主机端执行的执行结果读取步骤;
71.执行结果读取步骤包括:若ssd返回的执行结果的长度length》0,则在主机端申请与长度length相应大小的存储空间data_buffer,并根据长度length和偏移值usr_data_offset封装对应的读命令后,下发至ssd;
72.应当说明的是,若ssd返回的执行结果的长度length=0,说明下发的计算任务执行后不产生执行结果,此时整个任务结束。
73.本实施例还包括:ssd的盘内系统中执行的回传步骤;
74.回传步骤包括:在内核态,接收到主机下发的用于读取计算任务的执行结果的读命令后,从读命令中解析出执行结果的长度length和执行结果在数据队列中的偏移值usr_data_offset,在数据队列中从偏移值为usr_data_offset处开始读取长度为length的数据并返回给主机,以将执行结果存储至主机中已申请的存储空间中。
75.总的来说,本实施例在ssd的盘内系统的内核地址空间中创建一个虚拟的字符设备,并将该字符设备占用的内核地址空间映射到用户进程的地址空间,由此使得内核态和用户态可以共享该字符设备对应的地址空间,在处理由主机下发的计算任务时,相关的结构体和数据会被存储在该字符设备中,从而在内核态和用户态之间进行切换时,无需进行数据拷贝,有效减少了内核态与用户态的数据交互,提高了任务执行效率;并且由于内核态与用户态之间通过netlink进行主动通信,有效避免了cpu资源的浪费。
76.以下结合两个任务,即文件查找任务和数据解密为例,对本实施例的技术方案做进一步的解释说明。
77.文件查找任务的卸载过程如下:
78.首先,在主机端,获得文件查找任务对应的任务类型type及任务执行所需的操作,包括文件名、文件查找选项以及查找路径,将这些信息使用结构体进行打包,再调用自定义nvme admin命令,利用ioctl进行下发,在盘内系统端进行解析后,将结构体数据放置在kernel_cmd_addr kernel_cmd_offset所指向的地址空间中;
79.之后内核态使用netlink通信发送命令id(command_id)、kernel_cmd_offset和任
务类型type给用户态,主动通知用户态程序有pis任务需要处理,用户态程序根据type生成对应的子进程进行处理;子进程到usr_cmd_addr kernel_cmd_offset所指向地址处读取命令结构体,并从中解析出文件名、文件查找选项、查找路径,重新封装成一条shell命令后使用popen执行shell命令,并使用fread将结果写入到usr_data_addr usr_data_offset中;
80.用户程序计算结果的长度length,将length进行512字节对齐处理后通过netlink发送command_id、usr_data_offset和length给内核态进行处理,然后更新usr_data_offset=(usr_data_offset 1 length%bytes_per_offset)%max_offset;
81.内核态接收到用户态的数据后,将length和usr_data_offset作为结果返回给主机端,然后更新kernel_cmd_offset=(kernel_cmd_offset 1)%max_offset;
82.主机端接收到length和usr_data_offset后,以length为参数在主机端申请相应大小的空间,然后根据length与usr_data_offset封装下发对应的nvme admin读命令;
83.盘内系统接收到下发的命令后,在内核态根据usr_data_offset从kernel_data_addr usr_data_offset出读取length长度数据返回给主机端,任务结束。
84.数据解密任务的卸载过程如下:
85.主机端得到解密数据对应文件的lba(logic block address)以及长度,封装好自定义的nvme admin命令后下发给盘内,盘内系统端进行解析后,将结构体数据放置在kernel_cmd_addr kernel_cmd_offset所指向的地址空间中;
86.之后内核态使用netlink通信发送命令id(command_id)、kernel_cmd_offset和任务类型type给用户态,主动通知用户态程序有pis任务需要处理,用户态程序根据type生成对应的子进程进行处理;
87.子进程下发nvme读命令,将ssd内部的数据读取到usr_data_addr usr_data_offset处,数据在用户态解密完成后,计算解密数据的长度length,做512字节对齐后,写在新的usr_data_addr usr_data_offset处,通过netlink发送command_id、usr_data_offset和length给内核态进行处理;
88.内核态接收到用户态的数据后,将length和usr_data_offset作为结果返回给主机端,然后更新kernel_cmd_offset=(kernel_cmd_offset 1)%max_offset;
89.主机端接收到length和usr_data_offset后,以length为参数在主机端申请相应大小的空间,然后根据length与usr_data_offset封装对应的nvme admin读命令下发;
90.盘内系统接收到下发的命令后,根据usr_data_offset从kernel_data_addr usr_data_offset出读取length长度数据返回给主机端,任务结束。
91.在本发明的另一个实施例中,提供了一种可计算存储系统,包括:主机和ssd;
92.ssd的盘内系统包括:初始化模块、计算模块和回传模块;主机的操作系统包括:计算任务下发模块和执行结果读取模块;
93.初始化模块,用于执行上述基于可计算存储架构的任务卸载方法中的初始化步骤;
94.计算模块,用于执行上述基于可计算存储架构的任务卸载方法中的计算步骤;
95.计算任务下发模块,用于执行上述基于可计算存储架构的任务卸载方法中的计算任务下发步骤;
96.执行结果读取模块,用于执行上述基于可计算存储架构的任务卸载方法中的执行
结果读取步骤;
97.回传模块,用于执行上述基于可计算存储架构的任务卸载方法的回传步骤;
98.本实施例中,各模块的具体实施方式,可参考上述方法实施例中的描述,在此将不做复述。
99.本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献