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

数据处理方法及装置与流程

2021-10-29 22:42:00 来源:中国专利 TAG:数据处理 说明书 例数 实施 计算机


1.本说明书实施例涉及数据处理技术领域,特别涉及一种数据处理方法。本说明书一个或者多个实施例同时涉及一种数据处理装置,一种数据处理系统,一种计算设备,一种计算机可读存储介质以及一种计算机程序。


背景技术:

2.近年来随着存储硬件技术的不断发展,硬盘的性能已经大幅提升,从最初的hdd(hard disk drive,硬盘驱动器)机械盘到基于sata(serial ata,串口硬盘)接口的ssd(solid state disk,固态硬盘)固态硬盘,再到基于pcie(pci

express)接口的nvme ssd硬盘,裸盘最高可以提供*(百)万级iops(input/output operations per second,每秒的输入输出量)以及gb级别的吞吐性能。
3.目前,主流的单机文件系统(ext4)以inode(索引节点)为中心设计i/o流程,这种设计模式对cpu比较友好,但是对存储设备不友好,例如,多个进程并发对同一个文件读写操作,文件系统会对文件的inode进行互斥访问限制,导致i/o串行化。而目前nvme协议规定每个硬件设备可以支持64k个硬件队列,所以当前的文件系统架构就无法利用多进程的并发能力,导致无法发挥高性能存储设备的吞吐能力。


技术实现要素:

4.有鉴于此,本说明书施例提供了数据处理技术领域,特别涉及一种数据处理方法。本说明书一个或者多个实施例同时涉及一种数据处理装置,一种数据处理系统,一种计算设备,一种计算机可读存储介质以及一种计算机程序,以解决现有技术中存在的技术缺陷。
5.根据本说明书实施例的第一方面,提供了一种数据处理方法,包括:
6.确定多个进程中每个进程对应的文件句柄,并基于所述文件句柄下发文件的多个数据处理请求,其中,每个数据处理请求中均携带有数据处理类型以及针对所述文件进行数据处理的数据区间;
7.基于所述数据处理类型以及所述数据区间从所述多个数据处理请求中确定至少两个目标数据处理请求;
8.将所述至少两个目标数据处理请求发送至队列适配装置,通过所述队列适配装置对所述目标数据处理请求进行并行处理。
9.根据本说明书实施例的第二方面,提供了一种数据处理装置,包括:
10.请求接收模块,被配置为确定多个进程中每个进程对应的文件句柄,并基于所述文件句柄下发文件的多个数据处理请求,其中,每个数据处理请求中均携带有数据处理类型以及针对所述文件进行数据处理的数据区间;
11.请求确定模块,被配置为基于所述数据处理类型以及所述数据区间从所述多个数据处理请求中确定至少两个目标数据处理请求;
12.请求处理模块,被配置为将所述至少两个目标数据处理请求发送至队列适配装
置,通过所述队列适配装置对所述目标数据处理请求进行并行处理。
13.根据本说明书实施例的第三方面,提供了一种数据处理系统,包括文件并发控制装置、队列适配装置,其中,
14.所述文件并发控制装置,被配置为确定多个进程中每个进程对应的文件句柄,并基于所述文件句柄下发文件的多个数据处理请求,其中,每个数据处理请求中均携带有数据处理类型以及针对所述文件进行数据处理的数据区间,基于所述数据处理类型以及所述数据区间从所述多个数据处理请求中确定至少两个目标数据处理请求,将所述至少两个目标数据处理请求发送至队列适配装置;
15.所述队列适配装置,被配置为接收所述文件并发装置发送的所述至少两个目标数据处理请求,对所述目标数据处理请求进行并行处理。
16.根据本说明书实施例的第四方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据处理方法的步骤。
17.根据本说明书实施例的第五方面,提供了一种计算设备,包括:
18.存储器和处理器;
19.所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据处理方法的步骤。
20.根据本说明书实施例的第六方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据处理方法的步骤。
21.本说明书一个实施例实现了一种数据处理方法及装置,其中,所述数据处理方法包括确定多个进程中每个进程对应的文件句柄,并基于所述文件句柄下发文件的多个数据处理请求,其中,每个数据处理请求中均携带有数据处理类型以及针对所述文件进行数据处理的数据区间;基于所述数据处理类型以及所述数据区间从所述多个数据处理请求中确定至少两个目标数据处理请求;将所述至少两个目标数据处理请求发送至队列适配装置,通过所述队列适配装置对所述目标数据处理请求进行并行处理。具体的,所述数据处理方法以进程的文件句柄为中心来处理数据处理请求,将对同一个文件的数据处理请求转换为基于文件句柄的并行数据处理请求,充分发挥硬件多队列并发能力,大幅提升了文件系统的吞吐性能。
附图说明
22.图1示出了ext4文件系统以inode为中心设计i/o流程,实现对文件读写操作的示意图;
23.图2是本说明书一个实施例提供的一种数据处理方法的流程图;
24.图3是本说明书一个实施例提供的一种数据处理方法中句柄区间树的示意图;
25.图4是本说明书一个实施例提供的一种数据处理方法的处理过程流程图;
26.图5是本说明书一个实施例提供的一种数据处理装置的结构示意图;
27.图6是本说明书一个实施例提供的一种数据处理系统的结构示意图;
28.图7是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
29.在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
30.在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
31.应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
32.首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
33.sata:serial advanced technology attachment,是一种电脑总线,负责主板和大容量存储设备(如硬盘及光盘驱动器)之间的数据传输。
34.nvme:non

