一种NFS服务器及其数据写入方法、装置和存储介质与流程

文档序号:22796006发布日期:2020-11-04 03:48阅读:188来源:国知局
一种NFS服务器及其数据写入方法、装置和存储介质与流程

本发明涉及服务器技术领域,特别涉及一种nfs服务器的数据写入方法、装置、nfs服务器及计算机可读存储介质。



背景技术:

nfs(networkfilesystem,网络文件系统)服务器作为服务端对外通过共享目录提供服务,使客户端可以挂载共享目录上来对服务端进行访问数据,对于客户端来说,文件数据的读写带宽是衡量服务端性能的重要指标,在一些业务场景下,比如卫星场景和高性能计算场景,由于数据量较大,读写操作频繁,文件数据的读写带宽是此业务的重大瓶颈,读写带宽的提升迫在眉睫,尤其是多个客户端访问服务端时,服务端性能很容易成为业务的瓶颈。

现有技术中,内核空间(kernbelspace)的缓冲区(kernbelbuffer)与网络套接字的缓冲区(socketbuffer)之间的数据传输过程中经过了两次拷贝,如图1所示,客户端将读请求发送给服务端,服务端收到请求后,将数据读取到kernbelbuffer,然后将数据拷贝到用户空间(userspace)的缓冲区(userbuffer),当要把这些数据发送给客户端时,还需要将数据拷贝到socketbuffer;在某些情况下,这些数据拷贝操作会极大地降低数据传输的性能。这其中也涉及到了用户态和内核态的上下文切换,当多个客户端连接服务端,进行读写数据业务操作时,数据量较大时这样就带来了很多不要的耗时,导致服务端性能下降,业务出现卡顿等问题。

因此,如何能够减少数据拷贝次数,提高数据传输的性能,提升nfs服务器性能,是现今急需解决的问题。



技术实现要素:

本发明的目的是提供一种nfs服务器的数据写入方法、装置、nfs服务器及计算机可读存储介质,以减少数据拷贝次数,提高数据传输的性能,提升nfs服务器性能,是现今急需解决的问题。

为解决上述技术问题,本发明提供一种nfs服务器的数据写入方法,包括:

获取客户端发送的数据写入指令;其中,所述数据写入指令包括文件数据;

通过mmap内存映射,将所述文件数据映射到内核缓冲区;

将所述内核缓冲区中的所述文件数据拷贝到磁盘。

可选的,所述数据写入指令为追加写指令时,所述将所述内核缓冲区中的所述文件数据拷贝到磁盘,包括:

将所述内核缓冲区中的所述文件数据传输到追加缓冲区中;其中,所述追加缓冲区为内核空间中所述内核缓冲区之外的缓冲区;

将所述追加缓冲区的所述文件数据拷贝到所述磁盘。

可选的,所述将所述内核缓冲区中的所述文件数据传输到追加缓冲区中,包括:

通过copy_file_range函数,将所述内核缓冲区中的所述文件数据传输到所述追加缓冲区中。

可选的,该方法还包括:

获取所述客户端发送的数据读取指令;其中,所述数据读取指令包括文件信息;

将所述磁盘中存储的所述文件信息对应的读取文件数据拷贝到内核读缓冲区;

通过sendfile技术,将所述内核读缓冲区中的所述读取文件数据拷贝到套接字缓冲区中,以通过所述套接字缓冲区将所述读取文件数据发送到所述客户端。

本发明还提供了一种nfs服务器的数据写入装置,包括:

写入获取模块,用于获取客户端发送的数据写入指令;其中,所述数据写入指令包括文件数据;

映射模块,用于通过mmap内存映射,将所述文件数据映射到内核缓冲区;

写入模块,用于将所述内核缓冲区中的所述文件数据拷贝到磁盘。

可选的,所述数据写入指令为追加写指令时,所述写入模块,包括:

中转子模块,用于将所述内核缓冲区中的所述文件数据传输到追加缓冲区中;其中,所述追加缓冲区为内核空间中所述内核缓冲区之外的缓冲区;

写入子模块,用于将所述追加缓冲区的所述文件数据拷贝到所述磁盘。

可选的,所述中转子模块具体用于通过copy_file_range函数,将所述内核缓冲区中的所述文件数据传输到所述追加缓冲区中。

可选的,该装置还包括:

读取获取模块,用于获取所述客户端发送的数据读取指令;其中,所述数据读取指令包括文件信息;

拷贝模块,用于将所述磁盘中存储的所述文件信息对应的读取文件数据拷贝到内核读缓冲区;

读取模块,用于通过sendfile技术,将所述内核读缓冲区中的所述读取文件数据拷贝到套接字缓冲区中,以通过所述套接字缓冲区将所述读取文件数据发送到所述客户端。

本发明还提供了一种nfs服务器,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上述任一项所述的nfs服务器的数据写入方法的步骤。

本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述的nfs服务器的数据写入方法的步骤。

