一种基于通用网络文件系统写入数据的方法及装置与流程

文档序号:16815350发布日期:2019-02-10 14:22阅读:172来源:国知局
一种基于通用网络文件系统写入数据的方法及装置与流程

本申请涉及通信技术领域,具体而言,涉及一种基于通用网络文件系统(cifs,commoninternetfilessystem)写入数据的方法及装置。



背景技术:

cifs是为网络中的windows/linux/macos等各种不同操作系统的计算机设备提供向远程服务器进行访问的一种通信协议。在网络附属存储(nas,networkattachedstorage)集群中,节点中的nas共享文件是基于cifs服务器实现数据传输,为计算机设备提供共享和数据备份的文件。以windows操作系统为例,windows客户端可以通过cifs服务器访问节点中的nas共享文件。其中,cifs服务器基于服务器信息块(smb,servermessageblock)协议与windows客户端以及节点传输数据。

由于cifs服务器采用smb协议,smb2.1及以上协议支持大型最大传输单元(largemtu,largemaximumtransmissionunit)功能。开启largemtu功能,cifs服务器最大支持8mb读写,不开启largemtu功能,最大支持64k读写。因而,在cifs服务器开启largemtu功能,而windows客户端默认不开启largemtu功能的情形下,如果windows客户端需要将较大的文件通过cifs服务器写入nas共享文件,需要将待写入文件分割为最大为64kb的smb报文数据,每一分割的smb报文数据对应一文件写请求,传输至cifs服务器。cifs服务器缓存smb报文数据,向windows客户端返回写入成功信息,再将缓存的smb报文数据依次写入节点中的nas共享文件。

但该基于cifs服务器向nas共享文件写入数据的方法,如果存在大量客户端并发写入数据的情形,由于每一次写操作仅向节点写入64kb,而cifs服务器每次写操作能够支持的为8mb。因而,为了有效利用cifs服务器的带宽资源,需要节点的每秒操作数(ops,operationpersecond)达到较高的数值才能实现。但由于节点的ops性能有限,例如,每一节点支持的ops为100,而有效利用cifs服务器带宽资源要求的ops为2000,因而,目前的数据写入方法将使得cifs服务器向节点的写操作对应的带宽资源得不到有效利用,导致带宽资源的浪费,nas集群性能不高。



技术实现要素:

有鉴于此,本申请的目的在于提供一种基于通用网络文件系统写入数据的方法和装置,用于解决现有技术中带宽资源的有效利用率较低的问题。

第一方面,本申请实施例提供了一种基于通用网络文件系统写入数据的方法,应用于通用网络文件系统cifs服务器,该方法包括:

所述cifs服务器接收文件写请求,启用一线程将所述文件写请求中的服务器信息块smb报文数据写入预设的存储区;

所述cifs服务器在监测到所述smb报文数据写入预设的存储区后,将所述线程阻塞,以及,将所述阻塞的线程的线程标识置入预设的等待队列链表中;

所述cifs服务器在确定所述等待队列链表中的一线程标识对应的线程被唤醒后,将所述等待队列链表中的各线程标识写入预设的同步队列链表中,清空所述等待队列链表;

所述cifs服务器指示被唤醒的线程读取所述同步队列链表中所有线程标识在所述存储区的smb报文数据,将读取的smb报文数据写入磁盘;

所述cifs服务器在监测到所述写入磁盘完成后,遍历所述同步队列链表中,依次向被遍历线程标识映射的客户端返回写入成功信息,并在向最后一被遍历线程标识映射的客户端返回写入成功信息后,唤醒所述等待队列链表中的一线程标识对应的线程。

可选地,在所述cifs服务器接收文件写请求后,启用一线程之前,所述方法还包括:

cifs服务器确认接收的文件写请求是否为客户端首次发起的请求,如果是,为该客户端开启一进程,并为该开启的进程配置多个线程,从配置的多个线程中执行所述启用一线程的步骤,如果否,从预先配置的多个线程中执行所述启用一线程的步骤。