volatile memory express,非易失性内存主机控制器接口规范。
35.round robin:轮转。
36.i/o请求:输入输出请求。
37.fd:文件句柄,在文件i/o中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄,该文件句柄对于打开的文件是唯一的识别依据。
38.lba:logical block address,逻辑区块地址,是描述计算机存储设备上数据所在区块的通用机制,一般用在像硬盘这样的辅助记忆设备。
39.glib库:是linux平台下最常用的c语言函数库,它具有很好的可移植性和实用性。
40.近年来随着存储硬件技术的不断发展,硬盘的性能已经大幅提升,从最初的hdd机械盘到基于sata接口的ssd固态硬盘,再到基于pcie接口的nvme ssd硬盘,裸盘最高可以提供*(百)万级iops以及gb级别的吞吐性能。目前,主流的单机文件系统(ext4)基于通用块设备层构建元数据层,其中,通用块设备层是独立于ext4的软件层,主要主要负责对上层呈现一个标准的块设备语义(如lba、length),下层对接各种硬件磁盘设备驱动,比如hdd,nvme ssd等;元数据层不是一个独立软件层,属于ext4文件系统的软件栈,即背景技术中的inode管理逻辑,因此,之前的inode管理逻辑(多个进程并发对同一个文件读写操作,文件系统会对文件的inode进行互斥访问限制,导致i/o串行化)加上通用块设备层限制了nvme ssd的性能,即由于元数据层和通用块设备层的存在,导致无法发挥出底层的硬件吞吐性能,主要原因如下:
41.1、文件系统的i/o路径不感知底层的硬件队列资源,无法充分发挥多队列的并发优势;
42.2、文件系统以inode为中心设计i/o流程,这种设计模式对cpu比较友好,但是对存
储设备不友好,例如,多个进程并发对同一个文件读写操作,文件系统会对文件的i node进行互斥访问限制,导致i/o串行化。目前nvme协议规定每个硬件设备可以支持64k个硬件队列,所以当前的文件系统架构无法利用多进程的并发能力,发挥存储设备的吞吐性能。
43.参见图1,图1示出了ext4文件系统以inode为中心设计i/o流程,实现对文件读写操作的示意图。
44.图1中包括主机和nvme ssd控制器,其中,主机中包括进程、ext4文件系统、通用块设备层以及nvme设备驱动。
45.以进程包括进程1、进程2、进程3和进程4为例。
46.具体实施时,主机的进程1、进程2、进程3和进程4在接收到客户端针对同一文件的读写请求的情况下,通过进程1、进程2、进程3和进程4将该读写请求下发至ext4文件系统;
47.ext4文件系统通过inode锁对进程1、进程2、进程3和进程4下发的该读写请求进行串行化处理,然后将串行化处理后的该读写请求发送至通用块设备层;
48.通用块设备层将接收到的该读写请求转换成针对硬件磁盘的读写指令,并下发至nvme设备驱动;
49.nvme设备驱动响应于通用块设备层下发的该硬件磁盘的读写指令,为该硬件磁盘的读写指令分配对应的硬件队列,通过硬件队列下发至nvme ssd控制器,nvme ssd控制器对通过硬件队列接收的该硬件磁盘的读写指令进行处理,完成针对文件的数据读写。
50.上述方案通过多个进程并发对同一个文件读写操作,文件系统会对文件的inode进行互斥访问限制,导致i/o串行化。目前nvme协议规定每个硬件设备可以支持64k个硬件队列,所以当前的文件系统架构无法利用多进程的并发能力,发挥存储设备的吞吐性能。
51.基于此,在本说明书中,提供了一种数据处理方法。本说明书一个或者多个实施例同时涉及一种数据处理装置,一种数据处理系统,一种计算设备,一种计算机可读存储介质以及一种计算机程序,在下面的实施例中逐一进行详细说明。
52.参见图2,图2示出了根据本说明书一个实施例提供的一种数据处理方法的流程图,具体包括以下步骤。
53.步骤202:确定多个进程中每个进程对应的文件句柄,并基于所述文件句柄下发文件的多个数据处理请求。
54.其中,每个数据处理请求中均携带有数据处理类型以及针对所述文件进行数据处理的数据区间。数据处理请求可以理解为数据读取请求或者是数据写入请求等。
55.实际应用中,数据处理类型包括但不限于数据写入类型、数据读取类型、数据修改类型、数据查找类型等等。数据区间可以理解为针对文件进行写入、读取、修改、删除等数据处理的文件区域。
56.此外,文件的文件句柄与文件存在对应关系。实际的文件操作过程中,文件系统会通过glib库提供给进程一些文件操作接口,例如open(打开)接口,read(读取)接口,write(写入)接口,close(关闭)接口等,当进程基于文件请求需要访问文件时,进程主动调用open接口打开文件系统中的文件,文件系统会为进程返回一个针对该文件的文件句柄,该文件句柄对于打开的文件是唯一的标识一句;然后调用read/write接口操作该文件。而具体的文件请求可能来自用户向进程发送的命令(通过ipc通道)或者是进程自身发起的文件请求。
57.具体的,所述确定多个进程中每个进程对应的文件句柄之前,还包括:
58.基于多个进程下发的针对同一文件的文件操作请求打开所述文件,并为所述多个进程中的每个进程分配与所述文件对应的文件句柄。
59.其中,多个进程包括两个或两个以上进程。文件可以理解为任意类型、包含任意数据的文件,例如.doc格式的学生信息管理文件、.txt格式的员工信息管理文件等等。
60.实际应用中,基于多个进程下发的针对同一文件的文件操作请求打开所述文件,并为所述多个进程中的每个进程分配与所述文件对应的文件句柄,可以理解为基于多个进程下发的针对同一文件的读/写操作请求(i/o请求)打开该文件,并根据进程的进程数量,为每个进程分配一个与该文件对应的文件句柄。
61.例如存在4个进程,那么可以基于这4个进程下发的针对同一文件的文件的i/o请求,打开文件,并且分别为这4个进程分配一个与该文件对应的文件句柄。
62.本说明书实施例中,进程在下发针对同一个文件的数据处理请求之前,会基于该数据处理请求打开该文件,获得与该文件对应的文件句柄,基于该文件句柄实现对该文件的数据处理请求的后续处理,将对同一inode的串行数据处理请求转换成基于文件句柄的并行数据处理请求,大幅提升了文件系统的吞吐性能。
63.步骤204:基于所述数据处理类型以及所述数据区间从所述多个数据处理请求中确定至少两个目标数据处理请求。
64.其中,所述数据处理类型包括数据写入类型和数据读取类型;
65.相应地,所述基于所述数据处理类型以及所述数据区间从所述多个数据处理请求中确定目标数据处理请求,包括:
66.将所述多个数据处理请求中数据处理类型为所述数据写入类型的数据处理请求,确定为第一数据处理请求;
67.将所述多个数据处理请求中数据处理类型为所述数据读取类型的数据处理请求,确定为第二数据处理请求;
68.基于所述第一数据处理请求和所述第二数据处理请求确定至少两个目标数据处理请求。
69.其中,数据写入类型可以理解为向文件中写入数据的类型,数据读取类型可以理解为从文件中读取数据的类型。目标数据处理请求可以理解为在具体实施时,不存在互斥的数据处理请求;具体的,该目标数据处理请求中包括针对同一文件的同一数据区域进行读和写的目标数据处理请求。
70.具体的,在数据处理类型包括数据写入类型和数据读取类型的情况下,将多个数据处理请求中数据处理类型为数据写入类型的数据处理请求,作为第一数据处理请求;以及将多个数据处理请求中数据处理类型为数据读取类型的数据处理请求,作为第二数据处理请求。
71.然后,基于从第一数据处理请求和第二数据处理请求中,确定至少两个目标数据处理请求。具体的,确定至少两个目标数据处理请求的目的是为了可以实现后续的并行处理。
72.本说明书实施例中,在数据处理类型包括数据写入类型和数据读取类型的情况下,可以基于上述数据处理类型对多个数据处理请求进行类别划分,后续可以从类别划分
后的数据处理请求中快速、且准确的获取到可以实现并行处理的目标数据处理请求。
73.具体实施时,基于分类后的数据处理请求确定目标数据处理请求的方式如下所述:
74.所述基于所述第一数据处理请求和所述第二数据处理请求确定至少两个目标数据处理请求,包括:
75.确定所述第一数据处理请求对应的数据区间,以及所述第二数据处理请求对应的数据区间;
76.基于所述第一数据处理请求对应的数据区间和所述第二数据处理请求对应的数据区间,确定所述至少两个目标数据处理请求。
77.其中,至少两个目标数据处理请求包括第一数据处理请求和/或第二数据处理请求。
78.具体的,按照数据处理类型将多个数据处理请求分类为第一数据处理请求和第二数据处理请求后;获取每个第一数据处理请求对应的数据区间,以及每个第二数据处理请求对应的数据区间;后续可以基于每个数据处理请求对应的数据区间,从第一数据处理请求和第二数据处理请求中获取到至少两个目标数据处理请求。
79.举例说明,若第一数据处理请求为请求a、请求aa,第二数据处理请求为请求b、请求bb为例;则请求a对应的数据区间为0