本发明所提供的一种nfs服务器的数据写入方法,包括:获取客户端发送的数据写入指令;其中,数据写入指令包括文件数据;通过mmap内存映射,将文件数据映射到内核缓冲区;将内核缓冲区中的文件数据拷贝到磁盘;

可见,本发明在客户端发送写请求时,通过mmap内存映射的使用,将文件数据映射到内核缓冲区,使用户空间可以共享内核空间的数据,减少了内核空间与用户空间之间的数据拷贝,从而提高了数据传输的性能,提升了nfs服务器性能。此外,本发明还提供了一种nfs服务器的数据写入装置、nfs服务器及计算机可读存储介质,同样具有上述有益效果。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为现有技术中的数据在用户空间和内核空间传输过程的示意图;

图2为本发明实施例所提供的一种nfs服务器的数据写入方法的流程图;

图3为应用mmap技术数据在用户空间和内核空间传输过程的示意图;

图4为应用mmap技术文件在内存中映射的示意图;

图5为本发明实施例所提供的另一种nfs服务器的数据写入方法的数据写入磁盘过程的流程示意图;

图6为本发明实施例所提供的另一种nfs服务器的数据写入方法的sendfile技术应用的示意图;

图7为本发明实施例所提供的一种nfs服务器的数据写入装置的结构框图;

图8为本发明实施例所提供的一种nfs服务器的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参考图2,图2为本发明实施例所提供的一种nfs服务器的数据写入方法的流程图。该方法可以包括:

步骤101:获取客户端发送的数据写入指令;其中,数据写入指令包括文件数据。

可以理解的是,本步骤中的数据写入指令可以为作为服务端的nfs服务器接收的客户端发送的写请求对应的指令。具体的,本实施例并不限定数据写入指令的具体类型,如数据写入指令可以为具体为追加写请求对应的追加写指令,也可以为覆盖写请求对应的覆盖写指令。

对应的,本步骤中的文件数据可以为写请求对应的数据,即需要写入nfs服务器的磁盘中的数据。

需要说明的是,本实施例并不限定nfs服务器中的处理器获取客户端发送的数据写入指令的具体方式,如nfs服务器中的处理器可以采用与现有技术相同或相似的方式,从套接字缓冲区(socketbuffer)中获取客户端发送的数据写入指令,即客户端发送的数据写入指令可以采用与现有技术相同或相似的方式传输到nfs服务器的socketbuffer。

步骤102:通过mmap内存映射,将文件数据映射到内核缓冲区。

可以理解的是,如图3和图4所示,本步骤的目的可以为处理器通过mmap的内存映射,将文件数据映射到内核空间的缓冲区(即内核缓冲区,kernbelbuffer),从而使用户空间可以共享内核空间的文件数据;也就是说,用户空间的缓冲区(即用户缓冲区,userbuffer)共享内核缓冲区中的文件数据。通过mmap技术的使用,使文件的写操作跨过了页缓存,减少了文件数据的拷贝次数,提高了文件的写入效率;并且实现了用户空间和内核空间的高效交互,使得两空间的各自修改操作可以直接反映在映射的区域内,从而被对方空间及时捕捉;而且能够实现高效的大规模数据传输。

具体的,mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read和write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。

步骤103:将内核缓冲区中的文件数据拷贝到磁盘。

可以理解的是,本步骤的目的可以为处理器通过将内核缓冲区中的文件数据拷贝到磁盘中,完成文件数据的写入。

对应的,对于本步骤中处理器将内核缓冲区中的文件数据拷贝到磁盘的具体方式,可以由设计人员根据使用场景和用户需求自行设置,如可以直接将内核缓冲区中的文件数据拷贝到磁盘。为了解决追加写场景mmap的表现不良的问题,在通过mmap内存映射将文件数据映射到内核缓冲区后,文件数据可以并不通过内核缓冲区直接传输到磁盘,而是先将内核缓冲区里的文件数据传输到内核空间的另一个缓冲区(即追加缓冲区),再将追加缓冲区中的文件数据传输到磁盘进行数据写入,从而使内核缓冲区可以作为一个中转站,用于暂存追加写的内容(即文件数据),通过将追加写的内容填充到追加缓冲区,解决追加写的问题;即处理器将内核缓冲区中的文件数据传输到追加缓冲区中;将追加缓冲区的文件数据拷贝到磁盘;其中,追加缓冲区为内核空间中内核缓冲区之外的缓冲区。处理器还可以采用上述两种方式结合的方式,将内核缓冲区中的文件数据拷贝到磁盘;例如数据写入指令为覆盖写指令时,处理器可以直接将内核缓冲区中的文件数据拷贝到磁盘;数据写入指令为追加写指令时,处理器可以将内核缓冲区中的文件数据传输到追加缓冲区中;将追加缓冲区的文件数据拷贝到磁盘。

具体的,本实施例并不限定上述处理器将内核缓冲区中的文件数据传输到追加缓冲区中的具体方式,如图5所示,处理器可以通过copy_file_range函数,将内核缓冲区(kernbelbuffer)中的文件数据传输到追加缓冲区(buffer)中。