可选地,所述在向最后一被遍历线程标识映射的客户端返回写入成功信息后,唤醒所述等待队列链表中的一线程之前,所述方法还包括:

判断所述等待队列链表中是否存在线程标识,如果存在,执行所述唤醒所述等待队列链表中的一线程标识对应的线程的步骤,如果不存在,释放线程标识对应的进程。

可选地,所述cifs服务器在监测到所述写入磁盘完成后,遍历所述同步队列链表中,依次向被遍历线程标识映射的客户端返回写入成功信息,并在向最后一被遍历线程标识映射的客户端返回写入成功信息后,唤醒所述等待队列链表中的一线程标识对应的线程,包括:

所述cifs服务器在监测到所述写入磁盘完成后,从所述同步队列链表中,删除所述被唤醒的线程对应的线程标识;

向所述被唤醒的线程对应的线程标识映射的客户端返回写入成功信息;

确定所述同步队列链表不为空,从所述同步队列链表中,提取一线程标识,删除所述同步队列链表中提取的线程标识;

向提取的线程标识映射的客户端返回写入成功信息,直至所述同步队列链表为空后,唤醒所述等待队列链表中的一线程。

可选地,所述方法还包括:

删除该写入成功信息对应的线程在所述存储区写入的smb报文数据。

第二方面,本申请实施例提供了一种基于通用网络文件系统写入数据的装置,该装置包括:

第一写入模块,用于接收文件写请求,启用一线程将所述文件写请求中的服务器信息块smb报文数据写入预设的存储区;

等待队列链表构建模块,用于在监测到所述smb报文数据写入预设的存储区后,将所述线程阻塞,以及,将所述阻塞的线程的线程标识置入预设的等待队列链表中;

同步队列链表构建模块,用于在确定所述等待队列链表中的一线程标识对应的线程被唤醒后,将所述等待队列链表中的各线程标识写入预设的同步队列链表中,清空所述等待队列链表;

第二写入模块,用于指示被唤醒的线程读取所述同步队列链表中所有线程标识在所述存储区的smb报文数据,将读取的smb报文数据写入磁盘;

响应模块,用于在监测到所述写入磁盘完成后,遍历所述同步队列链表中,依次向被遍历线程标识映射的客户端返回写入成功信息,并在向最后一被遍历线程标识映射的客户端返回写入成功信息后,唤醒所述等待队列链表中的一线程标识对应的线程。

可选地,所述第一写入模块还用于:

确认接收的文件写请求是否为客户端首次发起的请求,如果是,为该客户端开启一进程,并为该开启的进程配置多个线程,从配置的多个线程中执行所述启用一线程的步骤,如果否,从预先配置的多个线程中执行所述启用一线程的步骤。

可选地,所述响应模块还用于:

判断所述等待队列链表中是否存在线程标识,如果存在,执行所述唤醒所述等待队列链表中的一线程标识对应的线程的步骤,如果不存在,在确认发送所述文件写请求的客户端退出所述cifs服务器后,释放线程标识对应的进程。

可选地,所述响应模块具体用于:

在监测到所述写入磁盘完成后,从所述同步队列链表中,删除所述被唤醒的线程对应的线程标识;向所述被唤醒的线程对应的线程标识映射的客户端返回写入成功信息;确定所述同步队列链表不为空,从所述同步队列链表中,提取一线程标识,删除所述同步队列链表中提取的线程标识;向提取的线程标识映射的客户端返回写入成功信息,直至所述同步队列链表为空后,唤醒所述等待队列链表中的一线程。

可选地,所述装置还包括:

资源释放模块,用于删除该写入成功信息对应的线程在所述存储区写入的smb报文数据。

第三方面,本申请实施例提供了一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。

第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述的方法的步骤。