3,请求aa对应的数据区间为4

5,请求b对应的数据区间为2

3,请求bb对应的数据区间为6

8;其中,0

3、4

5、2

3以及6

8可以理解为一个文件中存储的数据的行数或者是一个文件中存储数据的扇区等。
80.那么在获得上述第一数据处理请求和第二数据处理请求中每个数据处理请求对应的数据区间后,后续可以基于每个数据处理请求对应的数据区间,确定哪些数据处理请求是互斥的,哪些是可以并行执行的,然后将可以并行执行的数据处理请求作为目标数据处理请求进行后续的并行、高效处理。
81.具体实施时,所述基于所述第一数据处理请求对应的数据区间和所述第二数据处理请求对应的数据区间,确定所述至少两个目标数据处理请求,包括:
82.将数据区间不存在交叉的第一数据处理请求和第二数据处理请求,作为第一初始数据处理请求;
83.将数据区间存在交叉的第一数据处理请求或第二数据处理请求,作为第二初始数据处理请求;
84.将所述第一数据处理请求中数据区间不存在交叉的第一数据处理请求,作为第三初始数据处理请求;
85.将所述第一数据处理请求中数据区间存在交叉的一个第一数据处理请求,作为第四初始数据处理请求;
86.其中,所述至少两个目标数据处理请求包括所述第一初始数据处理请求、第二初始数据处理请求、第三初始数据处理请求和/或所述第四初始数据处理请求。
87.具体的,数据区间不存在交叉的第一数据处理请求和第二数据处理请求,可以理解为数据处理类型为数据写入类型的第一数据处理请求的数据区间,和数据处理类型为数据读取类型的第二数据处理请求的数据区间不存在交叉;即数据的读取和数据的写入不是针对同一个数据区间的数据处理请求,将该数据处理请求定义为第一初始数据处理请求。
实际应用中,第一初始数据处理请求可以在后续进行并行处理。
88.数据区间存在交叉的第一数据处理请求和第二数据处理请求,可以理解为数据处理类型为数据写入类型的第一数据处理请求的数据区间,和数据处理类型为数据读取类型的第二数据处理请求的数据区间存在交叉;即数据的读取和数据的写入是针对同一个数据区间的数据处理请求,或者至少有针对同一数据区间的交叉的数据处理请求,此时,则将数据区间存在交叉的第一数据处理请求或者第二数据处理请求定义为第二初始数据处理请求。实际应用中,在进行后续处理时,每次仅针对第一数据处理请求或者第二数据处理请求进行后续处理,将另外的数据处理请求进行阻塞处理,以避免数据的读取和写入混乱。
89.数据区间不存在交叉的第一数据处理请求,可以理解为数据处理类型为数据写入类型的第一数据处理请求的数据区间不存在交叉;即数据的写入不是针对同一个数据区间的数据处理请求,将该数据处理请求定义为第三初始数据处理请求。实际应用中,第三初始数据处理请求可以在后续进行并行处理。
90.数据区间存在交叉的第一数据处理请求,可以理解为数据处理类型为数据写入类型的第一数据处理请求的数据区间存在交叉;即数据的写入是针对同一个数据区间的数据处理请求,或者至少有针对同一数据区间的交叉区间进行数据写入的数据处理请求,将存在数据区间交叉的某个第一数据处理请求定义为第四初始数据处理请求。实际应用中,在进行后续处理时,每次仅针对存在数据区间交叉的某个第一数据处理请求进行后续处理,将另外的第一数据处理请求进行阻塞处理,以避免数据的写入混乱。
91.实际应用中,若多个数据处理请求均为数据读取类型的情况下,则该多个数据处理请求均可以进行并行处理;若多个数据处理请求均为数据写入类型的情况下,则需要从数据区间存在交叉的数据处理请求中选择一个作为本次的数据处理,其他的阻塞等待;若多个数据处理请求中既包括数据读取类型的数据处理请求,又包括数据写入类型的数据处理请求的情况下,则可以按照上述方式,将可以在后续进行并行处理的目标数据处理请求获取到,实现后续对目标数据处理请求的高效、并行处理。
92.沿用上例,仍以请求a的数据区间为0

