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

用于数据处理的方法、装置、设备及介质与流程

2022-11-13 23:30:27 来源:中国专利 TAG:


1.本公开涉及数据处理领域,更具体地,涉及一种用于数据处理的方法、装置、设备及介质。


背景技术:

2.在现有的基于服务器信息块(server messages block,smb)的数据处理中,如在基于smb实现的应用(如samba软件)中的数据处理中,传统的基于smb的应用使用传输控制协议/网际协议(transmission control protocol/internet protocol,tcp/ip)来收发请求。该请求从网卡经过内核,再到应用层需要经过多次的内存拷贝操作,这不仅增加了时延,而且还消耗了系统资源。
3.此外,在传统的基于smb的数据处理中,均是使用单进程模式来处理包括读写请求在内的所有请求,无法同时并发地处理多个请求,从而使得传统的基于smb的数据处理中,对请求的处理是比较慢的。
4.因此,需要一种新的数据处理方法来解决上述问题。


技术实现要素:

5.针对上述问题,本公开提供了一种用于数据处理的方法,其中,所述方法可以将所接收的基于smb的数据操作请求进行分类处理,并且在数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求的情况下可以通过远程直接内存访问(rdma)处理所接收到的数据操作请求,从而能够减少内存拷贝操作,减少了时延,并且降低了系统资源的消耗。
6.本公开实施例提供了一种用于数据处理的方法,其特征在于,所述方法包括:接收基于服务器信息块的数据操作请求;响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过远程直接内存访问处理所接收到的数据操作请求;响应于所述数据操作请求为非读取类型的数据操作请求并且非写入类型的数据操作请求,通过所述服务器信息块处理所接收到的数据操作请求。
7.根据本公开实施例,其特征在于,所述响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过远程直接内存访问处理所接收到的数据操作请求,包括:在所述数据操作请求为读取类型的数据操作请求的情况下,从存储器读取所请求读取的第一数据内容;将所读取的第一数据内容通过远程直接内存访问存入第一缓存区;在所述数据操作请求为写入类型的数据操作请求的情况下,将需要写入的第二数据内容通过远程直接内存访问从第二缓存区写入存储器。
8.根据本公开实施例,其特征在于,所述方法还包括:在将所读取的第一数据内容通过远程直接内存访问存入所述第一缓存区之后,通过远程直接内存访问将所述第一数据内容发送给外部设备;在将需要写入的第二数据内容通过远程直接内存访问从所述第二缓存区写入所述存储器之后,将对所写入类型的数据操作请求的响应存入第一缓存区,通过远
程直接内存访问将所述响应发送给外部设备。
9.根据本公开实施例,其特征在于,所述响应于所述数据操作请求为非读取类型的数据操作请求并且非写入类型的数据操作请求,通过所述服务器信息块处理所接收到的数据操作请求,包括:根据所述数据操作请求,通过所述服务器信息块,基于所述存储器获得第三数据内容;将所述第三数据内容存入第一缓存区。
10.根据本公开实施例,其特征在于,所述方法还包括:在将所述第三数据内容存入所述第一缓存区之后,通过远程直接内存访问将所述第三数据内容发送给外部设备。
11.根据本公开实施例,其特征在于,所述响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过远程直接内存访问处理所接收到的数据操作请求,包括:响应于所述数据操作请求为多个读取类型的数据操作请求或写入类型的数据操作请求,通过远程直接内存访问并行地处理所接收到的所述多个读取类型的数据操作请求或写入类型的数据操作请求。
12.本公开实施例提供了一种用于数据处理的装置,其特征在于,所述装置包括:接收模块,被配置为接收基于服务器信息块的数据操作请求;处理模块,被配置为响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过远程直接内存访问处理所接收到的数据操作请求;响应于所述数据操作请求为非读取类型的数据操作请求并且非写入类型的数据操作请求,通过所述服务器信息块处理所接收到的数据操作请求。
13.根据本公开实施例,其特征在于,所述响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过远程直接内存访问处理所接收到的数据操作请求,包括:在所述数据操作请求为读取类型的数据操作请求的情况下,从存储器读取所请求读取的第一数据内容;将所读取的第一数据内容通过远程直接内存访问存入第一缓存区;在所述数据操作请求为写入类型的数据操作请求的情况下,将需要写入的第二数据内容通过远程直接内存访问从第二缓存区写入存储器。
14.根据本公开实施例,其特征在于,所述装置还包括:第一发送模块,被配置为在将所读取的第一数据内容通过远程直接内存访问存入所述第一缓存区之后,通过远程直接内存访问将所述第一数据内容发送给外部设备;第二发送模块,被配置为在将需要写入的第二数据内容通过远程直接内存访问从所述第二缓存区写入所述存储器之后,将对所写入类型的数据操作请求的响应存入第一缓存区,通过远程直接内存访问将所述响应发送给外部设备。
15.根据本公开实施例,其特征在于,所述响应于所述数据操作请求为非读取类型的数据操作请求并且非写入类型的数据操作请求,通过所述服务器信息块处理所接收到的数据操作请求,包括:根据所述数据操作请求,通过所述服务器信息块,基于所述存储器获得第三数据内容;将所述第三数据内容存入第一缓存区。
16.根据本公开实施例,其特征在于,所述装置还包括:第三发送模块,被配置为在将所述第三数据内容存入所述第一缓存区之后,通过远程直接内存访问将所述第三数据内容发送给外部设备。
17.根据本公开实施例,其特征在于,所述响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过远程直接内存访问处理所接收到的数据操作请求,包括:响应于所述数据操作请求为多个读取类型的数据操作请求或写入类型的数据
操作请求,通过远程直接内存访问并行地处理所接收到的所述多个读取类型的数据操作请求或写入类型的数据操作请求。
18.本公开实施例提供了一种用于数据处理的设备,包括:处理器,和存储器,所述存储器存储有计算机可执行指令,所述计算机可执行指令当由处理器执行时促使处理器执行如上所述的方法。
19.本公开实施例提供了一种计算机可读记录介质,存储有计算机可执行指令,其中,所述计算机可执行指令当由处理器执行时促使处理器执行如上所述的方法。
20.本公开提供了一种用于数据处理的方法、装置、设备及介质。本公开提供的方法提供的方式可以响应于不同类型的数据操作请求来通过不同的方式来处理所接收到的数据操作请求,从而使得本公开提供的方法具有对请求进行分类的机制,并且将读取类型的数据操作请求或写入类型的数据操作请求直接通过rdma进行处理,而将其他的请求通过smb进行处理,从而使本公开提供的方法能够减少内存拷贝操作,减少了时延,并且降低了系统资源的消耗。此外,又由于本公开提供的方法可以并发地处理所接收到的多个数据操作请求,从而使本公开提供的方法进一步减少了时延,进一步降低了系统资源的消耗以及提高吞吐量,进而实现性能的大幅度提高。
附图说明
21.为了更清楚地说明本公开实施例的技术方案,下面将对实施例的描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本公开的一些示例性实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
22.图1示出了根据本公开实施例的用于数据处理的方法100的流程图;图2示出了根据本公开实施例的基于rdma服务的内存示意图;图3a示出了根据本公开实施例的传统的基于smb实现的samba应用的结构示意图;图3b示出了根据本公开实施例的传统的基于smb实现的samba应用的请求处理示意图;图4a示出了rdma服务模型的简化的示意图;图4b示出了根据本公开实施例的采用本公开提供的方法的改进的基于smb实现的samba应用的结构示意图;图4c示出了根据本公开实施例的采用本公开提供的方法的改进的基于smb实现的samba应用的请求处理示意图;图5示出了根据本公开实施例的数据操作请求的处理流程的示意图;图6示出了根据本公开实施例的用于数据处理的装置600的框图;图7示出了根据本公开实施例的用于数据处理的设备700的框图;图8示出了根据本公开实施例的计算机可读记录介质800的示意图。
具体实施方式
23.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公
开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
24.除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
25.在现有技术中,传统的基于smb的应用使用tcp/ip来收发请求。该请求从网卡经过内核,再到应用层需要经过多次的内存拷贝操作,这不仅增加了时延,而且还消耗了系统资源。
26.为了解决上述问题,本发明创造性地采用刚兴起的而又没有在传统的基于smb的应用中使用的基于远程直接数据存取(remote direct memory access,rdma)的技术。随着支持rdma功能的网卡逐渐被应用,采用基于rdma的应用可以使该应用直接访问网卡上的数据。在此基础上,本公开创造性提出的方法可以将所接收的基于smb的数据操作请求进行分类处理,并且在数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求的情况下可以通过rdma处理所接收到的数据操作请求,从而能够减少内存拷贝操作,减少了时延,并且降低了系统资源的消耗。
27.下面将结合附图对本公开提供的上述方法进行详细描述。
28.图1示出了根据本公开实施例的用于数据处理的方法100的流程图。该方法100可以由基于smb的服务端设备(如服务器)执行。
29.参照图1,在步骤s110,可以接收基于smb的数据操作请求。
30.作为示例,在基于smb实现的samba应用中,用户可以在samba客户端发起对数据操作的数据操作请求;该数据操作请求可以通过tcp/ip传输至samba服务端;samba服务端便可以接收到基于smb的数据操作请求。
31.作为示例,数据操作请求可以任何类型的数据操作请求。例如,数据操作请求可以是读取类型的数据操作请求或写入类型的数据操作请求。再例如,数据操作请求可以是其他操作文件的元数据的请求,如创建(create)文件请求。
32.在步骤s120,响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过rdma来处理所接收到的数据操作请求。
33.根据本公开实施例,响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过rdma来处理所接收到的数据操作请求,可以包括:在所述数据操作请求为读取类型的数据操作请求的情况下,从存储器读取所请求读取的第一数据内容;将所读取的第一数据内容通过远程直接内存访问存入第一缓存区。
34.作为示例,所述存储器可以是实际的后端存储设备,如存储服务器、内存、硬盘等。第一缓存区可以是事先将一部分内存注册给rdma使用的缓存区,即该缓存区被映射到网卡
上作为向外部设备发送数据的缓存区,此时该第一缓存区可以称为发送区。
35.作为示例,需要从存储器读取文件名为“注册管理”的关于用户注册管理部分的第一数据内容时,可以将所读取的关于用户注册管理部分的第一数据内容通过rdma存入上述发送区。
[0036] 根据本公开实施例,响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过rdma来处理所接收到的数据操作请求,可以包括:在所述数据操作请求为写入类型的数据操作请求的情况下,将需要写入的第二数据内容通过远程直接内存访问从第二缓存区 写入存储器。
[0037]
作为示例,所述存储器可以是实际的后端存储设备,如存储服务器、内存、硬盘等。第二缓存区可以是事先将一部分内存注册给rdma使用的缓存区,即该缓存区被映射到网卡上作为接收所有外部请求以及对应的数据的缓存区,此时该第二缓存区可以称为接收区。该接收区可以和上述发送区成对被注册给rdma。如图2所示,图2示出了根据本公开实施例的基于rdma服务的内存示意图。由图2中可以看出,事先注册了多对接收区和发送区。每对接收区和发送区可以接收或处理其中一个数据操作请求。在每次处理例如从samba客户端发送过来的请求,都将占用上述一对接收区和发送区,其中,接收区可以用于存放客户端发送过来的请求,发送区可以用来存放将发送给客户端的回应(例如响应或读取的数据内容等)。当一个请求处理完了,该对接收区和发送区就会被释放,以等待处理下一个请求。也就是说,每对接收区和发送区都是可以被循环利用的。
[0038]
作为示例,在接收到写入类型的数据操作请求后,可以将需要写入第二数据内容(例如写入到文件名为“注册管理”的关于管理员注册管理部分的数据内容)可以通过rdma从第二缓存区写入例如硬盘中。
[0039]
根据本公开实施例,在将所读取的第一数据内容通过远程直接内存访问存入所述第一缓存区之后,通过远程直接内存访问将所述第一数据内容发送给外部设备。
[0040]
作为示例,在将所读取的关于用户注册管理部分的第一数据内容通过rdma存入上述发送区之后,通过rdma来将存入上述发送区的所读取到的关于用户注册管理部分的第一数据内容发送给外部设备,例如实现samba客户端的外部设备,如移动终端、固定终端等。
[0041]
根据本公开实施例,在将需要写入的第二数据内容通过远程直接内存访问从所述第二缓存区写入所述存储器之后,将对所写入类型的数据操作请求的响应存入第一缓存区,通过远程直接内存访问将所述响应发送给外部设备。
[0042]
作为示例,在将需要写入的例如上述文件名为“注册管理”的关于管理员注册管理部分的第二数据内容写入例如硬盘中成功之后,将反馈的写入成功的响应存入上述接收区,然后通过rdma来将所述写入成功的响应发送给外部设备,例如实现samba客户端的外部设备,如移动终端、固定终端等。
[0043]
返回继续参照图1,在步骤s130中,可以响应于所述数据操作请求为非读取类型的数据操作请求并且非写入类型的数据操作请求,通过所述服务器信息块处理所接收到的数据操作请求。需要说明的是,步骤s120和s130虽然以顺序编号的方式示出,但是步骤s120和s130没有必然的顺序限制并且也不必须实现步骤s120和s130两者,而是可以根据实际应用场景来选择性地执行步骤s120和s130中的任一个、或者顺序或逆序或同时执行步骤s120和s130两者。
[0044]
根据本公开实施例,所述响应于所述数据操作请求为非读取类型的数据操作请求并且非写入类型的数据操作请求,通过所述服务器信息块处理所接收到的数据操作请求,可以包括:根据所述数据操作请求,通过所述服务器信息块,基于所述存储器获得第三数据内容;将所述第三数据内容存入第一缓存区。
[0045]
作为示例,所述数据操作请求可以为非读取类型的数据操作请求并且非写入类型的数据操作请求的创建类型的数据操作请求,例如创建文件名为“人员管理”的创建文件类型的数据操作请求,该创建文件类型的数据操作请求可以传输给通过smb实现的samba服务进程处理,然后samba服务进程与存储器通信数据后会获得例如为创建成功的第三数据内容,最后上述创建成功的第三数据内容可以存入上述第一缓存区(即发送区)。
[0046]
根据本公开实施例,在将所述第三数据内容存入所述第一缓存区之后可以通过远程直接内存访问将所述第三数据内容发送给外部设备。
[0047]
在将上述创建“人员管理”文件成功的第三数据内容存入上述发送区之后,通过rdma来将该第三数据内容发送给外部设备,例如实现samba客户端的外部设备,如移动终端、固定终端等。
[0048]
根据本公开实施例,图1中示出的方法100中的所述响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过rdma处理所接收到的数据操作请求,可以包括:响应于所述数据操作请求为多个读取类型的数据操作请求或写入类型的数据操作请求,通过远程直接内存访问并行地处理所接收到的所述多个读取类型的数据操作请求或写入类型的数据操作请求。
[0049]
作为示例,所述数据操作请求可以为多个读取类型的数据操作请求、多个写入类型的数据操作请求、或者包括读取类型的数据操作请求和写入类型的数据操作请求在内的多个数据操作请求。在为上述多个数据操作请求的情况下,可以通过rdma并发地处理所接收到的该多个数据操作请求。也就是说,可以通过多线程来并发地处理所接收到的该多个数据操作请求。
[0050]
由上述本公开提供的用于数据处理的方法可以看出,本公开提供的方法可以响应于不同类型的数据操作请求来通过不同的方式来处理所接收到的数据操作请求,从而使得本公开提供的方法具有对请求进行分类的机制,并且将读取类型的数据操作请求或写入类型的数据操作请求直接通过rdma进行处理,而将其他的请求通过smb进行处理,从而使本公开提供的方法能够减少内存拷贝操作,减少时延,并且降低系统资源的消耗。此外,又由于本公开提供的方法可以并发地处理所接收到的多个数据操作请求,从而使本公开提供的方法进一步减少时延,进一步降低系统资源的消耗以及提高吞吐量,进而实现性能的大幅度提高。
[0051]
此外,由上述本公开提供的用于数据处理的方法还可以看出,本公开提供的方法通过rdma来接收所有的samba请求和发送所有samba回复。应用程序可以直接访问网卡内存中的数据,减少内存拷贝,减少对系统资源的消耗。在收到的请求中将读写之外的请求转发给原samba,按照原samba流程处理,将读写请求在rdma进程中使用多线程模式直接处理,提高并发,增加吞吐量,进而实现了对samba的读写流程的加速处理。由此可以看出,本公开提供的方法适用于使用samba进行文件读写较多的场景,在这种场景下本公开提供的方法将极大提升读写性能。
[0052]
为了更好地理解上述本公开提供的上述用于数据处理的方法,接下来将结合图3a至5以示例的形式对上述本公开提供的方法进行进一步说明。
[0053]
图3a示出了根据本公开实施例的传统的基于smb实现的samba应用的结构示意图。图3b示出了根据本公开实施例的传统的基于smb实现的samba应用的请求处理示意图。图4a示出了rdma服务模型的简化的示意图。图4b示出了根据本公开实施例的采用本公开提供的方法的改进的基于smb实现的samba应用的结构示意图。图4c示出了根据本公开实施例的采用本公开提供的方法的改进的基于smb实现的samba应用的请求处理示意图。图5示出了根据本公开实施例的数据操作请求的处理流程的示意图。
[0054]
在传统的基于smb的方案中,参照图3a,samba客户端与服务器上运行的samba服务进程通过tcp/ip网络交互数据,而samba服务进程可以通过各种有线或无线连接与后端存储设备(如内存、存储服务器、硬盘等)通信数据。例如,来自客户端的各种类型的数据操作请求(包括读取类型的数据操作请求、写入类型的数据操作请求(下文为了简述的目的,将读取类型的数据操作请求和/或写入类型的数据操作请求成为读写请求)、以及其他类型的数据操作请求)通过tcp/ip网络传输至samba服务进程,如图3b所示。samba服务进程处理读写请求或其他请求并与后端存储设备通信数据,然后将对该请求的响应内容(如写入成功的响应或读取数据的内容)通过tcp/ip网络传输至客户端。
[0055]
在示例说明本发明的改进的基于smb的方案之前,简略说明下rdma服务模型。针对rdma,目前有一套成熟的开发接口和开发模型。可以使用一个rdma进程监听支持rdma功能的网卡。可以将一块共享内存注册为用于rdma相关操作的接收和发送内存。这一块内存可以切分成为多个小块内存,以用于同时并发接收和发送多个请求和回应。即如在处理写入类型的请求时,从网络接收的数据会直接写入这块内存,从而从这块内存直接写入到后端存储;如在处理读取类型的请求时,需要使用rdma发送的数据也会直接写入这块内存,进而从这块内存直接发送到外部设备。为了采用这一套rdma模型来接收和/或发送基于smb的请求和/或对应的反馈数据,需要在基于smb的请求加上一个rdma专用的请求报头(header),而现有的例如基于smb实现的samba中存在对应的samba rdma请求 header可以使用。如图4a所示,为rdma服务模型的简化图,其中,客户端通过rdma网络与服务器上的rdma服务进程交互数据。图4a中的圆形的部分代表一块共享内存(即缓存区,buf)。这块共享内存可以被切分成多块,以用来接收和发送数据。从rdma网络接收的数据和即将通过rdma网络发送出去的数据都将被存放在这些共享内存中。rdma服务进程中的多线程处理队列从共享内存中读取如读写请求并处理。如果是写请求则将请求中的数据写入后端存储设备中;如果是读请求则从后端存储设备中读取数据,并写入到共享内存中。多线程处理队列可以实现并发地对多个请求进行处理。
[0056]
在本发明的改进的基于smb的方案,如图4b所示,客户端通过rdma网络与服务器上的rdma服务进程交互数据。rdma服务进程中的rdma服务会判断接收到的请求的类型。在该请求为读写类型的情况下,rdma服务可以通过多线程处理队列来处理读写请求并与后端存储设备通信数据,然后将对该请求的响应内容(如写入成功的响应或读取数据的内容)通过rdma网络传输至客户端。在该请求为非读取类型的情况下,rdma服务会将该请求通过与samba服务进程的网络链接(如samba配置在445端口下,则通过该445端口)传输至samba服务进程处理,并在samba服务进程与后端设备之间通信数据,然后将对该请求的响应内容通
过rdma网络传输至客户端。
[0057]
由图4b可以看出,本公开在原samba服务进程之外额外新增了一个rdma服务进程。该新增的rdma服务进程可以与监听支持rdma功能的网卡;收发基于samba的所有请求;对请求进行分类,将读写以外的请求转发给原samba服务进程处理,而读写请求直接在rdma服务进程中处理;多线程处理队列用来处理读写请求,并且在多个读写请求的情况下,可以并发地处理该多个读写请求。
[0058]
也就是说,参照图4c,通过网路将来自外部的请求传输至服务器上的rdma服务进程处理。在rdma服务进程判断接收到的请求为读写请求的情况下,rdma服务进程直接进行处理并与后端存储通信数据,然后将反馈的数据通过网络在发送给外部设备。在rdma服务进程判断接收到的请求为其他请求的情况下,rdma服务进程会通过与samba服务进程的网络链接将该其他请求传输至samba服务进程处理,从而使samba服务进程处理该其他请求并与后端存储通信数据,然后将反馈数据再通过该网络链接传输至rdma服务进程,并通过rdma服务进程,通过网络传输至外部设备。
[0059]
参照图5,以基于smb的samba应用为示例,说明根据本公开实施例的数据操作请求的处理流程,该处理流程可以由服务器执行。
[0060]
samba应用主要在window操作系统中使用。window作为samba客户端已经可以支持rdma网络通信。目前samba支持两中网络通信tcp/ip和rdma,而rdma网络设备是兼容tcp/ip通信的。在这个前提下,samba客户端在和samba服务端建立链接的时候,会先建立tcp/ip链接,然后通过tcp/ip链接发送请求到samba服务端,查询网卡的信息。当samba客户端发现samba服务端的网卡支持rdma功能时会断开已经建立的tcp/ip链接,重新发起请求以与samba服务端建立rdma链接。
[0061]
samba服务端在与samba客户端建立rdma链接的时候,需要将一块内存注册到rdma中,这块内存将作为rdma接收和发送网络请求的缓存区,如上图2所示的成对建立的接收区和发送区。
[0062]
继续参照图5,在步骤s510,来自客户端的数据操作请求被缓存到rdma内存(如上述的缓存区、接收区)中,则rdma服务进程便可以从该rdma内存中获取请求。
[0063]
在步骤s520,rdma服务进程可以解析请求数据报头部分信息,进而在步骤s530中获取本次请求的类型和请求中包含的数据信息(例如读写的文件、文件位置、内容等),例如请求报头中存在命令(command)字段,一般占用16比特。该字段的值可以表示请求的类型,例如该16比特全为0时可以表示读取类型(即读请求),该16比特全为1时可以表示写入类型(即写请求),该16比特为0000 0100 1000 0010时可以表示上述create类型
……
在步骤s540,rdma服务进程可以判断请求类型。
[0064]
当为读取类型的请求时,则进行到步骤s550,rdma服务进程将该请求放入读请求队列中,该请求队列可以是一个先入先出的队列,也可以是一个可以根据请求的优先级进行排列的队列等等。然后,流程进行到步骤s551,rdma服务进程唤醒(也可称为激活)读请求处理线程,因为当没有处理任何请求时线程是处于空闲状态。读请求处理线程被唤醒后,在步骤s552,单个处理线程开始从请求队列中获取读请求;然后在步骤s553,该单个处理线程将读请求发送至后端存储设备进行处理,接着在步骤s554,后端存储设备将所要读取的数据内容(即上述第一数据内容)直接存入rdma发送区(即上述第一缓存区);数据内容存入
rdma发送区之后在步骤s555,该单个处理线程会触发rdma发送,然后在步骤s556中,rdma服务进程便可以将rdma发送区的内容发送给客户端。在处理完本次请求之后,便可以在步骤s580处理下一个请求,以在步骤s510中继续从rdma内存中获取请求。此外,当需要同时处理多个读请求时,会存在多个读请求处理线程,该多个读请求处理线程同时从读请求队列中读取读请求并进行处理,即该多个读请求处理线程同时并发地执行步骤s552至s555的操作。待并发处理完该多个读请求后,在步骤s556中,rdma服务进程便可以将rdma发送区的内容发送给客户端。
[0065]
当为写入类型的请求时,则进行到步骤s560,rdma服务进程将该请求放入写请求队列中,该请求队列可以是一个先入先出的队列,也可以是一个可以根据请求的优先级进行排列的队列等等。然后,流程进行到步骤s561,rdma服务进程唤醒(也可称为激活)写请求处理线程,因为当没有处理任何请求时线程是处于空闲状态。写请求处理线程被唤醒后,在步骤s562,单个处理线程开始从写请求队列中获取写请求;然后在步骤s563,该单个处理线程将写请求发送至后端存储设备进行处理,接着在步骤s564,该单个处理线程将需要写入的数据内容(即上述第二数据内容)直接从rdma接收区(即上述第二缓存区)写入后端存储设备中;数据内容写入后端存储设备之后会将对应的例如写入成功的响应存入rdma发送区,然后在步骤s565,该单个处理线程会触发rdma发送,以在步骤s566中,rdma服务进程便可以将rdma发送区的内容发送给客户端。在处理完本次请求之后,便可以在步骤s580处理下一个请求,以在步骤s510中继续从rdma内存中获取请求。此外,当需要同时处理多个写请求时,会存在多个写请求处理线程,该多个写请求处理线程同时从写请求队列中读取写请求并进行处理,即该多个写请求处理线程同时并发地执行步骤s562至s565的操作。待并发处理完该多个写请求后,在步骤s566中,rdma服务进程便可以将rdma发送区的内容发送给客户端。
[0066]
当为非读写类型的其他请求时,则进行到在步骤s570,rdma服务进程可以通过与samba服务进程的网络链接,将该请求转发给samba服务进程处理。samba服务进程便可以在步骤s571接收该请求,并在步骤s572处理该请求。samba服务进程在处理该请求时会与后端存储设备通信数据,并且在步骤s573中待该请求处理完后,samba服务进程可以将反馈内容(即上述第三数据内容)通过前述网络链接发送给rdma服务进程。接着在步骤s574,rdma服务进程可以将接收到的反馈内容存入rdma发送区。在rdma发送区存入该反馈内容后,在步骤s575,rdma服务进程便可以触发rdma发送,以在步骤s576,rdma服务进程将rdma发送区的内容发送给客户端。在处理完本次请求之后,便可以在步骤s580处理下一个请求,以在步骤s510中继续从rdma内存中获取请求。
[0067]
需要说明的是,在同时存在读请求和写请求的情况下,可以并发地执行上述针对读请求的处理操作和针对写请求的处理操作。处理过程与上述一致,此次不再赘述。
[0068]
本公开除了提供了上述用于数据处理的方法之外,还提供了对应的装置、设备以介质,接下来将结合图6至图8对此进行说明。
[0069]
图6示出了根据本公开实施例的用于数据处理的装置600的框图。上文针对用于数据处理的方法100的说明同样适用于装置600,除非另有明确说明。作为示例,装置600可以是服务器端。
[0070]
参照图6,用于数据处理的装置600可以包括接收模块610和处理模块620。
[0071]
根据本公开实施例,接收模块610可以被配置为接收基于服务器信息块的数据操作请求。
[0072]
作为示例,在基于smb实现的samba应用中,用户可以在samba客户端发起对数据操作的数据操作请求;该数据操作请求可以通过tcp/ip传输至samba服务端;samba服务端便可以接收到基于smb的数据操作请求。
[0073]
作为示例,数据操作请求可以任何类型的数据操作请求。例如,数据操作请求可以是读取类型的数据操作请求或写入类型的数据操作请求。再例如,数据操作请求可以是其他操作文件的元数据的请求,如创建(create)文件请求。
[0074]
根据本公开实施例,处理模块620可以被配置为响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过远程直接内存访问处理所接收到的数据操作请求;响应于所述数据操作请求为非读取类型的数据操作请求并且非写入类型的数据操作请求,通过所述服务器信息块处理所接收到的数据操作请求。
[0075]
根据本公开实施例,所述响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过远程直接内存访问处理所接收到的数据操作请求,可以包括:在所述数据操作请求为读取类型的数据操作请求的情况下,从存储器读取所请求读取的第一数据内容;将所读取的第一数据内容通过远程直接内存访问存入第一缓存区。
[0076]
作为示例,所述存储器可以是实际的后端存储设备,如存储服务器、内存、硬盘等。第一缓存区可以是事先将一部分内存注册给rdma使用的缓存区,即该缓存区被映射到网卡上作为向外部设备发送数据的缓存区,此时该第一缓存区可以称为发送区。
[0077]
作为示例,需要从存储器读取文件名为“注册管理”的关于用户注册管理部分的第一数据内容时,可以将所读取的关于用户注册管理部分的第一数据内容通过rdma存入上述发送区。
[0078] 根据本公开实施例,所述响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过远程直接内存访问处理所接收到的数据操作请求,可以包括:在所述数据操作请求为写入类型的数据操作请求的情况下,将需要写入的第二数据内容通过远程直接内存访问从第二缓存区 写入存储器。
[0079]
作为示例,所述存储器可以是实际的后端存储设备,如存储服务器、内存、硬盘等。第二缓存区可以是事先将一部分内存注册给rdma使用的缓存区,即该缓存区被映射到网卡上作为接收所有外部请求以及对应的数据的缓存区,此时该第二缓存区可以称为接收区。该接收区可以和上述发送区成对被注册给rdma。如上述图2所示,事先注册了多对接收区和发送区。每对接收区和发送区可以接收或处理其中一个数据操作请求。在每次处理例如从samba客户端发送过来的请求,都将占用上述一对接收区和发送区,其中,接收区可以用于存放客户端发送过来的请求,发送区可以用来存放将发送给客户端的回应(例如响应或读取的数据内容等)。当一个请求处理完了,该对接收区和发送区就会被释放,以等待处理下一个请求。也就是说,每对接收区和发送区都是可以被循环利用的。
[0080]
作为示例,在接收到写入类型的数据操作请求后,可以将需要写入第二数据内容(例如写入到文件名为“注册管理”的关于管理员注册管理部分的数据内容)可以通过rdma从第二缓存区写入例如硬盘中。
[0081]
根据本公开实施例,所述装置600还包括第一发送模块和第二发送模块。
[0082]
根据本公开实施例,第一发送模块可以被配置为在将所读取的第一数据内容通过远程直接内存访问存入所述第一缓存区之后,通过远程直接内存访问将所述第一数据内容发送给外部设备。
[0083]
作为示例,在将所读取的关于用户注册管理部分的第一数据内容通过rdma存入上述发送区之后,通过rdma来将存入上述发送区的所读取到的关于用户注册管理部分的第一数据内容发送给外部设备,例如实现samba客户端的外部设备,如移动终端、固定终端等。
[0084]
根据本公开实施例,第二发送模块可以被配置为在将需要写入的第二数据内容通过远程直接内存访问从所述第二缓存区写入所述存储器之后,将对所写入类型的数据操作请求的响应存入第一缓存区,通过远程直接内存访问将所述响应发送给外部设备。
[0085]
作为示例,在将需要写入的例如上述文件名为“注册管理”的关于管理员注册管理部分的第二数据内容写入例如硬盘中成功之后,将反馈的写入成功的响应存入上述接收区,然后通过rdma来将所述写入成功的响应发送给外部设备,例如实现samba客户端的外部设备,如移动终端、固定终端等。
[0086]
注意说明的是,第一发送模块和第二发送模块可以是同一模块,该同一模块被配置为实现该第一发送模块和第二发送模块的功能。
[0087]
根据本公开实施例,所述响应于所述数据操作请求为非读取类型的数据操作请求并且非写入类型的数据操作请求,通过所述服务器信息块处理所接收到的数据操作请求,可以包括:根据所述数据操作请求,通过所述服务器信息块,基于所述存储器获得第三数据内容;将所述第三数据内容存入第一缓存区。
[0088]
作为示例,所述数据操作请求可以为非读取类型的数据操作请求并且非写入类型的数据操作请求的创建类型的数据操作请求,例如创建文件名为“人员管理”的创建文件类型的数据操作请求,该创建文件类型的数据操作请求可以传输给通过smb实现的samba服务进程处理,然后samba服务进程与存储器通信数据后会获得例如为创建成功的第三数据内容,最后上述创建成功的第三数据内容可以存入上述第一缓存区(即发送区)。
[0089]
根据本公开实施例,所述装置600还可以包括第三发送模块,其被配置为在将所述第三数据内容存入所述第一缓存区之后可以通过远程直接内存访问将所述第三数据内容发送给外部设备。需要说明的是,第一发送模块、第二发送模块和第三发送模块可以为同一模块,该同一模块被配置为实现该第一发送模块、第二发送模块和第三发送模块的功能。
[0090]
作为示例,在将上述创建“人员管理”文件成功的第三数据内容存入上述发送区之后,通过rdma来将该第三数据内容发送给外部设备,例如实现samba客户端的外部设备,如移动终端、固定终端等。
[0091]
根据本公开实施例,所述响应于所述数据操作请求为读取类型的数据操作请求或写入类型的数据操作请求,通过rdma处理所接收到的数据操作请求,可以包括:响应于所述数据操作请求为多个读取类型的数据操作请求或写入类型的数据操作请求,通过远程直接内存访问并行地处理所接收到的所述多个读取类型的数据操作请求或写入类型的数据操作请求。
[0092]
作为示例,所述数据操作请求可以为多个读取类型的数据操作请求、多个写入类型的数据操作请求、或者包括读取类型的数据操作请求和写入类型的数据操作请求在内的多个数据操作请求。在为上述多个数据操作请求的情况下,可以通过rdma并发地处理所接
收到的该多个数据操作请求。也就是说,可以通过多线程来并发地处理所接收到的该多个数据操作请求。
[0093]
由上述本公开提供的用于数据处理的装置可以看出,本公开提供的装置可以响应于不同类型的数据操作请求来通过不同的方式来处理所接收到的数据操作请求,从而使得本公开提供的装置具有对请求进行分类的机制,并且将读取类型的数据操作请求或写入类型的数据操作请求直接通过rdma进行处理,而将其他的请求通过smb进行处理,从而使本公开提供的装置能够减少内存拷贝操作,减少时延,并且降低系统资源的消耗。此外,又由于本公开提供的装置可以并发地处理所接收到的多个数据操作请求,从而使本公开提供的装置进一步减少时延,进一步降低系统资源的消耗以及提高吞吐量,进而实现性能的大幅度提高。
[0094]
图7示出了根据本公开实施例的用于数据处理的设备700的框图。
[0095]
参见图7,用于数据处理的设备700可以包括处理器701和存储器702。处理器701和存储器702都可以通过总线703相连。
[0096]
处理器701可以根据存储在存储器702中的程序执行各种动作和处理。具体地,处理器701可以是一种集成电路芯片,具有信号的处理能力。上述处理器可以是通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,可以是x86架构或arm架构的。
[0097]
存储器702存储有计算机指令,在计算机指令被处理器701执行时实现上述用于数据处理的方法。存储器702可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(rom)、可编程只读存储器(prom)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)或闪存。易失性存储器可以是随机存取存储器(ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(sram)、动态随机存取存储器(dram)、同步动态随机存取存储器(sdram)、双倍数据速率同步动态随机存取存储器ddrsdram)、增强型同步动态随机存取存储器(esdram)、同步连接动态随机存取存储器(sldram)和直接内存总线随机存取存储器(dr ram)。应注意,本文描述的存储器旨在包括但不限于这些和任意其他适合类型的存储器。
[0098]
图8示出了根据本公开实施例的计算机可读记录介质800的示意图。
[0099]
如图8所示,所述计算机可读记录介质800上存储有计算机可执行指令810。当所述计算机可执行指令810由处理器执行时,可以执行参照以上附图描述的根据本公开实施例的方法。本公开实施例中的计算机可读记录介质可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(rom)、可编程只读存储器(prom)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)或闪存。易失性存储器可以是随机存取存储器(ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(sram)、动态随机存取存储器(dram)、同步动态随机存取存储器(sdram)、双倍数据速率同步动态随机存取存储器(ddrsdram)、增强型同步动态随机存取存储器(esdram)、同步连接动态随机存取存
储器(sldram)和直接内存总线随机存取存储器(dr ram)。应注意,本文描述的存储器旨在包括但不限于这些和任意其他适合类型的存储器。
[0100]
需要说明的是,附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含至少一个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0101]
一般而言,本公开的各种示例实施例可以在硬件或专用电路、软件、固件、逻辑,或其任何组合中实施。某些方面可以在硬件中实施,而其他方面可以在可以由控制器、微处理器或其他计算设备执行的固件或软件中实施。当本公开的实施例的各方面被图示或描述为框图、流程图或使用某些其他图形表示时,将理解此处描述的方框、装置、系统、技术或方法可以作为非限制性的示例在硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其他计算设备,或其某些组合中实施。
[0102]
在上面详细描述的本公开的示例实施例仅仅是说明性的,而不是限制性的。本领域技术人员应该理解,在不脱离本公开的原理和精神的情况下,可对这些实施例或其特征进行各种修改和组合,这样的修改应落入本公开的范围内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献