本申请实施例提供的一种基于通用网络文件系统写入数据的方法,通过设置等待队列链表以及同步队列链表,等待队列链表用于存储待唤醒线程标识,并在一线程标识对应的线程被唤醒后,将等待队列链表中的所有线程标识剪切至同步队列链表,并由唤醒的线程执行同步队列链表中所有线程标识映射的文件数据写入。这样,由于有效提升了一次ops写入的文件数据量,可以避免带宽资源被浪费,从而提高nas集群的带宽资源利用率。

为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的基于通用网络文件系统写入数据的方法流程示意图;

图2为本申请实施例提供的基于图1的步骤105的流程示意图;

图3为本申请实施例提供的基于通用网络文件系统写入数据的装置结构示意图;

图4为本申请实施例提供的一种计算机设备400的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。

图1为本申请实施例提供的基于通用网络文件系统写入数据的方法流程示意图。如图1所示,该方法应用于cifs服务器,该方法包括:

步骤101,所述cifs服务器接收文件写请求,启用一线程将所述文件写请求中的smb报文数据写入预设的存储区;

本申请实施例中,cifs服务器接收来自客户端的文件写请求后,启用一线程对该接收的文件写请求进行处理,启动的线程将文件写请求中包含的smb报文数据写入预设的存储区。其中,作为一可选实施例,该启用的线程为发送文件写请求的客户端配置的进程中的一线程。

本申请实施例中,通过在cifs服务器中启用多线程,每一线程用于处理一文件写请求(write请求)。这样,采用并发方式对文件写请求进行处理,可以有效提升处理文件写请求的效率。

本申请实施例中,作为一可选实施例,预设的存储区包括:页高速缓冲存储器(pagecache)、内存、缓存等。

本申请实施例中,由于客户端默认支持64kb读写。因而,对于需要将较大的待写入文件写入磁盘的情形,客户端将该待写入文件分割为最大为64kb的多个smb报文数据,每一smb报文数据对应一文件写请求,传输至cifs服务器。例如,对于客户端需要将1m大小的文件写入磁盘的情形,客户端发送16个文件写请求以传输1m文件,cifs服务器为该客户端配置一进程并启用16个线程,分别处理16个文件写请求。

本申请实施例中,作为一可选实施例,在所述cifs服务器接收文件写请求后,启用一线程之前,该方法还包括:

cifs服务器确认接收的文件写请求是否为客户端首次发起的请求,如果是,为该客户端开启一进程,并为该开启的进程配置多个线程,从配置的多个线程中执行所述启用一线程的步骤,如果否,从预先配置的多个线程中执行所述启用一线程的步骤。

本申请实施例中,通过为每一进行数据写操作的客户端配置一进程。这样,便于对客户端的待写入数据在节点进行管理,例如,可以依据进程标识,将同一客户端写入的数据写入同一磁盘中。

本申请实施例中,作为一可选实施例,为每一进程配置多个线程。这样,可以并行处理文件写请求,提升文件写请求处理效率。作为另一可选实施例,线程的数量可依据实际需要进行配置,例如,对于cifs服务器最大支持8mb读写,windows客户端默认为64kb读写的情形,线程的数量可以配置为16。当然,实际应用中,也可以配置为8或其他值,例如,24。

步骤102,所述cifs服务器在监测到所述smb报文数据写入预设的存储区后,将所述线程阻塞,以及,将所述阻塞的线程的线程标识置入预设的等待队列链表中;

本申请实施例中,在nas集群中,包括有多个节点,一节点中包括有一个或多个(共享)磁盘,一共享磁盘下,设置有一个或多个nas共享文件。某一客户端需要将文件写入某一节点的某一共享磁盘的某一nas共享文件中,需要将该文件先写入cifs服务器进行缓存,再由cifs服务器将缓存的文件写入nas共享文件。

本申请实施例中,对于同一smb报文数据,由同一进程负责将该smb报文数据写入cifs服务器进行缓存,以及,将缓存的该smb报文数据写入nas共享文件。其中,将缓存的该smb报文数据写入nas共享文件也称之为数据同步(fsync),通过调用nas集群中预设的封装函数实现。