可以理解的是,本实施例是以nfs服务器利用mmap技术处理客户端的写请求为例进行展示;对应的,nfs服务器可以通过sendfile技术处理客户端的读请求,以利用sendfile技术在读操作过程中避免相应的内核空间的缓冲区(即内核读缓冲区)与用户空间的缓冲区之间的数据拷贝,如图6所示,作为服务端的nfs服务器收到客户端的读请求的指令(即数据读取指令)时,可以先将对应的数据(即读取文件数据)从磁盘中读取到内核读缓冲区(kernbelbuffer),相较于图1所示传统的读操作流程,利用sendfile技术将数据拷贝到套接字缓冲区(socketbuffer)中,然后再传输给客户端。

也就是说,本实施例所提供的方法还可以包括:获取客户端发送的数据读取指令;其中,数据读取指令包括文件信息;将磁盘中存储的文件信息对应的读取文件数据拷贝到内核读缓冲区;通过sendfile技术,将内核读缓冲区中的读取文件数据拷贝到套接字缓冲区中,以通过套接字缓冲区将读取文件数据发送到客户端。

本实施例中,本发明实施例在客户端发送写请求时,通过mmap内存映射的使用,将文件数据映射到内核缓冲区,使用户空间可以共享内核空间的数据,减少了内核空间与用户空间之间的数据拷贝,从而提高了数据传输的性能,提升了nfs服务器性能。

请参考图7,图7为本发明实施例所提供的一种nfs服务器的数据写入装置的结构框图。该装置可以包括:

写入获取模块10,用于获取客户端发送的数据写入指令;其中,数据写入指令包括文件数据;

映射模块20,用于通过mmap内存映射,将文件数据映射到内核缓冲区;

写入模块30,用于将内核缓冲区中的文件数据拷贝到磁盘。

可选的,数据写入指令为追加写指令时,写入模块30,可以包括:

中转子模块,用于将内核缓冲区中的文件数据传输到追加缓冲区中;其中,追加缓冲区为内核空间中内核缓冲区之外的缓冲区;

写入子模块,用于将追加缓冲区的文件数据拷贝到磁盘。

可选的,中转子模块可以具体用于通过copy_file_range函数,将内核缓冲区中的文件数据传输到追加缓冲区中。

可选的,该装置还可以包括:

读取获取模块,用于获取客户端发送的数据读取指令;其中,数据读取指令包括文件信息;

拷贝模块,用于将磁盘中存储的文件信息对应的读取文件数据拷贝到内核读缓冲区;

读取模块,用于通过sendfile技术,将内核读缓冲区中的读取文件数据拷贝到套接字缓冲区中,以通过套接字缓冲区将读取文件数据发送到客户端。

本实施例中,本发明实施例在客户端发送写请求时,通过映射模块20中mmap内存映射的使用,将文件数据映射到内核缓冲区,使用户空间可以共享内核空间的数据,减少了内核空间与用户空间之间的数据拷贝,从而提高了数据传输的性能,提升了nfs服务器性能。

请参考图8,图8为本发明实施例所提供的一种nfs服务器的结构示意图。该nfs服务器可以包括:

存储器11,用于存储计算机程序;处理器12,用于执行该计算机程序时实现如上述实施例所提供的nfs服务器的数据写入方法的步骤。

nfs服务器可以包括存储器11、处理器12和总线13。

其中,存储器11至少包括一种类型的可读存储介质,该可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是nfs服务器的内部存储单元,例如服务器的硬盘。存储器11在另一些实施例中也可以是nfs服务器的外部存储设备,例如服务器上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,存储器11还可以既包括nfs服务器的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于nfs服务器的应用软件及各类数据,例如:执行nfs服务器的数据写入方法的程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。

处理器12在一些实施例中可以是一中央处理器(centralprocessingunit,cpu)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行nfs服务器的数据写入方法的程序的代码等。

该总线13可以是外设部件互连标准(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称eisa)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

进一步地,nfs服务器还可以包括网络接口14,网络接口14可选的可以包括有线接口和/或无线接口(如wi-fi接口、蓝牙接口等),通常用于在该nfs服务器与其他电子设备之间建立通信连接。

可选地,该nfs服务器还可以包括用户接口15,用户接口15可以包括显示器(display)、输入单元比如键盘(keyboard),可选的用户接口15还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是led显示器、液晶显示器、触控式液晶显示器以及oled(organiclight-emittingdiode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在nfs服务器中处理的信息以及用于显示可视化的用户界面。

图8仅示出了具有组件11-15的nfs服务器,本领域技术人员可以理解的是,图8示出的结构并不构成对nfs服务器的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。

此外,本发明实施例还公开了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现如上述实施例所提供的nfs服务器的数据写入方法的步骤。

其中,该存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置、nfs服务器及计算机可读存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

以上对本发明所提供的一种nfs服务器的数据写入方法、装置、nfs服务器及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1