一种固态硬盘写大块数据处理方法、装置、设备及介质与流程

文档序号:26793414发布日期:2021-09-29 00:12阅读:131来源:国知局
一种固态硬盘写大块数据处理方法、装置、设备及介质与流程

1.本发明涉及存储技术领域,尤其涉及一种固态硬盘写大块数据处理方法、装置、设备及介质。


背景技术:

2.zns(zoned namespace的简称)基于nvme协议的解决方案,相对与传统的ssd(solid state drive,固态驱动器或称固态硬盘),具有写放大小,成本低的特点。一般zns ssd只支持顺序写,所以zns ssd在进行配置使用之前,需要先获取ssd内部所有的zone的配置信息,然后才能准确的确定各个zone的写指针与状态。例如zns 128kb顺序写一般需要经过拆包、申请写缓存(buff)、dma(直接内存读取单元)数据搬移、写完成等的过程,各个过程之间需要ipc(inter process communication,是指ssd内部模块之间通信的消息体)消息通信。
3.为了便于理解一些数据洗的过程此处对ssd内部的几个模块进行简要说明:dm模块是dispatch manager的简称,主要处理主机下发的请求;lkm模块是linux内核为了扩展其功能所使用的可加载内核模块,主要负责把主机数据写入闪存(nand flash)。
4.目前,zns 128kb顺序写的过程如下:zns ssd固件在接到128km写请求时,首先需要dm模块拆包成32个4kb,每笔4kb向lkm模块发送写请求,lkm模块返回写缓存(buff)地址,dm模块向dma模块发送数据搬移请求,dma模块完成搬移,然后dm模块向lkm模块发送该笔4kb写完成,最后lkm模块释放buff,如此反复执行32次;由此可见现有128kb顺序写过程中需要进行多次写申请并且各个模块间需要反复通信使得写的效率较低,且占用较大带宽,因此现有大块数据写处理亟需改进。


技术实现要素:

5.有鉴于此,有必要针以上技术问题,提供一种固态硬盘写大块数据处理方法、装置、设备及介质。
6.根据本发明的第一方面,提供了一种固态硬盘写大块数据处理方法,所述方法包括:
7.从主机发送的写请求中筛选大块数据写请求;
8.利用dm模块将大块数据写请求对应的待写入大块数据拆分成多笔小块数据并挂载至链表;
9.由dm模块向lkm模块发送写请求,其中,所述写请求内容包括待写入大块数据的lba首地址和小块数据总笔数;
10.由lkm模块接收所述写请求并进行缓存分配以生成若干写请求结果后返回至dm模块,其中,每一请求结果包括写缓存地址,以及写缓存地址起连续的小块数据笔数,且全部请求结果中连续的小块数据笔数之和等于小块数据总笔数;
11.dm模块根据接收到若干请求结果以小块数据为单位从挂载的链表中检索每笔小
块数据的上下文内容并向dma模块发起数据搬移请求;
12.响应于dma模块完成数据搬移,则释放dm模块资源和lkm模块资源。
13.在一些实施例中,所述从主机发送的写请求中筛选大块数据写请求的步骤包括:
14.利用zns固态硬盘固件接收主机下发的写请求,并获取写请求对应的数据大小;
15.响应于写请求对应的数据大小大于等于预设值,则将主机下发的写请求作为大块数据写请求。
16.在一些实施例中,所述利用dm模块将大块数据写请求对应的待写入大块数据拆分成多笔小块数据并挂载至链表的步骤包括:
17.利用dm模块将所述大块数据以4kb为单位拆分成多笔小块数据;
18.申请每笔4kb小块数据的上下文,并挂载至链表上。
19.在一些实施例中,响应于dma模块完成数据搬移,则释放dm模块资源和lkm模块资源的步骤包括:
20.响应于dma从主机搬移某笔小块数据至写缓存,则向dm模块发回搬移完成消息;
21.由dm模块向lkm模块发送写完成消息;
22.响应于lkm接收到写完成消息,则将已完成数据搬移的某笔小块数据对应的lkm的资源释放;
23.dm模块将已完成数据搬移的某笔小块数据对应的资源释放。
24.在一些实施例中,所述dm模块根据接收到若干请求结果以小块数据为单位从挂载的链表中检索每笔小块数据的上下文内容并向dma模块发起数据搬移请求的步骤包括:
25.响应于dm接收到lkm返回某一请求结果,则根据lba首地址和lba首地址起连续的4kb笔数从挂载的链表中检索出lba首地址的上下文,并从链表中删除对应元素;
26.由dm向dma模块发送搬移请求。
27.在一些实施例中,所述的方法还包括:
28.响应于dm模块全部笔数的小块数据的上下文全部释放完成,则向主机返回待写入大块数据写完成。
29.在一些实施例中,所述待写入大块数据的大小为128kb。
30.根据本发明的第二方面,提供了一种固态硬盘写大块数据处理装置,所述装置包括:
31.请求筛选单元,用于从主机发送的写请求中筛选大块数据写请求;
32.拆分单元,用于利用dm模块将大块数据写请求对应的待写入大块数据拆分成多笔小块数据并挂载至链表;
33.写请求发送单元,用于由dm模块向lkm模块发送写请求,其中,所述写请求内容包括待写入大块数据的lba首地址和小块数据总笔数;
34.写缓存分配单元,用于由lkm模块接收所述写请求并进行缓存分配以生成若干写请求结果后返回至dm模块,其中,每一请求结果包括写缓存地址,以及写缓存地址起连续的小块数据笔数,且全部请求结果的连续中小块数据笔数之和等于小块数据总笔数;
35.搬移请求单元,用于dm模块根据接收到若干请求结果以小块数据为单位从挂载的链表中检索每笔小块数据的上下文内容并向dma模块发起数据搬移请求;
36.资源释放单元,用于在dma模块完成数据搬移后,则释放dm模块资源和lkm模块资
源。
37.根据本发明的第三方面,还提供了一种计算机设备,该计算机设备包括:
38.至少一个处理器;以及
39.存储器,存储器存储有可在处理器上运行的计算机程序,处理器执行程序时执行前述的固态硬盘写大块数据处理方法。
40.根据本发明的第四方面,还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时执行前述的固态硬盘写大块数据处理方法。
41.上述一种固态硬盘写大块数据处理方法,通过dm模块将大块数据写请求对应的待写入大块数据拆分成多笔小块数据并挂载至链表,然后由dm模块向lkm模块发送一笔写请求,进而lkm模块进行缓存分配以生成若干写请求结果后返回至dm模块,dm模块根据接收到若干请求结果以小块数据为单位从挂载的链表中检索每笔小块数据的上下文内容并向dma模块发起数据搬移请求,最后当dma模块完成数据搬移则释放dm模块资源和lkm模块资源,相比于传统的写方案不仅将多笔写请求缩减为一笔写请求,而且还将减少lkm模块返回结果的ipc消息数量,明显减少了各模块间的通信次数,优化大块写的效率,有效减小了写延迟,显著提高写带宽。
42.此外,本发明还提供了一种固态硬盘写大块数据处理装置、一种计算机设备和一种计算机可读存储介质,同样能实现上述技术效果,这里不再赘述。
附图说明
43.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
44.图1为本发明一个实施例提供的一种固态硬盘写大块数据处理方法流程示意图;
45.图2为本发明一个实施例提供的一种固态硬盘写大块数据处理装置结构示意图;
46.图3本发明另一个实施例中计算机设备的内部结构图。
具体实施方式
47.为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
48.需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。
49.在一个实施例中,请参照图1所示,本发明提供了一种
50.s100,从主机发送的写请求中筛选大块数据写请求;
51.s200,利用dm模块将大块数据写请求对应的待写入大块数据拆分成多笔小块数据并挂载至链表;
52.s300,由dm模块向lkm模块发送写请求,其中,所述写请求内容包括待写入大块数
据的lba首地址和小块数据总笔数;
53.s400,由lkm模块接收所述写请求并进行缓存分配以生成若干写请求结果后返回至dm模块,其中,每一请求结果包括写缓存地址,以及写缓存地址起连续的小块数据笔数,且全部请求结果中连续的小块数据笔数之和等于小块数据总笔数;
54.需要说明的是,由于lkm模块在分配缓存时会尽量分配连续的缓存给该笔大块写数据,也就是说如果缓存中存在能够连续给大块数据的空间则lkm则会回复一笔请求结果,如果没有足够大的缓存空间,以128kb大块数据拆分成32笔4kb小块的数据为例,lkm模块可能会根据实际空间的大小回复两笔请求结果,其中一个请求结果能够为16笔小块数据提供缓存,另一组为剩余的16比小块数据提供缓存,因而lkm模块的回复请求结果的次数并不是固定可,但相比于每一笔4kb小块数据回复一个请求结果的情形也极大的减少了lkm模块与dm模块间的ipc消息通信次数。
55.s500,dm模块根据接收到若干请求结果以小块数据为单位从挂载的链表中检索每笔小块数据的上下文内容并向dma模块发起数据搬移请求;
56.s600,响应于dma模块完成数据搬移,则释放dm模块资源和lkm模块资源。
57.上述一种固态硬盘写大块数据处理方法,通过dm模块将大块数据写请求对应的待写入大块数据拆分成多笔小块数据并挂载至链表,然后由dm模块向lkm模块发送一笔写请求,进而lkm模块进行缓存分配以生成若干写请求结果后返回至dm模块,dm模块根据接收到若干请求结果以小块数据为单位从挂载的链表中检索每笔小块数据的上下文内容并向dma模块发起数据搬移请求,最后当dma模块完成数据搬移则释放dm模块资源和lkm模块资源,相比于传统的写方案不仅将多笔写请求缩减为一笔写请求,而且还将减少lkm模块返回结果的ipc消息数量,明显减少了各模块间的通信次数,优化大块写的效率,有效减小了写延迟,显著提高写带宽。
58.在又一个实施例中,前述步骤s100包括以下子步骤:
59.s110,利用zns固态硬盘固件接收主机下发的写请求,并获取写请求对应的数据大小;
60.s120,响应于写请求对应的数据大小大于等于预设值,则将主机下发的写请求作为大块数据写请求。
61.在又一个实施例中,前述步骤s200具体包括以下步骤:
62.s210,利用dm模块将所述大块数据以4kb为单位拆分成多笔小块数据;
63.s220,申请每笔4kb小块数据的上下文,并挂载至链表上。
64.在又一个实施例中,前述步骤s600具体包括以下子步骤:
65.s610,响应于dma从主机搬移某笔小块数据至写缓存,则向dm模块发回搬移完成消息;
66.s620,由dm模块向lkm模块发送写完成消息;
67.s630,响应于lkm接收到写完成消息,则将已完成数据搬移的某笔小块数据对应的lkm的资源释放;
68.s640,dm模块将已完成数据搬移的某笔小块数据对应的资源释放。
69.在又一个实施例中,前述步骤s500包括以下子步骤:
70.s510,响应于dm接收到lkm返回某一请求结果,则根据lba首地址和lba首地址起连
续的4kb笔数从挂载的链表中检索出lba首地址的上下文,并从链表中删除对应元素;
71.s520,由dm向dma模块发送搬移请求。
72.在又一个实施例中,在前述实施例的基础上,本发明方法还包括:
73.s700,响应于dm模块全部笔数的小块数据的上下文全部释放完成,则向主机返回待写入大块数据写完成。
74.在又一个实施例中,所述待写入大块数据的大小为128kb。具体来说,当主机发送一笔128kb的大块写请求时,dm模块接收到该请求后会将128kb的数据拆分成32个4kb小块数据,与传统写方式不同的是dm会将拆分的总笔数在一些通信消息传送给lkm模块,而不是每笔4kb小块数据都发一次请求,因此极大的减少了dm模块与lkm模块间的通信次数。
75.在又一个实施例中,为了便于理解本发明的技术方案,下面具体以应用在zns ssd固件当中处理128kb大块写数据为例,因为在像128k这样的大块写的处理过程中,想要提高写带宽,必需尽量的减少跨模块的ipc交互,具体的固态硬盘写大块数据处理方法实施步骤如下:
76.步骤一,.zns ssd固件接收到主机(host)下发下来的128kb写请求;
77.步骤二,固件中的dm模块将128kb请求拆分成32个4kb小块数据处理,并申请每个4kb小块数据的上下文,挂载至链表上;
78.步骤三,dm模块向lkm模块发送ipc写请求,该请求中payload为lba首地址(startlba)和所拆分4kb小块数据笔数即32笔;
79.步骤四,lkm模块收到dm模块的ipc写请求后,根据startlba和4kb的笔数分配写缓存,并把写缓存地址与从该地址起连续的4kb笔数当作返回给dm模块ipc消息的payload;
80.步骤五,dm模块接收到lkm模块返回的ipc消息后,根据startlba和从该地址起连续的4kb小块数据笔数,从上下文链表中检索出该lba的上下文,并从链表中删除该元素,然后发起dma ipc请求;整个过程直到将上下文链表变为空,意味着32笔4kb小块数据都已经被处理;
81.步骤六,dma模块从主机(host)搬移数据到写缓存,然后向dm模块返回ipc消息完成;
82.步骤七,dm模块向lkm模块发送写完成的ipc消息,每笔4kb小块数据发送一次;
83.步骤八,dm模块释放完成已经搬移的4kb小块数据的上下文;
84.步骤九,当dm模块32笔4kb的上下文全部释放完成,向主机(host)返回该128kb写完成。
85.本发明方法通过将32笔4kb写请求缩减为1笔,还缩减了lkm的写buff返回的ipc消息的笔数,优化128kb等大块写效率,减少写延迟,显著提高写带宽。
86.在另一个实施例中,请参照图2所示,本发明还提供了一种固态硬盘写大块数据处理装置80,所述的装置包括:
87.请求筛选单元81,用于从主机发送的写请求中筛选大块数据写请求;
88.拆分单元82,用于利用dm模块将大块数据写请求对应的待写入大块数据拆分成多笔小块数据并挂载至链表;
89.写请求发送单元83,用于由dm模块向lkm模块发送写请求,其中,所述写请求内容包括待写入大块数据的lba首地址和小块数据总笔数;
90.写缓存分配单元84,用于由lkm模块接收所述写请求并进行缓存分配以生成若干写请求结果后返回至dm模块,其中,每一请求结果包括写缓存地址,以及写缓存地址起连续的小块数据笔数,且全部请求结果的连续中小块数据笔数之和等于小块数据总笔数;
91.搬移请求单元85,用于dm模块根据接收到若干请求结果以小块数据为单位从挂载的链表中检索每笔小块数据的上下文内容并向dma模块发起数据搬移请求;
92.资源释放单元86,用于在dma模块完成数据搬移后,则释放dm模块资源和lkm模块资源。
93.需要说明的是,关于固态硬盘写大块数据处理装置的具体限定可以参见上文中对固态硬盘写大块数据处理方法的限定,在此不再赘述。上述固态硬盘写大块数据处理装置中的各个单元可全部或部分通过软件、硬件及其组合来实现。上述各单元可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
94.根据本发明的另一方面,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图请参照图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时实现以上所述的固态硬盘写大块数据处理方法,具体来说,所述方法包括以下步骤:
95.从主机发送的写请求中筛选大块数据写请求;
96.利用dm模块将大块数据写请求对应的待写入大块数据拆分成多笔小块数据并挂载至链表;
97.由dm模块向lkm模块发送写请求,其中,所述写请求内容包括待写入大块数据的lba首地址和小块数据总笔数;
98.由lkm模块接收所述写请求并进行缓存分配以生成若干写请求结果后返回至dm模块,其中,每一请求结果包括写缓存地址,以及写缓存地址起连续的小块数据笔数,且全部请求结果中连续的小块数据笔数之和等于小块数据总笔数;
99.dm模块根据接收到若干请求结果以小块数据为单位从挂载的链表中检索每笔小块数据的上下文内容并向dma模块发起数据搬移请求;
100.响应于dma模块完成数据搬移,则释放dm模块资源和lkm模块资源。
101.在一些实施例中,所述从主机发送的写请求中筛选大块数据写请求的步骤包括:
102.利用zns固态硬盘固件接收主机下发的写请求,并获取写请求对应的数据大小;
103.响应于写请求对应的数据大小大于等于预设值,则将主机下发的写请求作为大块数据写请求。
104.在一些实施例中,所述利用dm模块将大块数据写请求对应的待写入大块数据拆分成多笔小块数据并挂载至链表的步骤包括:
105.利用dm模块将所述大块数据以4kb为单位拆分成多笔小块数据;
106.申请每笔4kb小块数据的上下文,并挂载至链表上。
107.在一些实施例中,响应于dma模块完成数据搬移,则释放dm模块资源和lkm模块资源的步骤包括:
108.响应于dma从主机搬移某笔小块数据至写缓存,则向dm模块发回搬移完成消息;
109.由dm模块向lkm模块发送写完成消息;
110.响应于lkm接收到写完成消息,则将已完成数据搬移的某笔小块数据对应的lkm的资源释放;
111.dm模块将已完成数据搬移的某笔小块数据对应的资源释放。
112.在一些实施例中,所述dm模块根据接收到若干请求结果以小块数据为单位从挂载的链表中检索每笔小块数据的上下文内容并向dma模块发起数据搬移请求的步骤包括:
113.响应于dm接收到lkm返回某一请求结果,则根据lba首地址和lba首地址起连续的4kb笔数从挂载的链表中检索出lba首地址的上下文,并从链表中删除对应元素;
114.由dm向dma模块发送搬移请求。
115.在一些实施例中,所述的方法还包括:
116.响应于dm模块全部笔数的小块数据的上下文全部释放完成,则向主机返回待写入大块数据写完成。
117.在一些实施例中,所述待写入大块数据的大小为128kb。根据本发明的又一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以上所述的固态硬盘写大块数据处理方法,具体来说,包括执行以下步骤:
118.从主机发送的写请求中筛选大块数据写请求;
119.利用dm模块将大块数据写请求对应的待写入大块数据拆分成多笔小块数据并挂载至链表;
120.由dm模块向lkm模块发送写请求,其中,所述写请求内容包括待写入大块数据的lba首地址和小块数据总笔数;
121.由lkm模块接收所述写请求并进行缓存分配以生成若干写请求结果后返回至dm模块,其中,每一请求结果包括写缓存地址,以及写缓存地址起连续的小块数据笔数,且全部请求结果中连续的小块数据笔数之和等于小块数据总笔数;
122.dm模块根据接收到若干请求结果以小块数据为单位从挂载的链表中检索每笔小块数据的上下文内容并向dma模块发起数据搬移请求;
123.响应于dma模块完成数据搬移,则释放dm模块资源和lkm模块资源。
124.在一些实施例中,所述从主机发送的写请求中筛选大块数据写请求的步骤包括:
125.利用zns固态硬盘固件接收主机下发的写请求,并获取写请求对应的数据大小;
126.响应于写请求对应的数据大小大于等于预设值,则将主机下发的写请求作为大块数据写请求。
127.在一些实施例中,所述利用dm模块将大块数据写请求对应的待写入大块数据拆分成多笔小块数据并挂载至链表的步骤包括:
128.利用dm模块将所述大块数据以4kb为单位拆分成多笔小块数据;
129.申请每笔4kb小块数据的上下文,并挂载至链表上。
130.在一些实施例中,响应于dma模块完成数据搬移,则释放dm模块资源和lkm模块资源的步骤包括:
131.响应于dma从主机搬移某笔小块数据至写缓存,则向dm模块发回搬移完成消息;
132.由dm模块向lkm模块发送写完成消息;
133.响应于lkm接收到写完成消息,则将已完成数据搬移的某笔小块数据对应的lkm的资源释放;
134.dm模块将已完成数据搬移的某笔小块数据对应的资源释放。
135.在一些实施例中,所述dm模块根据接收到若干请求结果以小块数据为单位从挂载的链表中检索每笔小块数据的上下文内容并向dma模块发起数据搬移请求的步骤包括:
136.响应于dm接收到lkm返回某一请求结果,则根据lba首地址和lba首地址起连续的4kb笔数从挂载的链表中检索出lba首地址的上下文,并从链表中删除对应元素;
137.由dm向dma模块发送搬移请求。
138.在一些实施例中,所述的方法还包括:
139.响应于dm模块全部笔数的小块数据的上下文全部释放完成,则向主机返回待写入大块数据写完成。
140.在一些实施例中,所述待写入大块数据的大小为128kb。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
141.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
142.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1