本申请实施例中,作为一可选实施例,如果监测到将smb报文数据写入存储区的线程执行调用预设的封装函数,则可确定该线程已经完成将smb报文数据写入存储区的流程。将该线程阻塞,并将该线程的线程标识置入预设的等待队列链表中,使得该线程等待被cifs服务器唤醒,以减少数据同步的调用次数。

本申请实施例中,作为一可选实施例,线程标识可以用一个自增长的正整数来表征。

步骤103,所述cifs服务器在确定所述等待队列链表中的一线程标识对应的线程被唤醒后,将所述等待队列链表中的各线程标识写入预设的同步队列链表中,清空所述等待队列链表;

本申请实施例中,通过设置一等待队列链表以及一同步队列链表。其中,等待队列链表用于存储已完成将smb报文数据写入预设的存储区的线程标识,等待队列链表的长度,即可写入的线程标识数可依据实际需要进行设置,同步队列链表用于存储已完成将smb报文数据写入预设的存储区、但还未完成将存储区的smb报文数据写入nas共享文件的线程标识。

本申请实施例中,作为一可选实施例,等待队列链表设置有客户端标识或进程标识,同步队列链表设置有客户端标识或进程标识。这样,每一客户端对应一等待队列链表和一同步队列链表,使得文件写入更易于实现。

步骤104,所述cifs服务器指示被唤醒的线程读取所述同步队列链表中所有线程标识在所述存储区的smb报文数据,将读取的smb报文数据写入磁盘;

本申请实施例中,在将存储区中的smb报文数据写入磁盘,例如,磁盘中的nas共享文件的过程中,为避免写入混乱或写入的数据不一致,一次只能有一个线程执行写入操作。在一线程执行向nas共享文件写入时,设置同步锁,使得其它线程不能向nas共享文件执行写入操作。只有在该线程释放同步锁后,其他线程才能竞争设置同步锁。

本申请实施例中,作为一可选实施例,线程在将smb报文数据写入存储区后,需要执行向nas共享文件的写入操作时,先将自己加入到一全局的等待队列链表中。等待队列链表中的多个线程按时间顺序排序形成等待队列,等待正在调用预设的封装函数的线程释放同步锁后,唤醒等待队列链表的一线程。

本申请实施例中,作为一可选实施例,被唤醒的线程为等待队列链表的第一个线程标识对应的线程。当然,实际应用中,也可以是等待队列链表的随机一线程标识对应的线程。

本申请实施例中,被唤醒的线程将同步队列链表中所有线程标识写入在存储区的smb报文数据,同步(写入)至预先设置的nas共享文件。这样,通过一次线程写入操作向nas共享文件执行写入操作,能够写入多个线程写入在存储区的smb报文数据,从而可以避免每一线程写入操作仅将存储区中该线程对应的smb报文数据写入nas共享文件导致的ops较高的情形。使得在同样的cifs服务器带宽资源下,可有效减少ops数值,而在同样ops数值的情形下,可以有效提升cifs服务器带宽资源。

本申请实施例中,举例来说,例如,以包括5个节点的nas集群为例,假设需要使cifs服务器带宽资源或nas集群带宽资源达到5gb/s。若采用现有技术,每一写文件请求(一次ops)对应64kb,则需要的总ops数达到8万,平均每个节点的ops数为16000。假设每个节点设置有20块硬盘(磁盘),则平均每块硬盘的ops数至少为800。显然,一般普通硬盘无法达到该要求。以目前每块硬盘的ops数为50为例,则nas集群的带宽资源仅为0.3125(5/16)gb/s,远未达到5gb/s。而采用本申请实施例的方法,16个写文件请求执行一次文件写入到nas共享文件的操作,一次ops对应写入,仍以目前每块硬盘的ops数为50为例,一次ops对应1mb,对于包含5个节点,每一节点设置有20块磁盘的nas集群,该nas集群可以达到5gb/s的带宽。

步骤105,所述cifs服务器在监测到所述写入磁盘完成后,遍历所述同步队列链表中,依次向被遍历线程标识映射的客户端返回写入成功信息,并在向最后一被遍历线程标识映射的客户端返回写入成功信息后,唤醒所述等待队列链表中的一线程标识对应的线程。