3,请求aa的数据区间为4

5,请求b的数据区间为2

3,请求bb的数据区间为6

8为例。
93.根据上述的数据区间可知,第一数据处理请求的请求a和第二数据处理请求的请求b的数据区间存在交叉,即数据区间2

3交叉,而第一数据处理请求的请求aa和第二数据处理请求的请求bb的数据区间不与其他数据区间存在交叉,那么则可以认为第一数据处理请求的请求aa和第二数据处理请求的请求bb为第一初始数据处理请求。
94.而在第一数据处理请求的请求a和第二数据处理请求的请求b存在数据区间交叉的情况下,可以在两者中间任选其一作为第二初始数据处理请求。
95.此外,还要判断第一数据处理请求中是否存在数据区间交叉的第一数据处理请求。
96.例如第一数据处理请求的第一数据处理请求为请求b、请求bb、请求bbb;其中,请求b对应的数据区间为0

3,请求bb对应的数据区间为4

5,请求bbb对应的数据区间为5

6。
97.此种情况下,可以确定第一数据处理请求的请求bb和请求bbb的数据区间存在交叉,而第一数据处理请求的请求b的数据区域不与其他两个请求的数据区域存在交叉。那么则将第一数据处理请求的请求b作为第三初始数据处理请求,将第一数据处理请求的请求
bb或者请求bbb作为第四初始数据处理请求。
98.最后将通过数据区间选取的第一初始数据处理请求、第二初始数据处理请求、第三初始数据处理请求以及第四初始数据处理请求作为目标数据处理请求,即后续可以并行处理的数据处理请求。
99.本说明书实施例中,可以根据每个数据处理请求对应的数据区间,将数据读取类型和数据写入类型中,读写数据时相互排斥的数据处理请求进行阻塞,以及将数据写入类型中写数据相互排斥的数据处理请求进行阻塞,避免造成文件读写数据的混乱;同时获取其他非互斥的数据处理请求,使得这些目标数据处理请求后续可以进行并行处理。
100.步骤206:将所述至少两个目标数据处理请求发送至队列适配装置,通过所述队列适配装置对所述目标数据处理请求进行并行处理。
101.具体的,所述将所述至少两个目标数据处理请求发送至队列适配装置,通过所述队列适配装置对所述目标数据处理请求进行并行处理,包括:
102.将所述至少两个目标数据处理请求发送至队列适配装置,通过所述队列适配装置将所述目标数据处理请求发送至对应的硬件队列,完成对所述目标数据处理请求的并行处理。
103.实际应用中,队列适配装置包括句柄队列适配器、硬件设备驱动器以及硬件磁盘控制器;其中,句柄队列适配器提供一个通用的硬件队列接入适配层,对接各种硬件存储设备队列,例如,基于pc i e的nvme ssd队列。同时,负责调度、管理硬件队列资源,对接上层的基于文件句柄的i/o请求。句柄队列适配器的第一个作用是将文件系统层接收的进程下发的基于文件句柄的i/o请求,通过硬件设备驱动器发送到具体的硬件队列中;第二个作用是对接各种硬件队列,提供一个统一抽象的基于文件句柄的硬件队列操作接口给上层的文件系统层,实现基于文件句柄的i/o请求可以通过其对应的基于文件句柄的硬件队列进行后续的并行处理。硬件设备驱动器用于将基于文件句柄的i/o请求转换成具体的针对硬件磁盘的读写请求,后续通过对应的基于文件句柄的硬件队列发送至硬件磁盘控制器。硬件磁盘控制器基于通过硬件队列接收到的针对硬件磁盘的读写请求进行数据处理。
104.此外,硬件资源(即硬件队列的数量)是预先分配好的,队列适配装置只要负责动态的将每个目标数据处理请求调度到各个硬件队列进行并行处理即可。
105.本说明书实施例中,将选取的至少两个目标数据处理请求发送至队列适配装置之后,可以通过队列适配装置中的句柄队列适配器、硬件设备驱动器以及硬件磁盘控制器等为每个目标数据处理请求匹配对应的硬件队列,后续通过匹配的硬件队列完成对目标数据处理请求的并行处理,以提升整体的数据处理性能。
106.本说明书另一实施例中,所述基于所述数据处理类型以及所述数据区间从所述多个数据处理请求中确定至少两个目标数据处理请求之后,还包括:
107.确定下发所述目标数据处理请求的进程的文件句柄,以及确定所述目标数据处理请求对应的数据区间;
108.基于所述目标数据处理请求对应的数据区间,确定下发所述目标数据处理请求的进程的文件句柄的读写区间;
109.获取所述文件对应的句柄区间树,确定所述句柄区间树中每个文件句柄当前的读写区间;
110.基于下发所述目标数据处理请求的进程的文件句柄的读写区间,与所述句柄区间树中对应的文件句柄的当前读写区间的关联关系,从所述目标数据处理请求中确定阻塞数据处理请求。
111.具体的,主机的内存中会预先存储每个文件的句柄区间树,每个句柄区间树由多个文件句柄组成,而每个文件句柄对应当前的读写区间。其中,每个读写区间表示当前写入或者读取文件的数据区域,可以理解为上述实施例的数据区间。区别在于,上述的数据区间为待向文件进行数据读取或者写入的区间,而这里的读写区间为当前向文件进行数据读取或者写入的区间。
112.实际应用中,若本次下发目标数据处理请求的文件句柄的数据区间,与句柄区间树中对应的文件句柄的当前读写区间存在冲突的情况下,则阻塞存在冲突的目标数据处理请求,以保证当前数据处理请求的安全处理。
113.具体的,每个目标数据处理请求均由进程下发,而每个进程对应一个文件句柄,因此每个目标数据处理请求存在对应的文件句柄,那么该目标数据处理请求对应的数据区间可以看做对应的文件句柄的读写区间;将每个文件句柄的读写区间与区间树中每个文件句柄的当前读写区间进行比对,当两者存在冲突的情况下,将存在冲突的目标数据处理请求作为阻塞数据处理请求,在后续处理时进行阻塞处理。其中,文件句柄的读写区间是否与区间树中每个文件句柄的当前读写区间,是否存在冲突的判断方式,可以通过上述实施例确定目标数据处理请求的方式进行确定,在此不再赘述。
114.具体实施时,当目标数据处理请求为数据读取类型的数据处理请求,并且句柄区间树中的文件句柄的当前的读写区间也为文件的数据读取区间时,即使读写区间存在冲突(交叉)也不会对目标数据处理请求进行阻塞;而若目标数据处理请求为数据写入类型的数据处理请求,并且句柄区间树中的文件句柄的当前的读写区间也为文件的数据写入区间时,则阻塞该目标数据处理请求,将该目标数据处理请求确定为阻塞数据处理请求。具体实现方式如下所述:
115.具体的,所述基于下发所述目标数据处理请求的文件句柄的读写区间,与所述句柄区间树中对应的文件句柄的当前读写区间的关联关系,从所述目标数据处理请求中确定阻塞数据处理请求,包括:
116.在下发所述目标数据处理请求的进程的文件句柄的读写区间,与所述句柄区间树中对应的文件句柄的读写区间存在交叉的情况下,将所述目标数据处理请求确定为阻塞数据处理请求。例如,目标数据处理请求为数据写入类型,句柄区间树中对应的文件句柄也为数据写入类型,那么当这两个读写区间存在交叉,则将目标数据处理请求作为阻塞数据处理请求,进行阻塞处理;另外,当目标数据处理请求为数据写入类型,句柄区间树中对应的文件句柄为数据读取类型,那么当着两个读写区间存在交叉,也会将目标数据处理请求作为阻塞数据处理请求,进行阻塞处理;而当目标数据处理请求为数据读取类型,句柄区间树中对应的文件句柄为数据写入类型,那么当着两个读写区间存在交叉,也会将目标数据处理请求作为阻塞数据处理请求,进行阻塞处理。
117.实际应用中,目标数据处理请求与句柄区间树中对应的文件句柄均为读操作时不会存在互斥的情况,而在目标数据处理请求为写操作的情况下,则会将按照上述方式对其进行读写区间比对,对互斥的目标数据处理请求进行阻塞处理,避免造成数据覆盖或丢失。
118.参见图3,图3示出了本说明书一个实施例提供的一种数据处理方法中句柄区间树的示意图。
119.图3为一个文件在主机内存中维护的某个文件的句柄区间树,用于管理文件的各个文件句柄的i/o读写区间。通过该句柄区间树,可以高效的判断文件句柄的i/o冲突,其中,叶子节点表示可以并发的实际读写区间。如果一个文件句柄的i/o请求与该文件的句柄区间树的当前读写区间产生冲突,则阻塞i/o下发,等冲突解决后下次下发。
120.图3中的第一个节点“root”表示整个文件的长度区间[0,end],节点“fd1、fd2、fd3、fd4”分别为4个文件句柄节点,文件句柄节点“fd1”下面的[0,5]表示读写区间,“ro”表示只读,即该文件句柄节点当前处理的为数据读取操作;文件句柄节点“fd2”下面的[6,8]表示读写区间,“wr”表示写入,即该文件句柄节点当前处理的为数据写入;文件句柄节点“fd3”下面的[0,3]表示读写区间,“ro”表示只读,即该文件句柄节点当前处理的为数据读取操作;文件句柄节点“fd4”下面的[9,end]表示读写区间,“ro”表示只读,即该文件句柄节点当前处理的为数据读取操作;而没有标号的节点可以理解为空节点,每个空节点下面的数据区间可以表示为每个空节点的未读写区间。
[0121]
具体实施时,文件系统的文本并发控制器会将并行处理的句柄请求(目标数据处理请求)依次插入到句柄区间树中,通过句柄区间树判断后续的句柄请求是否可以并行处理。
[0122]
实际应用中,为了保证数据处理的完整性,在对目标数据处理请求进行并行处理之后,还要对之前阻塞的多个数据处理请求中,除目标数据处理请求之外的数据处理请求进行并行处理。
[0123]
同时,对目标数据处理请求中非阻塞的数据处理请求完成之后,也需要对阻塞数据处理请求进行并行数据处理,以保证数据处理的完整性,具体实现方式如下所述:
[0124]
所述将所述目标数据处理请求确定为阻塞数据处理请求之后,还包括:
[0125]
在所述目标数据处理请求中除所述阻塞数据处理请求之外的其他目标数据处理请求并行处理完成后,对所述阻塞数据处理请求进行并行数据处理。
[0126]
本说明书另一实施例中,所述通过所述队列适配装置将所述目标数据处理请求发送至对应的硬件队列,包括:
[0127]
确定所述目标数据处理请求的数量以及硬件队列的数量;
[0128]
判断所述目标数据处理请求的数量是否小于等于硬件队列的数量,
[0129]
若是,则通过所述队列适配装置将处理后的目标数据处理请求依次发送至对应的硬件队列,
[0130]
若否,则通过所述队列适配装置将处理后的目标数据处理请求按照轮询调度的方式发送至对应的硬件队列。
[0131]
实际应用中,在对目标数据处理请求进行并行处理之前,为每个目标数据处理请求匹配对应的一个硬件队列,以实现后续通过对应的硬件队列实现对每个目标数据处理请求的并行处理。
[0132]
具体的,首先确定至少两个目标数据处理请求的数量,以及预设的硬件队列的数量,若目标数据处理请求与预设的硬件队列存在映射关系,则将该目标数据处理请求分配至对应的硬件队列;若目标数据处理请求与预设的硬件队列不存在映射关系,则按照目标
数据处理请求的数量与硬件队列的数量,为每个目标数据处理请求分配对应的硬件队列。
[0133]
即若至少两个目标数据处理请求的数量小于等于硬件队列的数量的情况下,可以随机为每个目标数据处理请求分配一个硬件队列,若至少两个目标数据处理请求的数量大于硬件队列的数量的情况下,则通过round robin的方式,为每个目标数据处理请求分配硬件队列,这种情况下,可能会出现多个硬件磁盘的处理请求共用同一个硬件队列的情况。
[0134]
本说明书实施例提供的所述数据处理方法以进程的文件句柄为中心来处理数据处理请求,将对同一个文件的数据处理请求转换为基于文件句柄的并行数据处理请求,充分发挥硬件多队列并发能力,大幅提升了文件系统的吞吐性能。
[0135]
另外一种可实现的方案中,在基于多个数据处理请求打开文件返回文件句柄时,即可为每个文件句柄匹配对应的硬件队列,那么在文件系统的文件并发控制器对基于文件句柄的多个数据处理请求进行并发冲突处理,将基于文件句柄的至少两个目标数据处理请求发送至队列适配装置后,队列适配装置中的句柄队列适配器即可根据每个目标数据处理请求对应的文件句柄,确定每个目标数据处理请求对应的硬件队列,后续可以通过该硬件队列实现对每个目标数据处理请求的并行处理。
[0136]
参见图4,图4示出了本说明书一个实施例提供的一种数据处理方法的处理过程流程图,具体包括以下步骤。
[0137]
步骤402:主机的进程1、进程2、进程3以及进程4基于文件的文件句柄,向运行在该主机上的ext4文件系统下发针对该文件的i/o请求。
[0138]
步骤404:ext4文件系统中的文件并发控制器接收到该i/o请求后,对该i/o请求进行处理,阻塞互斥的i/o请求的下发;同时,将非互斥的i/o请求下发至句柄队列适配器。
[0139]
步骤406:句柄队列适配器为非互斥的i/o请求分配对应的硬件队列,并将该非互斥的i/o请求下发至nvme设备驱动器。
[0140]
步骤408:nvme设备驱动器将该非互斥的i/o请求转换为针对具体硬件磁盘的读写请求,并通过其对应的硬件队列下发至nvme ssd控制器。
[0141]
步骤410:nvme ssd控制器对通过硬件队列接收的针对具体硬件磁盘的i/o请求进行并行处理。
[0142]
具体的,句柄队列适配器可以理解为图4中的句柄队列插件,nvme设备驱动器可以理解为图4中的nvme设备驱动。
[0143]
本说明书实施例提供的所述数据处理方法,是一种可感知存储硬件多队列的文件系统,以进程文件句柄为中心来设计i/o流程,充分发挥硬件多队列并发能力,大幅提升了文件系统的吞吐性能。
[0144]
与上述方法实施例相对应,本说明书还提供了数据处理装置实施例,图5示出了本说明书一个实施例提供的一种数据处理装置的结构示意图。如图5所示,该装置包括:
[0145]
请求接收模块502,被配置为确定多个进程中每个进程对应的文件句柄,并基于所述文件句柄下发文件的多个数据处理请求,其中,每个数据处理请求中均携带有数据处理类型以及针对所述文件进行数据处理的数据区间;
[0146]
请求确定模块504,被配置为基于所述数据处理类型以及所述数据区间从所述多个数据处理请求中确定至少两个目标数据处理请求;
[0147]
请求处理模块506,被配置为将所述至少两个目标数据处理请求发送至队列适配
装置,通过所述队列适配装置对所述目标数据处理请求进行并行处理。
[0148]
可选地,所述装置,还包括:
[0149]
句柄分配模块,被配置为:
[0150]
基于多个进程下发的针对同一文件的文件操作请求打开所述文件,并为所述多个进程中的每个进程分配与所述文件对应的文件句柄。
[0151]
可选地,所述数据处理类型包括数据写入类型和数据读取类型;
[0152]
相应地,所述请求确定模块504,进一步被配置为:
[0153]
将所述多个数据处理请求中数据处理类型为所述数据写入类型的数据处理请求,确定为第一数据处理请求;
[0154]
将所述多个数据处理请求中数据处理类型为所述数据读取类型的数据处理请求,确定为第二数据处理请求;
[0155]
基于所述第一数据处理请求和所述第二数据处理请求确定至少两个目标数据处理请求。
[0156]
可选地,所述请求确定模块504,进一步被配置为:
[0157]
确定所述第一数据处理请求对应的数据区间,以及所述第二数据处理请求对应的数据区间;
[0158]
基于所述第一数据处理请求对应的数据区间和所述第二数据处理请求对应的数据区间,确定所述至少两个目标数据处理请求。
[0159]
可选地,所述请求确定模块504,进一步被配置为:
[0160]
将数据区间不存在交叉的第一数据处理请求和第二数据处理请求,作为第一初始数据处理请求;
[0161]
将数据区间存在交叉的第一数据处理请求或第二数据处理请求,作为第二初始数据处理请求;
[0162]
将所述第一数据处理请求中数据区间不存在交叉的第一数据处理请求,作为第三初始数据处理请求;
[0163]
将所述第一数据处理请求中数据区间存在交叉的一个第一数据处理请求,作为第四初始数据处理请求;
[0164]
其中,所述至少两个目标数据处理请求包括所述第一初始数据处理请求、第二初始数据处理请求、第三初始数据处理请求和/或所述第四初始数据处理请求。
[0165]
可选地,所述请求处理模块506,进一步被配置为:
[0166]
将所述至少两个目标数据处理请求发送至队列适配装置,通过所述队列适配装置将所述目标数据处理请求发送至对应的硬件队列,完成对所述至少两个目标数据处理请求的并行处理。
[0167]
可选地,所述装置,还包括:
[0168]
阻塞模块,被配置为:
[0169]
确定下发所述目标数据处理请求的进程的文件句柄,以及确定所述目标数据处理请求对应的数据区间;
[0170]
基于所述目标数据处理请求对应的数据区间,确定下发所述目标数据处理请求的进程的文件句柄的读写区间;
[0171]
获取所述文件对应的句柄区间树,确定所述句柄区间树中每个文件句柄当前的读写区间;
[0172]
基于下发所述目标数据处理请求的进程的文件句柄的读写区间,与所述句柄区间树中对应的文件句柄的当前读写区间的关联关系,从所述目标数据处理请求中确定阻塞数据处理请求。
[0173]
可选地,所述阻塞模块,进一步被配置为:
[0174]
在下发所述目标数据处理请求的进程的文件句柄的读写区间,与所述句柄区间树中对应的文件句柄的读写区间存在交叉的情况下,将所述目标数据处理请求确定为阻塞数据处理请求。
[0175]
可选地,所述装置,还包括:
[0176]
数据处理模块,被配置为:
[0177]
在所述目标数据处理请求中除所述阻塞数据处理请求之外的其他目标数据处理请求并行处理完成后,对所述阻塞数据处理请求进行并行数据处理。
[0178]
可选地,所述请求处理模块506,进一步被配置为:
[0179]
确定所述至少两个目标数据处理请求的数量以及硬件队列的数量;
[0180]
判断所述至少两个目标数据处理请求的数量是否小于等于硬件队列的数量,
[0181]
若是,则通过所述队列适配装置将处理后的至少两个目标数据处理请求依次发送至对应的硬件队列,
[0182]
若否,则通过所述队列适配装置将处理后的至少两个目标数据处理请求按照轮询调度的方式发送至对应的硬件队列。
[0183]
本说明书实施例提供的所述数据处理装置,以进程的文件句柄为中心来处理数据处理请求,将对同一个文件的数据处理请求转换为基于文件句柄的并行数据处理请求,充分发挥硬件多队列并发能力,大幅提升了文件系统的吞吐性能。
[0184]
上述为本实施例的一种数据处理装置的示意性方案。需要说明的是,该数据处理装置的技术方案与上述的数据处理方法的技术方案属于同一构思,数据处理装置的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
[0185]
参见图6,图6示出了本说明书一个实施例提供的一种数据处理系统的结构示意图,其中,所述数据处理系统包括文件并发控制装置602、队列适配装置604,其中,
[0186]
所述文件并发控制装置602,被配置为确定多个进程中每个进程对应的文件句柄,并基于所述文件句柄下发文件的多个数据处理请求,其中,每个数据处理请求中均携带有数据处理类型以及针对所述文件进行数据处理的数据区间,基于所述数据处理类型以及所述数据区间从所述多个数据处理请求中确定至少两个目标数据处理请求,将所述至少两个目标数据处理请求发送至队列适配装置604;
[0187]
所述队列适配装置604,被配置为接收所述文件并发装置发送的所述至少两个目标数据处理请求,对所述目标数据处理请求进行并行处理。
[0188]
其中,文件并发控制装置可以理解为文件系统中的文件并发控制器,上述的数据处理方法的执行主体即可理解为该文件并发控制器。因此,对于该数据处理系统中关于文件并发控制装置不再详细介绍,具体的操作细节可以参见上述数据处理方法。
[0189]
具体的,所述队列适配装置包括:句柄队列适配器、硬件设备驱动器以及硬件磁盘
控制器;其中,
[0190]
所述句柄队列适配器,被配置为接收所述文件并发装置发送的所述至少两个目标数据处理请求,并通过所述硬件设备驱动器调用所述硬件磁盘控制器的硬件队列,为所述至少两个目标数据处理请求分配对应的硬件队列,且将所述至少两个目标数据处理请求发送至所述硬件设备驱动器;
[0191]
所述硬件设备驱动器,被配置为将所述至少两个目标数据处理请求转换为至少两个针对硬件磁盘的处理请求,并通过所述至少两个针对硬件磁盘的处理请求对应的所述硬件磁盘控制器的硬件队列,将所述至少两个针对硬件磁盘的处理请求发送至所述硬件磁盘控制器;
[0192]
所述硬件磁盘控制器,被配置为对通过所述硬件队列接收的所述至少两个针对硬件磁盘的处理请求进行并行处理。
[0193]
本说明书实施例中,句柄队列适配器接收到文件并发控制装置下发的至少两个目标数据处理请求之后,通过硬件设备驱动器对硬件磁盘控制的硬件队列发起目标数据处理请求,硬件设备驱动器将目标数据处理请求转换为针对具体硬件磁盘的读写请求,通过硬件磁盘控制器的硬件队列发送至硬件磁盘控制器,硬件磁盘控制器在接收到通过硬件队列发送的针对硬件磁盘的读写请求后,实现并行的数据处理;充分发挥硬件多队列并发能力,答复提升了文件系统的吞吐性能。
[0194]
上述为本实施例的一种数据处理系统的示意性方案。需要说明的是,该数据处理系统的技术方案与上述的数据处理方法的部分技术方案属于同一构思,数据处理系统的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的部分技术方案的描述。
[0195]
图7示出了根据本说明书一个实施例提供的一种计算设备700的结构框图。该计算设备700的部件包括但不限于存储器710和处理器720。处理器720与存储器710通过总线730相连接,数据库750用于保存数据。
[0196]
计算设备700还包括接入设备740,接入设备740使得计算设备700能够经由一个或多个网络760通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备740可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi

max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
[0197]
在本说明书的一个实施例中,计算设备700的上述部件以及图7中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图7所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
[0198]
计算设备700可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备700还可以是移动式或静止式的服务器。
[0199]
其中,处理器720用于执行如下计算机可执行指令,该计算机可执行指令被处理器
执行时实现上述数据处理方法的步骤。
[0200]
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的数据处理方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
[0201]
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据处理方法的步骤。
[0202]
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据处理方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
[0203]
本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据处理方法的步骤。
[0204]
上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的数据处理方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
[0205]
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0206]
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0207]
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
[0208]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
[0209]
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
再多了解一些

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

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

相关文献

  • 日榜
  • 周榜
  • 月榜