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

一种文件传输方法、装置、设备及存储介质与流程

2021-12-03 23:38:00 来源:中国专利 TAG:


1.本发明涉及数据搬运技术领域,更具体地说,涉及一种文件传输方法、装置、设备及存储介质。


背景技术:

2.当前使用rdma(remote direct memory access,远程直接地址访问)实现文件传输功能时,技术层面主要分如下几个步骤:在应用程序的触发下,将数据从磁盘读入内核缓存,再将数据从内核缓存拷贝到应用缓存,最后将数据从应用缓存读入硬件内部缓存,并将数据从硬件内部缓存发送至远端节点。可见,上述操作步骤中,和数据搬移有关的一共有三次,分别为将数据从磁盘读入内核缓存、将数据从内核缓存拷贝到应用缓存、从应用缓存读入硬件内部缓存,其中将数据从内核缓存拷贝到应用缓存的内存拷贝,本质上是把数据从内存硬件中的一段地址空间搬移到另一段地址空间,从原理上是一次冗余操作,并且非常耗时。


技术实现要素:

3.本发明的目的是提供一种文件传输方法、装置、设备及存储介质,能够避免冗余的内存拷贝操作,降低数据从磁盘搬运到rdma网卡硬件内部缓存的时间,提高文件传输的传输效率。
4.为了实现上述目的,本发明提供如下技术方案:
5.一种文件传输方法,包括:
6.接收应用程序发起的文件传输请求,在所述文件传输请求的触发下申请内核缓存,并从磁盘中读取相应文件至所述内核缓存中;
7.通过rdma网卡驱动告知rdma网卡硬件发起读操作,以指示所述rdma网卡硬件读取所述内核缓存中的文件至所述rdma网卡硬件的内部缓存中,并将所述内部缓存中的文件发送至远端节点。
8.优选的,从磁盘中读取相应文件,包括:
9.通过dma操作从所述磁盘中读取相应文件;
10.指示所述rdma网卡硬件读取所述内核缓存中的文件,包括:
11.指示所述rdma网卡硬件通过dma操作读取所述内核缓存中的文件。
12.优选的,在所述文件传输请求的触发下请求内核缓存,包括:
13.指示文件系统申请内核缓存,接收所述文件系统返回的内核缓存地址信息,以供基于所述内核缓存地址信息将相应文件发送至所述内核缓存中;其中,所述内核缓存地址信息为所述文件系统申请得到的内核缓存的地址信息。
14.优选的,通过rdma网卡驱动告知rdma网卡硬件发起读操作之前,还包括:
15.调用所述rdma网卡驱动提供的缓存注册接口注册所述内核缓存,以供所述rdma网卡硬件基于注册的所述内核缓存发起读操作;
16.通过rdma网卡驱动告知rdma网卡硬件发起读操作,包括:
17.调用所述rdma网卡驱动提供的指示读接口,指示所述rdma网卡驱动告知所述rdma网卡硬件发起读操作。
18.一种文件传输装置,包括:
19.第一读模块,用于:接收应用程序发起的文件传输请求,在所述文件传输请求的触发下申请内核缓存,并从磁盘中读取相应文件至所述内核缓存中;
20.第二读模块,用于:通过rdma网卡驱动告知rdma网卡硬件发起读操作,以指示所述rdma网卡硬件读取所述内核缓存中的文件至所述rdma网卡硬件的内部缓存中,并将所述内部缓存中的文件发送至远端节点。
21.优选的,第一读模块包括:
22.第一读单元,用于:通过dma操作从所述磁盘中读取相应文件;
23.第二读模块包括:
24.第二读单元,用于:指示所述rdma网卡硬件通过dma操作读取所述内核缓存中的文件。
25.优选的,第一读模块包括:
26.申请单元,用于:指示文件系统申请内核缓存,接收所述文件系统返回的内核缓存地址信息,以供基于所述内核缓存地址信息将相应文件发送至所述内核缓存中;其中,所述内核缓存地址信息为所述文件系统申请得到的内核缓存的地址信息。
27.优选的,还包括:
28.调用模块,用于:通过rdma网卡驱动告知rdma网卡硬件发起读操作之前,调用所述rdma网卡驱动提供的缓存注册接口注册所述内核缓存,以供所述rdma网卡硬件基于注册的所述内核缓存发起读操作;
29.第二读模块,包括:
30.调用单元,用于:调用所述rdma网卡驱动提供的指示读接口,指示所述rdma网卡驱动告知所述rdma网卡硬件发起读操作。
31.一种文件传输设备,包括:
32.存储器,用于存储计算机程序;
33.处理器,用于执行所述计算机程序时实现如上任一项所述文件传输方法的步骤。
34.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项文件传输方法的步骤。
35.本发明提供了一种文件传输方法、装置、设备及存储介质,该方法包括:接收应用程序发起的文件传输请求,在所述文件传输请求的触发下申请内核缓存,并从磁盘中读取相应文件至所述内核缓存中;通过rdma网卡驱动告知rdma网卡硬件发起读操作,以指示所述rdma网卡硬件读取所述内核缓存中的文件至所述rdma网卡硬件的内部缓存中,并将所述内部缓存中的文件发送至远端节点。本技术响应应用程序的文件传输请求,从磁盘中读取相应文件至申请的内核缓存中,再通过rdma网卡驱动指示rdma网卡硬件读取内核缓存中的文件至内部缓存中,以通过网络或者光纤将内部缓存中的文件发送至远端节点。可见,本技术以内核空间已有的rdma网卡驱动提供的相关功能为基础,通过将磁盘中相应文件读入申请的内核缓存及将内核缓存中相应文件读入rdma网卡硬件实现文件传输,避免冗余的内存
拷贝操作,降低数据从磁盘搬运到rdma网卡硬件内部缓存的时间,提高文件传输的传输效率。
附图说明
36.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
37.图1为本发明实施例提供的一种文件传输方法的流程图;
38.图2为本发明实施例提供的一种文件传输方法的实现示意图;
39.图3为本发明实施例提供的一种文件传输装置的结构示意图。
具体实施方式
40.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
41.请参阅图1,其示出了本发明实施例提供的一种文件传输方法的流程图,具体可以包括:
42.s11:接收应用程序发起的文件传输请求,在文件传输请求的触发下申请内核缓存,并从磁盘中读取相应文件至内核缓存中。
43.本发明实施例提供的一种文件传输方法的执行主体可以为文件传输装置,而该文件传输装置可以通过内核空间的rdma_sendfile处理模块实现,本技术实施例中以该文件传输方法的执行主体为rdma_sendfile处理模块进行具体说明。另外,本技术实施例可以以linux操作系统为基础实现,当然还可以根据实际需要应用于其他操作系统,均在本发明的保护范围之内。
44.rdma意为远程直接地址访问,通过rdma本端节点(一台电脑或嵌入式设备)可以“直接”访问远端节点的内存;所谓直接,指的是可以像访问本地内存一样,绕过传统以太网复杂的tcp/ip网络协议栈去读写远端内存,这个过程对端cpu是不参与的,而且这个读写过程的大部分工作是由硬件而不是软件完成的。具体来说,用户空间的应用程序通过发起rdma_sendfile系统调用实现文件传输请求的发送,rdma_sendfile处理模块被调用后申请操作系统内核空间的内核缓存,以能够利用该内核缓存实现相应的数据存储;rdma_sendfile处理模块在申请到内核缓存后,从硬件的磁盘中读取相应的文件,并将读取到的文件缓存至内核缓存中,以供后续从内核缓存中获取相应的文件实现至远端节点的存储。
45.其中,rdma_sendfile处理模块从磁盘中读取相应文件可以是指示磁盘驱动程序对磁盘控制器进行配置,配置的信息可以包括需要读取的文件的文件大小、文件地址等信息,然后磁盘控制器在完成配置后,基于配置的信息到磁盘中读取相应的文件,然后将读取到的文件存储至内核缓存中;磁盘控制器为能够实现对磁盘管控的控制器。
46.s12:通过rdma网卡驱动告知rdma网卡硬件发起读操作,以指示rdma网卡硬件读取
内核缓存中的文件至rdma网卡硬件的内部缓存中,并将内部缓存中的文件发送至远端节点。
47.rdma网卡驱动及rdma网卡硬件为实现rdma的相关模块;rdma_sendfile处理模块通过rdma网卡驱动告知rdma网卡硬件发起读操作,rdma网卡硬件将内核缓存中存储的文件读入至rdma网卡硬件的内部缓存中,然后通过网线或者光纤等方式将内部缓存中的相应文件发送到远端节点中,以实现相应的rdma。
48.本技术响应应用程序的文件传输请求,从磁盘中读取相应文件至申请的内核缓存中,再通过rdma网卡驱动指示rdma网卡硬件读取内核缓存中的文件至内部缓存中,以将内部缓存中的文件发送至远端节点。可见,本技术以内核空间已有的rdma网卡驱动提供的相关功能为基础,通过将磁盘中相应文件读入申请的内核缓存及将内核缓存中相应文件读入rdma网卡硬件实现文件传输,避免冗余的内存拷贝操作,降低数据从磁盘搬运到rdma网卡硬件内部缓存的时间,提高文件传输的传输效率。
49.本发明实施例提供的一种文件传输方法,从磁盘中读取相应文件,可以包括:通过dma操作从磁盘中读取相应文件;
50.指示rdma网卡硬件读取内核缓存中的文件,可以包括:指示rdma网卡硬件通过dma操作读取内核缓存中的文件。
51.本技术实施例中rdma_sendfile处理模块从磁盘中读取相应文件、rdma网卡硬件从内核缓存中读取相应文件,均可以是通过dma(direct memory access,直接地址访问)操作实现的,从而通过两次dma操作实现相应数据的读取,能够有效降低数据读取的时间,进而进一步提高文件传输的效率。
52.本发明实施例提供的一种文件传输方法,在文件传输请求的触发下请求内核缓存,可以包括:
53.指示文件系统申请内核缓存,接收文件系统返回的内核缓存地址信息,以供基于内核缓存地址信息将相应文件发送至内核缓存中;其中,内核缓存地址信息为文件系统申请得到的内核缓存的地址信息。
54.本技术实施例中在请求内核缓存时,rdma_sendfile处理模块通知文件系统从磁盘中读取相应的文件,并要求其返回内核缓存地址信息;具体来说,文件系统模向操作系统申请内存空间(即内核缓存),获取所申请的内核缓存的地址信息(可以包括地址和长度),并将获取到的内核缓存地址信息告知给rdma_sendfile处理模块,以便于需要读取内核缓存中的文件时基于该内核缓存地址信息实现内核缓存的定位;可见,本技术以内核空间已有的文件系统提供的相关功能为基础实现内核缓存的申请,简便有效。
55.本发明实施例提供的一种文件传输方法,通过rdma网卡驱动告知rdma网卡硬件发起读操作之前,还可以包括:
56.调用rdma网卡驱动提供的缓存注册接口注册内核缓存,以供rdma网卡硬件基于注册的内核缓存发起读操作;
57.通过rdma网卡驱动告知rdma网卡硬件发起读操作,可以包括:
58.调用rdma网卡驱动提供的指示读接口,指示rdma网卡驱动告知rdma网卡硬件发起读操作。
59.需要说明的是,本技术实施例中rdma_sendfile处理模块调用rdma网卡驱动提供
的ib_reg_mr接口(缓存注册接口)注册mr(memory region,内存区域),其作用是把申请的内核缓存的信息向rdma设备注册;rdma_sendfile处理模块调用rdma网卡驱动的ib_post_send接口(指示读接口),通过rdma网卡驱动告知rdma网卡硬件开始发起rdma write操作,目的是将数据写到远端节点的内存。可见本技术通过调用rdma网卡驱动的接口实现相应功能,简便且有效。
60.在一种具体实现方式中,如图2所示,本发明实施例提供的一种文件传输方法具体可以包括:
61.①
应用程序发起rdma_sendfile系统调用;
62.②
内核空间中的rdma_sendfile处理模块通知文件系统从磁盘读取文件,并要求其返回内核缓存地址信息;
63.③
文件系统向系统申请内存空间,即内核缓存;
64.④
文件系统将内核缓存的地址信息(包括地址和长度)告知rdma_sendfile处理模块;
65.⑤
rdma_sendfile处理模块调用rdma网卡驱动提供的ib_reg_mr接口注册mr,其作用是把内核缓存的信息向rdma设备注册;(这一步和第

步可以同时进行以节省时间)
66.⑥
磁盘驱动程序对磁盘控制器进行配置,之后磁盘控制器会进行图中的第一次dma操作,将数据从磁盘读入内核缓;
67.⑦
rdma_sendfile处理模块调用rdma网卡驱动的ib_post_send接口,通过rdma网卡驱动告知rdma网卡硬件开始发起rdma write操作,目的是将数据写到远端节点的内存。
68.⑧
rdma网卡硬件发起图中第二次dma操作,将数据从内核缓存读入硬件内部缓存,之后将数据通过网线/光纤发送到远端节点。
69.相应实现上述步骤的具体的伪代码可以如下:
70.一、为新的系统调用rdma_sendfile添加系统调用号,定义相应的处理函数;在linux操作系统的源代码中,修改文件“/arch/x86/entry/syscalls/syscall_64.tbl”,添加新的系统调用号(假设当前linux版本的最后一个系统调用为439)440,定义其处理函数为sys_rdma_sendfile,并保存:
71.440common rdma_sendfile sys_rdma_sendfile
72.二、修改现有文件系统;仿照原有文件系统中读取文件的处理函数generic_file_buffered_read,对其进行改造,创建新的处理函数generic_file_buffered_read_get_addr,不再将数据拷贝到用户空间缓存(copy_page_to_iter),而是直接返回内核缓存地址信息:
73.74.三、添加rdma_sendfile处理模块;在linux操作系统的源代码中,打开文件/kernel/sys.c,添加新的系统调用的具体实现:
[0075][0076]
四、在应用程序进程部分,调用rdma_sendfile系统调用,并在参数中指明文件名(含目录)、远端节点的qp(queue pair,工作队列对)和wr(workrequest,工作请求):
[0077][0078]
本发明在现有的linux文件系统和rdma驱动的基础上,添加了一个新的系统调用rdma_sendfile和对应的处理模块,使rdma驱动可以直接使用文件系统中用于存放从磁盘读取到的数据的内核缓存,避免了从内核缓存到用户缓存的数据拷贝步骤,加速文件传输的处理速度。而对于用户而言,代码示例可以如下:
[0079]
[0080]
本发明在系统调用的处理过程中,以内核已有的rdma网卡驱动和文件系统两个软件模块提供的相关功能为基础,提取内核缓存相关的信息,直接交给rdma网卡硬件使用,避免冗余的内存拷贝操作,降低数据从硬盘搬运到rdma网卡内部缓存的时间,并使得应用程序进程不必再向系统申请缓存,降低了系统内存的消耗,从而通过避免现有文件传输中冗余的内存拷贝操作,降低了文件传输过程中的时间消耗,提高了文件传输的效率。
[0081]
具体来说,本技术整个文件传输中(综合考虑网络上和远端节点的时间消耗)涉及到的数据搬移行为包含下表中的五步,其中给了每个步骤一个典型的硬件性能值,用于计算本发明引起的总体性能的变化。在这种情况下,采用本发明避免了第二步的内存拷贝后,经过计算,传输文件的总时间消耗可以降低8%。
[0082]
第一次dma(从硬盘到内存)3g字节/秒内存拷贝(单核)7g字节/秒第二次dma(从内存到rdma网卡)7g字节/秒本端rdma网卡发送到对端rdma网卡1g字节/秒对端网卡将数据拷贝到应用程序内存7g字节/秒
[0083]
本发明实施例还提供了一种文件传输装置,如图3所示,可以包括:
[0084]
第一读模块11,用于:接收应用程序发起的文件传输请求,在文件传输请求的触发下申请内核缓存,并从磁盘中读取相应文件至内核缓存中;
[0085]
第二读模块12,用于:通过rdma网卡驱动告知rdma网卡硬件发起读操作,以指示rdma网卡硬件读取内核缓存中的文件至rdma网卡硬件的内部缓存中,并将内部缓存中的文件发送至远端节点。
[0086]
本发明实施例提供的一种文件传输装置,第一读模块可以包括:
[0087]
第一读单元,用于:通过dma操作从磁盘中读取相应文件;
[0088]
第二读模块可以包括:
[0089]
第二读单元,用于:指示rdma网卡硬件通过dma操作读取内核缓存中的文件。
[0090]
本发明实施例提供的一种文件传输装置,第一读模块可以包括:
[0091]
申请单元,用于:指示文件系统申请内核缓存,接收文件系统返回的内核缓存地址信息,以供基于内核缓存地址信息将相应文件发送至内核缓存中;其中,内核缓存地址信息为文件系统申请得到的内核缓存的地址信息。
[0092]
本发明实施例提供的一种文件传输装置,还可以包括:
[0093]
调用模块,用于:通过rdma网卡驱动告知rdma网卡硬件发起读操作之前,调用rdma网卡驱动提供的缓存注册接口注册内核缓存,以供rdma网卡硬件基于注册的内核缓存发起读操作;
[0094]
第二读模块可以包括:
[0095]
调用单元,用于:调用rdma网卡驱动提供的指示读接口,指示rdma网卡驱动告知rdma网卡硬件发起读操作。
[0096]
本发明实施例还提供了一种文件传输设备,可以包括:
[0097]
存储器,用于存储计算机程序;
[0098]
处理器,用于执行计算机程序时实现如上任一项文件传输方法的步骤。
[0099]
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有
计算机程序,计算机程序被处理器执行时实现如上任一项文件传输方法的步骤。
[0100]
需要说明的是,本发明实施例提供的一种文件传输装置、设备及存储介质中相关部分的说明请参见本发明实施例提供的一种文件传输方法中对应部分的详细说明,在此不再赘述。另外本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
[0101]
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

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

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

相关文献