本申请实施例中,作为一可选实施例,cifs服务器在监测到同步队列链表中所有线程标识存储在存储区的smb报文数据被全部写入nas共享文件后,依次向相应客户端返回写入成功信息,使得客户端继续在发送窗口内进行文件写请求发送操作。这样,能够有效保障写入nas共享文件中的smb报文数据的一致性以及完整性。例如,如果在被唤醒的线程将同步队列链表中所有线程对应的smb报文数据同步至nas共享文件的过程中,链路发生异常或nas集群断电,存储区中未写入nas共享文件的smb报文数据将会丢失,但由于cifs服务器未向客户端返回写入成功信息,客户端在预定时间内未收到写入成功信息,会在链路恢复正常或nas集群恢复供电后,重传未收到写入成功信息的文件写请求,从而可以使得写入nas共享文件中的smb报文数据与客户端需写入的数据一致,保障写入到nas共享文件中数据的一致性以及完整性。

图2为本申请实施例提供的基于图1的步骤105的流程示意图。如图2所示,该方法包括:

步骤201,所述cifs服务器在监测到所述写入nas共享文件完成后,从所述同步队列链表中,删除所述被唤醒的线程对应的线程标识;

本申请实施例中,删除同步队列链表中被唤醒的线程对应的线程标识,表征释放该被唤醒的线程占用的同步锁,其它线程可以申请该释放的同步锁。

步骤202,向所述被唤醒的线程对应的线程标识映射的客户端返回写入成功信息;

本申请实施例中,向客户端返回写入成功信息,客户端可以继续进行文件写请求传输。

步骤203,确定所述同步队列链表不为空,从所述同步队列链表中,提取一线程标识,删除所述同步队列链表中提取的线程标识;

本申请实施例中,提取的线程标识对应的线程被唤醒,获取同步锁。但由于该线程在同步队列链表中的数据同步已被执行完毕,因而,无需执行数据同步,直接执行删除所述同步队列链表中该线程标识的步骤,以释放该线程标识对应的线程占用的同步锁。这样,每一线程执行一次同步锁申请及占用,与现有技术处理流程相似,无需进行较大改动。

本申请实施例中,作为一可选实施例,依次提取同步队列链表中的线程标识。

步骤204,向提取的线程标识映射的客户端返回写入成功信息,直至所述同步队列链表为空后,唤醒所述等待队列链表中的一线程。

本申请实施例中,作为一可选实施例,需要向同步队列链表中的每一线程标识映射的客户端返回一写入成功信息。

本申请实施例中,作为一可选实施例,如果文件写请求对应客户端的进程的第一个线程,由于没有同步锁被锁定。因而,第一个线程在将smb报文数据写入存储区后,将第一个线程标识置入等待队列链表中,cifs服务器唤醒等待队列链表中的第一个线程标识对应的第一个线程,并将第一个线程标识置于同步队列链表中。因此,初始时,等待队列链表以及同步队列链表中均只有一个线程标识。

本申请实施例中,作为一可选实施例,所述在向最后一被遍历线程标识映射的客户端返回写入成功信息后,唤醒所述等待队列链表中的一线程之前,该方法还包括:

判断所述等待队列链表中是否存在线程标识,如果存在,执行所述唤醒所述等待队列链表中的一线程标识对应的线程的步骤,如果不存在,在确认发送所述文件写请求的客户端退出所述cifs服务器后,释放线程标识对应的进程。

本申请实施例中,作为一可选实施例,由于进程的建立和释放需要耗费资源,因而,可以基于建立和释放进程需要的耗费资源以及释放该进程能够新增的资源进行权衡,以确定是否释放进程。例如,如果等待队列链表中不存在任何线程标识,表明客户端传输文件写请求完毕,且在该客户端退出cifs服务器后,则可以释放为该客户端启用的进程;而在客户端未退出cifs服务器前,即使客户端传输文件写请求完毕,也一直维护为该客户端启用的进程。

本申请实施例中,作为一可选实施例,该方法还包括:

在返回写入成功信息后,删除该写入成功信息对应的线程在所述存储区写入的smb报文数据。

本申请实施例中,通过设置等待队列链表以及同步队列链表,等待队列链表用于存储等待同步锁申请的线程标识唤醒,并在一线程标识对应的线程被授权同步锁唤醒后,将等待队列链表中的所有线程标识剪切至同步队列链表,并由唤醒的线程执行同步队列链表中所有线程标识映射的文件数据写入。这样,有效提升了一次ops写入的文件数据量,从而提高了nas集群的带宽资源;或者,在保障nas集群带宽资源的情形下,由于有效提升一次ops写入的文件数据量,可以降低cifs服务器向节点写入文件数据的ops数,从而能够降低节点对ops数的要求,从而降低节点成本;而且,通过将文件数据写入nas共享文件后向客户端返回写入成功信息,能够保障写入的文件数据的安全性,降低掉电导致的文件数据丢失概率。

图3为本申请实施例提供的基于通用网络文件系统写入数据的装置结构示意图。如图3所示,该装置包括:

第一写入模块301,用于接收文件写请求,启用一线程将所述文件写请求中的smb报文数据写入预设的存储区;

本申请实施例中,作为一可选实施例,启用的线程为发送文件写请求的客户端配置的进程中的一线程。

本申请实施例中,作为一可选实施例,预设的存储区包括:页高速缓冲存储器、内存、缓存等。

等待队列链表构建模块302,用于在监测到所述smb报文数据写入预设的存储区后,将所述线程阻塞,以及,将所述阻塞的线程的线程标识置入预设的等待队列链表中;

本申请实施例中,对于同一smb报文数据,由同一进程负责将该smb报文数据写入cifs服务器进行缓存,以及,将缓存的该smb报文数据写入磁盘。

本申请实施例中,作为一可选实施例,线程标识可以用一个自增长的正整数来表征。

同步队列链表构建模块303,用于在确定所述等待队列链表中的一线程标识对应的线程被唤醒后,将所述等待队列链表中的各线程标识写入预设的同步队列链表中,清空所述等待队列链表;

本申请实施例中,作为一可选实施例,等待队列链表设置有客户端标识或进程标识,同步队列链表设置有客户端标识或进程标识。这样,每一客户端对应一等待队列链表和一同步队列链表,使得文件写入更易于实现。

第二写入模块304,用于指示被唤醒的线程读取所述同步队列链表中所有线程标识在所述存储区的smb报文数据,将读取的smb报文数据写入磁盘;

本申请实施例中,在将存储区中的smb报文数据写入磁盘的过程中,为避免写入混乱或写入的数据不一致,一次只能有一个线程执行写入操作。在一线程执行向nas共享文件写入时,设置同步锁,使得其它线程不能向磁盘执行写入操作。只有在该线程释放同步锁后,其他线程才能竞争设置同步锁。

本申请实施例中,作为一可选实施例,被唤醒的线程为等待队列链表的第一个线程标识对应的线程。

响应模块305,用于在监测到所述写入磁盘完成后,遍历所述同步队列链表中,依次向被遍历线程标识映射的客户端返回写入成功信息,并在向最后一被遍历线程标识映射的客户端返回写入成功信息后,唤醒所述等待队列链表中的一线程标识对应的线程。

本申请实施例中,作为一可选实施例,cifs服务器在监测到同步队列链表中所有线程标识存储在存储区的smb报文数据被全部写入磁盘后,依次向相应客户端返回写入成功信息,使得客户端继续在发送窗口内进行文件写请求发送操作。这样,能够有效保障写入nas共享文件中的smb报文数据的一致性以及完整性。

本申请实施例中,作为一可选实施例,第一写入模块301还用于:

确认接收的文件写请求是否为客户端首次发起的请求,如果是,为该客户端开启一进程,并为该开启的进程配置多个线程,从配置的多个线程中执行所述启用一线程的步骤,如果否,从预先配置的多个线程中执行所述启用一线程的步骤。

本申请实施例中,通过为每一进行数据写操作的客户端配置一进程。这样,便于对客户端的待写入数据在节点进行管理,例如,可以依据进程标识,将同一客户端写入的数据写入同一nas共享文件中。

本申请实施例中,作为一可选实施例,响应模块305还用于:

判断所述等待队列链表中是否存在线程标识,如果存在,执行所述唤醒所述等待队列链表中的一线程标识对应的线程的步骤,如果不存在,在确认发送所述文件写请求的客户端退出所述cifs服务器后,释放线程标识对应的进程。

本申请实施例中,作为一可选实施例,如果等待队列链表中不存在任何线程标识,表明客户端传输文件写请求完毕,则在该客户端退出cifs服务器后,可以释放为该客户端启用的进程。

本申请实施例中,作为一可选实施例,响应模块305具体用于:

在监测到所述写入磁盘完成后,从所述同步队列链表中,删除所述被唤醒的线程对应的线程标识;向所述被唤醒的线程对应的线程标识映射的客户端返回写入成功信息;确定所述同步队列链表不为空,从所述同步队列链表中,提取一线程标识,删除所述同步队列链表中提取的线程标识;向提取的线程标识映射的客户端返回写入成功信息,直至所述同步队列链表为空后,唤醒所述等待队列链表中的一线程。

本申请实施例中,删除同步队列链表中被唤醒的线程对应的线程标识,表征释放该被唤醒的线程占用的同步锁,其它线程可以申请该释放的同步锁。

本申请实施例中,作为一可选实施例,该装置还包括:

资源释放模块(图中未示出),用于删除该写入成功信息对应的线程在所述存储区写入的smb报文数据。

如图4所示,本申请一实施例提供了一种计算机设备400,用于执行图1中的基于通用网络文件系统写入数据的方法,该设备包括存储器401、处理器402及存储在该存储器401上并可在该处理器402上运行的计算机程序,其中,上述处理器402执行上述计算机程序时实现上述基于通用网络文件系统写入数据的方法的步骤。

具体地,上述存储器401和处理器402能够为通用的存储器和处理器,这里不做具体限定,当处理器402运行存储器401存储的计算机程序时,能够执行上述基于通用网络文件系统写入数据的方法,用于解决现有技术中带宽资源的有效利用率较低的问题,本申请通过设置等待队列链表以及同步队列链表,等待队列链表用于存储等待同步锁申请的线程标识唤醒,并在一线程标识对应的线程被授权同步锁唤醒后,将等待队列链表中的所有线程标识剪切至同步队列链表,并由唤醒的线程执行同步队列链表中所有线程标识映射的文件数据写入。这样,可以有效提升一次ops写入的文件数据量,从而提高了nas集群的带宽资源有效利用率;而且,通过将文件数据写入nas共享文件后向客户端返回写入成功信息,能够保障写入的文件数据的安全性,降低掉电导致的文件数据丢失概率。

对应于图1中的基于通用网络文件系统写入数据的方法,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述基于通用网络文件系统写入数据的方法的步骤。

具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述基于通用网络文件系统写入数据的方法,用于解决现有技术中带宽资源的有效利用率较低的问题,本申请通过设置等待队列链表以及同步队列链表,等待队列链表用于存储等待同步锁申请的线程标识唤醒,并在一线程标识对应的线程被授权同步锁唤醒后,将等待队列链表中的所有线程标识剪切至同步队列链表,并由唤醒的线程执行同步队列链表中所有线程标识映射的文件数据写入。这样,可以有效提升一次ops写入的文件数据量,从而提高了nas集群的带宽资源有效利用率;而且,通过将文件数据写入nas共享文件后向客户端返回写入成功信息,能够保障写入的文件数据的安全性,降低掉电导致的文件数据丢失概率。

在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请提供的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围。都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

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