CN100517335C - 一种分布式文件***的文件写入***和方法 - Google Patents
一种分布式文件***的文件写入***和方法 Download PDFInfo
- Publication number
- CN100517335C CN100517335C CNB2007101679005A CN200710167900A CN100517335C CN 100517335 C CN100517335 C CN 100517335C CN B2007101679005 A CNB2007101679005 A CN B2007101679005A CN 200710167900 A CN200710167900 A CN 200710167900A CN 100517335 C CN100517335 C CN 100517335C
- Authority
- CN
- China
- Prior art keywords
- descriptor
- predistribution
- file destination
- piece
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种分布式文件***的文件写入***和方法,可以在存储服务器需要为目标文件分配数据块时,直接利用缓存中的预分配信息来分配数据块。当多个客户端进程同时为各自的文件分配数据块时,存储服务器端可以发挥出块预分配机制的好处,从而保证各个目标文件数据在磁盘上可以尽量连续存放,避免交错。本发明可以解决多个客户端进程同时为各自的文件分配数据块时,存储服务器为多个目标文件分配的数据块交错分布,每个文件的数据块在磁盘分布不连续的问题。
Description
技术领域
本发明涉及计算机存储领域,特别是一种分布式文件***的文件写入***和方法。
背景技术
机群(cluster)结构是由互相连接的多个独立计算机所组成的结构,这些计算机可以是单机或多处理器***(PC、工作站或SMP),每个计算机都有自己的存储器、I/O设备和操作***。机群结构对用户和应用来说是一个单一的***,它可以提供低价高效的高性能环境和快速可靠的服务。由于机群结构具有高性价比的优势,因而目前其已经成为了高性能计算的主流结构。
在机群***中,往往配备有大容量的存储设备,在***运作时,需要对这些设备进行管理。同时,机群***也需要为不同机群节点的用户提供良好的文件共享服务。分布式文件***为机群结构提供了这些服务,它将机群***中的所有存储设备整合起来,建立一个统一的名字空间(文件和目录的组织结构)。各个节点看到的分布式文件***的目录结构是一致的,不同节点的用户可以采用透明的方式访问相同的文件。分布式文件***中的数据不一定存储在本节点的磁盘中,因而通常都会设有专用的存储服务器。以写为例,应用进程通过分布式文件***的客户端写数据时,客户端首先将数据通过网络传送到存储服务器端,存储服务器再将接收到的数据写到本节点的磁盘中。
在Linux操作***中,进程对文件的访问流程为:(1)open(2)read/write(3)read/write(4)read/write...(n)close。即,进程在访问文件之前,首先要通过open操作打开一个文件,获取一个文件描述符fd。打开文件之后,进程可以用所获取到的文件描述符fd作为参数来调用read/write函数进行读写操作。在读写完毕之后,进程还需要通过close操作来关闭文件。
在文件***中,文件存储的布局与I/O性能密切相关。为了提高***整体的I/O性能,现有文件***在分配数据块时都尽量将同一文件的数据块在磁盘上连续存放,这样做一方面可以减少文件数据写入时磁头的移动;另一方面,在读取文件时也可以充分发挥出文件预读的效果。然而,当***中的多个进程需要同时给各自写入的文件分配数据块时,它们将竞争申请***中的空闲块,从而导致一段连续的空闲块区域被交错地分配给多个文件,进而降低了每个文件的数据块在磁盘上的连续程度。
针对上述问题,ext3文件***提出了数据块预留分配机制来缓解多个并发进程在块分配时的相互干扰问题。ext3文件***为每个需要分配数据块的文件维护一个预分配状态信息,实际上就是为每个需要分配数据块的文件预留一段连续的数据块区域,当多个文件同时申请数据块时,分别从各自的预留区域中进行分配,以避免不同文件的数据块交织在一起,从而使每个文件都能具有较高的连续程度。同时,每个需要分配数据块的文件的预分配状态信息会根据进程对该文件的访问模式来不断调整,比如,当***识别到进程一直在为某个文件顺序地分配数据块时,将会扩大该文件的块预留窗口,也就是为该文件预留更多的数据块;相反,如果进程不是顺序地为文件分配数据块,***将会缩小该文件的块预留窗口;通过上述调整,可以最大程度地发挥块预留分配机制的优势。
其中,每个文件的块预留分配状态信息保存在与该文件相对应的ext3inode结构中,该结构在初次为该文件分配数据块时被初始化,在最后一个写进程关闭文件时被销毁。
在本地访问中,直接对ext3文件***中的文件进行多次写操作只需一次打开和关闭操作,其流程如图1所示。在整个访问过程中,文件***能够一直管理预分配状态信息并根据其中的信息来预分配数据块。然而,在分布式文件***中,客户端所要访问的文件不一定是存储在本地磁盘中,而是对应于存储服务器端本地文件***中的一个目标文件,当存储服务器建立在ext3本地文件***之上时,目标文件就是一个ext3类型的的本地文件。
在分布式文件***中,存储服务器端服务线程处理客户端发来的每个写请求时,都需要打开和关闭目标文件,其流程如图2所示。在关闭目标文件时,目标文件的块预分状态信息很有可能被销毁,从而导致预分配状态信息不能在请求间传递。当有多个客户端进程同时为各自的文件分配数据块时,存储服务器不能为每个目标文件持续地维护块预分配状态信息,块预分配机制也就无法发挥效用,从而会导致多个目标文件数据在磁盘上交错存储,进而降低数据写入以及后续读操作的性能。
为了克服这些缺陷,现有技术中采用了一种对象存储技术。采取这种存储技术后,客户端的一个文件或文件的某一部分数据会对应对象存储服务器端的一个数据对象,存储服务器在处理客户端的写请求时,不是立即为写请求分配数据块并写入数据,而是先将要写入同一数据对象的数据缓存在内存中,直到这部分数据聚合到一定的长度时,才一次为该数据对象在磁盘上分配出一大块连续区域,进而进行写入操作。通过这种延迟分配的方式,可以提升同一数据对象的数据块在磁盘中的连续度。
但是,由于***的内存总量是有限的,如果同时等待分配数据块的数据对象个数达到一定的数量,就势必会加快分配数据块的频率,这样,为数据对象分配的每个连续数据块的长度就必将减小。因此,在负载个数较多的情况下,这种延迟分配策略不能得到很好的效果。此外,这种现有技术的存储服务器端还需要专用硬件的支持,因此对***设备的要求也较高,实用性不强。
发明内容
本发明的目的在于,提供一种分布式文件***的文件写入***和方法,其提升了分布式文件***的写入性能,解决多个客户端进程同时为各自的文件分配数据块时,存储服务器为多个目标文件分配的数据块交错分布,每个文件的数据块在磁盘分布不连续的问题。
为了实现上述目的,本发明公开了一种分布式文件***的文件写入方法,包括以下步骤:
步骤100,分布式文件***加载存储服务器模块,并进行初始化;
步骤200,所述存储服务器端根据所述分布式文件***中的一个客户端发送来的针对一目标文件的写请求,利用为所述目标文件缓存的块预分配描述符,完成对所述目标文件的写入操作;
步骤300,根据所述写入操作的结果封装应答消息,将应答消息发送给所述写请求所来自的客户端。
较佳的,在所述步骤200中,包括以下步骤:
步骤210,所述分布式文件***中的一个客户端向存储服务器端发出针对一目标文件的写请求;
步骤220,所述存储服务器端根据所述写请求中包含的信息,获取所述目标文件的相关信息;
步骤230,所述存储服务器端根据客户端写请求中的目标文件信息,为所述目标文件初始化一个块预分配描述符,并将所述块预分配描述符缓存在存储服务器端的内存中,所述存储服务器端中的ext3本地文件***根据所述块预分配描述符为所述目标文件预留相应的数据块;
步骤240,所述存储服务器端完成对所述目标文件的写入操作;
步骤250,关闭所述目标文件。
较佳的,在所述步骤220中,包括以下步骤:
步骤221,根据所述写请求中包含的信息,解析得到所述目标文件的文件名;
步骤222,打开所述目标文件,获取所述目标文件的i-number号。
较佳的,在所述步骤250中,当关闭所述目标文件后,所述目标文件的所述块预分配描述符继续缓存在所述内存中。
较佳的,在上述方法中,所述块预分配描述符的缓存组织结构是hash表。
所述hash表中的hash函数是由所述目标文件的i-number号到hash入口项数组索引值的函数;
所述hash表的每一个hash表项记录了所述目标文件的块预分配描述符的地址,所述目标文件所属的文件***的的超级块的地址,hash表项的引用计数,hash表项的上次使用时间,以及所述目标文件的i-number号。
较佳的,在上述方法中,还包括步骤400,定期对所述块预分配描述符的执行回收操作,释放为所述目标文件预留的数据块,并释放所述预分配描述符的存储空间。
较佳的,在所述步骤400中,判断所述hash表项的引用计数是不是等于0以及上次使用时间与当前时间的间隔是否大于块预分配描述符的最大生命周期,如果同时满足了上述两个条件,则释放为所述目标文件预留的数据块,并释放所述预分配描述符的存储空间。
较佳的,在上述方法中,还包括步骤500,卸载存储服务器模块。
较佳的,在所述步骤240中,完成对所述目标文件的写入操作包括以下步骤:
步骤241,对所述目标文件的索引节点加锁;
步骤242,通过所述目标文件的索引节点找到所述目标文件在ext3本地文件***中的私有索引节点;
步骤243,判断目标文件的ext3私有索引节点的块预分配描述符指针是否为NULL,如果不为NULL,进入步骤246,如果为NULL,则进入步骤244;
步骤244,通过所述目标文件的i-number号生成所述块预分配描述符在所述hash表中的key;
步骤245,在所述hash表中查找,判断是否为所述目标文件缓存了块预分配描述符,如果找到了为所述目标文件缓存的块预分配描述符,则将它赋值给目标文件ext3私有索引节点块预分配描述符指针,并将所述块预分配描述符所属hash节点的引用计数加1,进入步骤246,如果没有找到为所述目标文件缓存的块预分配描述符,则直接进入步骤246;
步骤246,调用***函数generic_file_aio_write_nolock()完成写操作,如果在步骤245中没有找到为所述目标文件缓存的块预分配描述符,则***会自动为所述目标文件分配一个块预分配描述符,并将其赋值给所述目标文件的ext3私有索引节点结构中的块预分配描述符指针;
步骤247,先判断在245步骤中是否为目标文件找到一个块预分配描述符,如果是,则将所述块预分配描述符所属hash节点的引用计数减1,进入步骤248,如果在245步骤中没有为目标文件找到块预留分配描述符,且通过在步骤246中的分配以及赋值,所述目标文件的ext3私有索引节点结构中的块预分配描述符指针不为NULL,则将目标文件的ext3私有索引节点结构中块预分配描述符指针所指向的块预分配描述符***到缓存中,并进入步骤248;
步骤248,将目标文件的ext3私有索引节点的块预分配描述符指针置为NULL,以防止***将其释放;
步骤249,将所述目标文件的索引节点解锁。
为了实现上述目的,本发明还公开了一种分布式文件***,包括存储服务器端和客户端;
所述存储服务器端中,包括有ext3本地文件***、预分配描述符管理模块以及写请求处理模块;
所述预分配描述符管理模块,用于当接收到客户端针对一目标文件的写请求时,为所述目标文件初始化一块预分配描述符、以及管理和回收所述块预分配描述符;
所述写请求处理模块用于根据所述客户端发送来的针对一目标文件写请求,获取所述目标文件的相关信息,以及根据所述块预分配描述符管理模块所管理的所述目标文件的块预分配描述符,为所述写请求分配数据块并进行写入操作;
所述客户端,用于向所述存储服务器端发送写请求。
较佳的,所述写请求处理模块还用于在写操作完成后,根据所述写入操作的结果封装应答消息并将应答消息发送给所述写请求所来自的客户端;
所述客户端还用于接收所述写请求处理模块发送来的应答消息。
较佳的,所述块预分配描述符的组织结构是hash表;
所述hash表中的hash函数是由所述目标文件的i-number号到hash入口项数组索引值的函数;
所述hash表的每一个hash表项记录了所述目标文件的块预分配描述符的地址,所述目标文件所属的文件***的的超级块的地址,hash表项的引用计数,hash表项的上次使用时间,以及所述目标文件的i-number号。
较佳的,在上述***中,所述目标文件的相关信息为所述目标文件的i-number号。
较佳的,在上述***中,所述写请求处理模块还用于,当所述hash表项的引用计数等于0以及上次使用时间与当前时间的间隔大于块预分配描述符的最大生命周期时,释放为所述目标文件预留的数据块。
较佳的,在上述***中,所述预分配描述符管理模块还用于,当所述hash表项的引用计数等于0以及上次使用时间与当前时间的间隔大于块预分配描述符的最大生命周期时,释放所述块预分配描述符的存储空间。
较佳的,在上述***中,所述写请求处理模块还用于,当进行对所述目标文件的写入操作时,实现下列步骤的操作:
步骤001,对所述目标文件的索引节点加锁;
步骤002,通过所述目标文件的索引节点找到所述目标文件在ext3本地文件***中的私有索引节点;
步骤003,判断目标文件ext3私有索引节点的块分配描述符指针是否为NULL,如果不为NULL,进入步骤006,如果为NULL,则进入步骤004;
步骤004,通过所述目标文件的i-number号生成所述块预分配描述符在所述hash表中的key;
步骤005,在所述hash表中查找,判断是否为所述目标文件缓存了块预分配描述符,如果找到了为所述目标文件缓存的块预分配描述符,则将它赋值给目标文件ext3私有索引节点块预分配描述符指针,并将所述块分配描述符所属hash节点的引用计数加1,进入步骤006如果没有找到为所述目标文件缓存的块预分配描述符,则直接进入步骤006;
步骤006,调用***函数generic_file_aio_write_nolock()完成写操作,如果在步骤005中没有找到为所述目标文件缓存的块预分配描述符,则***会自动为所述目标文件分配一个块预分配描述符,并将其赋值给所述目标文件的ext3私有索引节点结构中的块预分配描述符指针;
步骤007,先判断在005步骤中是否为目标文件找到一个块预分配描述符,如果是,则将所述块预分配描述符所属hash节点的引用计数减1,进入步骤008,如果在005步骤中没有为目标文件找到块预留分配描述符,且通过在步骤006中的分配以及赋值,所述目标文件的ext3私有索引节点结构中的块预分配描述符指针不为NULL,则将目标文件的ext3私有索引节点结构中块预分配描述符指针所指向的块预分配描述符***到缓存中,并进入步骤008;
步骤008,将目标文件的ext3私有索引节点的块预分配描述符指针置为NULL,以防止***将其释放;
步骤009,将所述目标文件的索引节点解锁。
本发明的分布式文件***的文件写入***和方法,具有以下有益效果:本发明可以保证在多客户端负载同时需要为各自的文件分配数据块时,存储服务器端仍旧能发挥出块预留分配策略的优势,从而保证每个目标文件的数据块在磁盘上尽量连续存放,这种连续的文件存储布局既可以提升数据写回时的性能,又可以提升对文件的顺序读性能。
以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。
附图说明
图1为现有技术的本地文件***的写操作示意图;
图2为现有技术的分布式文件***的写操作示意图;
图3本发明的分布式文件***的文件写入方法的流程图;
图4为本发明的预分配描述符的缓存组织结构图;
图5为本发明的分布式文件***的结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的分布式文件***的文件写入***和方法进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明的分布式文件***的文件写入***和方法,针对存储服务器端中的本地文件***是ext3文件***的分布式文件***,其中的分布式文件***可以是符合上述要求的各种现有的分布式文件***。在本发明中,主要利用ext3文件***的块预留分配机制来实现分布式文件***写入能力的提升。
请参照图3,此为本发明的分布式文件***的写入方法的流程图。本发明的分布式文件***的写入方法,包括以下步骤:
步骤S100,分布式文件***加载存储服务器模块,并进行初始化。
步骤S200,分布式文件***中的一个客户端向存储服务器端发出针对一目标文件的写请求。所述写请求中包括要访问的目标文件标识信息,写请求相对于目标文件的起始位置以及写请求的长度等信息。
步骤S300,所述存储服务器端根据所述写请求中包含的信息,获取所述目标文件的文件名,打开所述目标文件,获取所述目标文件的i-number号。其中,i-number号为文件的i节点编号,它是文件在文件***中的唯一标识。
步骤S400,在所述存储服务器端中的ext3本地文件***为所述目标文件初始化一个块预分配描述符之后,所述存储服务器端将所述块预分配描述符缓存在所述存储服务器端的内存中,所述存储服务器端根据所述块预分配描述符为所述目标文件预留相应的数据块,所述存储服务器端在关闭所述目标文件后,所述目标文件的所述预分配描述符继续缓存在所述内存中。
其中,所述块预分配描述符的缓存组织结构如图4所示。作为一种可实施方式,在本发明的实施例中,用hash表缓存预分配描述符,但并不以此作为对本发明的限定。
在本发明的实施例,在用于缓存所有块预分配描述符的hash表中,hash入口项的个数是固定的,每个hash入口项所能连接的最大hash表项个数也是固定的,每个hash入口项中使用LRU链表链接hash表项,上述采用固定个数及采用LRU链表进行链接仅用于示例,并不用于对本发明的限定,在实际操作中,也可以采用不固定个数和使用其他链表等结构进行链接的方法。所述hash表中的hash函数是由所述目标文件的i-number号到hash入口项数组索引值的函数。所述hash表的每一个hash表项记录了所述目标文件的块预分配描述符的地址,所述目标文件所属的文件***的超级块的地址,hash表项的引用计数,hash表项的上次使用时间,以及所述目标文件的i-number号。
步骤S500,存储服务器端从内存中取出为所述目标文件缓存的块预分配描述符,并根据所述块预分配描述符来为目标文件分配数据块,从而完成对目标文件的写入操作。
步骤S600,根据所述写入操作的结果封装应答消息,将应答消息发送给所述写请求所来自的客户端。
步骤S700,定期执行快预分配描述符的回收操作。执行回收操作时,回收线程遍历每一个hash表项,判断所述hash表项的引用计数的数值是不是等于0以及上次使用时间与当前时间的间隔是否大于块预分配描述符的最大生命周期MAX_LIFE_TIME,如果同时满足了上述两个条件,则释放为所述目标文件预留的所有数据块,并释放所述hash表项的存储空间。其中,引用计数的数值用以表示正在使用该预分配描述符的进程个数。
步骤S800,分布式文件***卸载存储服务器模块。
其中,所述步骤S500中,进一步包括以下步骤:
步骤S501,对所述目标文件的索引节点inode加锁。
步骤S502,通过所述目标文件的索引节点inode找到所述目标文件在ext3本地文件***中的私有索引节点inode。
步骤S503,判断目标文件的ext3私有索引节点inode结构中的块预分配描述符指针是否为NULL,如果不为NULL,进入步骤S506,如果为NULL,则进入步骤S504。
步骤S504,通过所述目标文件的i-number号生成所述块预分配描述符在所述hash表中的key。
步骤S505,在所述hash表中查找,判断是否为所述目标文件缓存了块预分配描述符,如果找到了为所述目标文件缓存的块预分配描述符,则将它赋值给目标文件的ext3私有inode结构中的块预分配描述符指针,并将所述块预分配描述符所属hash节点的引用计数加1,进入步骤S506,如果没有找到为所述目标文件缓存的块预分配描述符,则直接进入步骤S506。
步骤S506,调用***函数generic_file_aio_write_nolock()完成写操作。在进行写入操作的过程中,如果在步骤S505中没有找到为所述目标文件缓存的块预分配描述符,则***会自动为所述目标文件分配一个块预分配描述符,并将其赋值给所述目标文件的ext3私有inode结构中的块预分配描述符指针。
步骤S507,先判断在S505步骤中是否为目标文件找到一个块预分配描述符,如果是,则将所述块预分配描述符所属hash节点的引用计数减1,进入步骤S508。如果在S505步骤中没有为目标文件找到块预留分配描述符,且通过在步骤S506中的分配以及赋值,所述目标文件的ext3私有inode结构中的块预分配描述符指针不为NULL,则将目标文件的ext3私有inode结构中块预分配描述符指针所指向的块预分配描述符***到缓存中,并进入步骤S508。
步骤S508,将目标文件的ext3私有inode结构中的块预分配描述符指针置为NULL,以防止***将其释放。
步骤S509,将所述目标文件的inode解锁。
图5所示为本发明所提供的一种分布式文件***的结构图。如图5所示,本发明的分布式文件***1中,包括存储服务器端10和客户端20,所述存储服务器端10中的本地文件***为ext3本地文件***100。所述存储服务器端10中,包括有预分配描述符管理模块110以及写请求处理模块120。
所述预分配描述符管理模块110,用于初始化、管理以及回收预分配描述符。
所述写请求处理模块120,用于处理所述分布式文件***1中的客户端20发送来的写请求,完成分析、写入以及消息应答等操作。
当所述分布式文件***1运作时,客户端20向所述存储服务器端10中发出针对一目标文件的写请求。所述写请求处理模块120,根据所述写请求中包含的信息,获取所述目标文件文件名,打开所述目标文件,获取所述目标文件的i-number。所述预分配描述符管理模块110为所述目标文件初始化一个预分配描述符,并将所述预分配描述符缓存在存储服务器端100的内存中。所述ext3本地文件***100根据所述预分配描述符为所述目标文件预留相应的数据块。所述存储服务器端10在关闭所述目标文件的写进程后,所述目标文件的所述预分配描述符继续缓存在所述内存中。
其中,所述预分配描述符的缓存组织结构如图4所示。在本发明的实施例中,用hash表缓存预分配描述符,但并不以此作为对本发明的限定。在本发明的实施例,在用于缓存所有块预分配描述符的hash表中,hash入口项的个数是固定的,每个hash入口项所能连接的最大hash表项个数也是固定的,每个hash入口项中使用LRU链表链接hash表项,上述采用固定个数及采用LRU链表进行链接仅用于示例,并不用于对本发明的限定,在实际操作中,也可以采用不固定个数和使用其他链表等结构进行链接的方法。所述hash表中的hash函数是由所述目标文件的i-number号到hash入口项数组索引值的函数。所述hash表的每一个hash表项记录了所述目标文件的块预分配描述符的地址,所述目标文件所属的文件***的超级块的地址,hash表项的引用计数,hash表项的上次使用时间,以及所述目标文件的i-number号。
当写入操作完成后,所述写请求处理模块120根据所述写入操作的结果封装应答消息,并将应答消息发送给所述发出写请求的客户端。
最后,由于为目标文件预留的数据块无法再分配给其他的文件,因而需要定期将不使用的块预分配描述符释放,从而将为所述目标文件预留的数据块释放。因此,所述预分配描述符管理模块110还用于定期执行快预分配描述符的回收操作。执行回收操作时,所述预分配描述符管理模块110启动一回收线程,所述回收线程遍历每一个hash表项,判断所述hash表项的引用计数是不是等于0以及上次使用时间与当前时间的间隔是否大于块预分配描述符的最大生命周期MAX_LIFE_TIME,如果同时满足了上述两个条件,所述预分配描述符管理模块110则释放为所述目标文件预留的所有数据块,并释放所述hash表项的存储空间。其中,引用计数的数值用以表示正在使用该预分配描述符的进程个数。
在上述***的运作中,存储服务器端从缓存中取出为所述目标文件缓存的块预分配描述符,并根据它来为目标文件分配数据块,从而对目标文件完成写入操作,其中,所执行的内容如前述的分布式文件***的写入方法所述。因此,在此处不再赘述。
采取本发明的分布式文件***的文件写入***和方法,可以在存储服务器需要为目标文件分配数据块时,直接利用缓存中的预分配信息来分配数据块,而由于各个写入请求的预分配状态信息都储存在缓存中,因此,每个写入请求的预分配信息都可以在请求之间进行传递,当多个客户端进程同时为各自的文件分配数据块时,存储服务器端可以发挥出块预分配机制的好处,从而保证各个目标文件数据在磁盘上可以尽量连续存放,避免重叠。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (14)
1、一种分布式文件***的文件写入方法,其特征在于,包括以下步骤:
步骤100,分布式文件***加载存储服务器模块,并进行初始化;
步骤200,存储服务器端根据所述分布式文件***中的一个客户端发送来的针对一目标文件的写请求,利用为所述目标文件缓存的块预分配描述符,完成对所述目标文件的写入操作;
步骤300,根据所述写入操作的结果封装应答消息,将应答消息发送给所述写请求所来自的客户端;
所述步骤200中,包括以下步骤:
步骤210,所述分布式文件***中的一个客户端向存储服务器端发出针对一目标文件的写请求;
步骤220,所述存储服务器端根据所述写请求中包含的信息,获取所述目标文件的相关信息;
步骤230,所述存储服务器端根据客户端写请求中的目标文件信息,为所述目标文件初始化一个块预分配描述符,并将所述块预分配描述符缓存在存储服务器端的内存中,所述存储服务器端中的ext3本地文件***根据所述块预分配描述符为所述目标文件预留相应的数据块;
步骤240,所述存储服务器端完成对所述目标文件的写入操作;
步骤250,关闭所述目标文件;当关闭所述目标文件后,所述目标文件的所述块预分配描述符继续缓存在所述内存中。
2、根据权利要求1所述的分布式文件***的文件写入方法,其特征在于,所述步骤220中,包括以下步骤:
步骤221,根据所述写请求中包含的信息,解析得到所述目标文件的文件名;
步骤222,打开所述目标文件,获取所述目标文件的节点编号。
3、根据权利要求1所述的分布式文件***的文件写入方法,其特征在于,所述块预分配描述符的缓存组织结构是hash表。
所述hash表中的hash函数是由所述目标文件的节点编号到hash入口项数组索引值的函数;
所述hash表的每一个hash表项记录了所述目标文件的块预分配描述符的地址,所述目标文件所属的文件***的的超级块的地址,hash表项的引用计数,hash表项的上次使用时间,以及所述目标文件的节点编号。
4、根据权利要求1所述的分布式文件***的文件写入方法,其特征在于,还包括步骤400,定期对所述块预分配描述符的执行回收操作,释放为所述目标文件预留的数据块,并释放所述块预分配描述符的存储空间。
5、根据权利要求4所述的分布式文件***的文件写入方法,其特征在于,在步骤400中,判断hash表项的引用计数是不是等于0以及上次使用时间与当前时间的间隔是否大于块预分配描述符的最大生命周期,如果同时满足了上述两个条件,则释放为所述目标文件预留的数据块,并释放所述块预分配描述符的存储空间。
6、根据权利要求1所述的分布式文件***的文件写入方法,其特征在于,还包括步骤500,卸载存储服务器模块。
7、根据权利要求1所述的分布式文件***的文件写入方法,其特征在于,所述步骤240中,完成对所述目标文件的写入操作包括以下步骤:
步骤241,对所述目标文件的索引节点加锁;
步骤242,通过所述目标文件的索引节点找到所述目标文件在ext3本地文件***中的私有索引节点;
步骤243,判断目标文件的ext3私有索引节点的块预分配描述符指针是否为NULL,如果不为NULL,进入步骤246,如果为NULL,则进入步骤244;
步骤244,通过所述目标文件的节点编号生成所述块预分配描述符在hash表中的key;
步骤245,在所述hash表中查找,判断是否为所述目标文件缓存了块预分配描述符,如果找到了为所述目标文件缓存的块预分配描述符,则将它赋值给目标文件ext3私有索引节点块预分配描述符指针,并将所述块预分配描述符所属hash节点的引用计数加1,进入步骤246,如果没有找到为所述目标文件缓存的块预分配描述符,则直接进入步骤246;
步骤246,调用***函数generic_file_aio_write_nolock()完成写操作,如果在步骤245中没有找到为所述目标文件缓存的块预分配描述符,则***会自动为所述目标文件分配一个块预分配描述符,并将其赋值给所述目标文件的ext3私有索引节点结构中的块预分配描述符指针;
步骤247,先判断在245步骤中是否为目标文件找到一个块预分配描述符,如果是,则将所述块预分配描述符所属hash节点的引用计数减1,进入步骤248,如果在245步骤中没有为目标文件找到块预留分配描述符,且通过在步骤246中的分配以及赋值,所述目标文件的ext3私有索引节点结构中的块预分配描述符指针不为NULL,则将目标文件的ext3私有索引节点结构中块预分配描述符指针所指向的块预分配描述符***到缓存中,并进入步骤248;
步骤248,将目标文件的ext3私有索引节点的块预分配描述符指针置为NULL,以防止***将其释放;
步骤249,将所述目标文件的索引节点解锁。
8、一种分布式文件***,其特征在于,包括存储服务器端和客户端;
所述存储服务器端中,包括有ext3本地文件***、预分配描述符管理模块以及写请求处理模块;
所述预分配描述符管理模块,用于当接收到客户端针对一目标文件的写请求时,为所述目标文件初始化一块预分配描述符、以及管理和回收所述块预分配描述符;
所述写请求处理模块用于根据所述客户端发送来的针对一目标文件写请求,获取所述目标文件的相关信息,以及根据所述块预分配描述符管理模块所管理的所述目标文件的块预分配描述符,为所述写请求分配数据块并进行写入操作;
所述客户端,用于向所述存储服务器端发送写请求。
9、根据权利要求8所述的分布式文件***,其特征在于,所述写请求处理模块还用于在写操作完成后,根据所述写入操作的结果封装应答消息并将应答消息发送给所述写请求所来自的客户端;
所述客户端还用于接收所述写请求处理模块发送来的应答消息。
10、根据权利要求8所述的分布式文件***,其特征在于,所述块预分配描述符的组织结构是hash表,
所述hash表中的hash函数是由所述目标文件的节点编号到hash入口项数组索引值的函数;
所述hash表的每一个hash表项记录了所述目标文件的块预分配描述符的地址,所述目标文件所属的文件***的的超级块的地址,hash表项的引用计数,hash表项的上次使用时间,以及所述目标文件的节点编号。
11、根据权利要求8所述的分布式文件***,其特征在于,所述目标文件的相关信息为所述目标文件的节点编号。
12、根据权利要求10所述的分布式文件***,其特征在于,所述写请求处理模块还用于,当所述hash表项的引用计数等于0以及上次使用时间与当前时间的间隔大于块预分配描述符的最大生命周期时,释放为所述目标文件预留的数据块。
13、根据权利要求10所述的分布式文件***,其特征在于,所述预分配描述符管理模块还用于,当所述hash表项的引用计数等于0以及上次使用时间与当前时间的间隔大于块预分配描述符的最大生命周期时,释放所述块预分配描述符的存储空间。
14、根据权利要求8所述的分布式文件***,其特征在于,所述写请求处理模块还用于,当进行对所述目标文件的写入操作时,实现下列步骤的操作:
步骤001,对所述目标文件的索引节点加锁;
步骤002,通过所述目标文件的索引节点找到所述目标文件在ext3本地文件***中的私有索引节点;
步骤003,判断目标文件ext3私有索引节点的块分配描述符指针是否为NULL,如果不为NULL,进入步骤006,如果为NULL,则进入步骤004;
步骤004,通过所述目标文件的节点编号生成所述块预分配描述符在所述hash表中的key;
步骤005,在所述hash表中查找,判断是否为所述目标文件缓存了块预分配描述符,如果找到了为所述目标文件缓存的块预分配描述符,则将它赋值给目标文件ext3私有索引节点块预分配描述符指针,并将所述块分配描述符所属hash节点的引用计数加1,进入步骤006如果没有找到为所述目标文件缓存的块预分配描述符,则直接进入步骤006;
步骤006,调用***函数generic_file_aio_write_nolock()完成写操作,如果在步骤005中没有找到为所述目标文件缓存的块预分配描述符,则***会自动为所述目标文件分配一个块预分配描述符,并将其赋值给所述目标文件的ext3私有索引节点结构中的块预分配描述符指针;
步骤007,先判断在005步骤中是否为目标文件找到一个块预分配描述符,如果是,则将所述块预分配描述符所属hash节点的引用计数减1,进入步骤008,如果在005步骤中没有为目标文件找到块预留分配描述符,且通过在步骤006中的分配以及赋值,所述目标文件的ext3私有索引节点结构中的块预分配描述符指针不为NULL,则将目标文件的ext3私有索引节点结构中块预分配描述符指针所指向的块预分配描述符***到缓存中,并进入步骤008;
步骤008,将目标文件的ext3私有索引节点的块预分配描述符指针置为NULL,以防止***将其释放;
步骤009,将所述目标文件的索引节点解锁。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101679005A CN100517335C (zh) | 2007-10-25 | 2007-10-25 | 一种分布式文件***的文件写入***和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101679005A CN100517335C (zh) | 2007-10-25 | 2007-10-25 | 一种分布式文件***的文件写入***和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101149755A CN101149755A (zh) | 2008-03-26 |
CN100517335C true CN100517335C (zh) | 2009-07-22 |
Family
ID=39250281
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007101679005A Expired - Fee Related CN100517335C (zh) | 2007-10-25 | 2007-10-25 | 一种分布式文件***的文件写入***和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100517335C (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011147073A1 (zh) * | 2010-05-24 | 2011-12-01 | 中兴通讯股份有限公司 | 分布式文件***中的数据处理方法和装置 |
CN104809124A (zh) * | 2014-01-24 | 2015-07-29 | ***通信集团河北有限公司 | 云虚拟文件***及其输入/输出请求处理方法 |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101452402B (zh) * | 2008-11-28 | 2012-05-30 | 珠海金山快快科技有限公司 | 软件运行***和软件运行方法 |
CN101706802B (zh) * | 2009-11-24 | 2013-06-05 | 成都市华为赛门铁克科技有限公司 | 一种数据写入、修改及恢复的方法、装置及服务器 |
CN102073739A (zh) * | 2011-01-25 | 2011-05-25 | 中国科学院计算技术研究所 | 带有快照功能的分布式文件***中的数据读与数据写方法 |
CN102622412A (zh) * | 2011-11-28 | 2012-08-01 | 中兴通讯股份有限公司 | 一种分布式文件***中的并发写入方法及装置 |
CN103294704A (zh) * | 2012-02-28 | 2013-09-11 | 鸿富锦精密工业(深圳)有限公司 | 文件同步***及方法 |
CN104166520B (zh) * | 2013-05-20 | 2019-01-11 | 深圳先进技术研究院 | 分布式硬盘***及在其中进行数据迁移的方法 |
CN104573428B (zh) * | 2013-10-12 | 2018-02-13 | 方正宽带网络服务股份有限公司 | 一种提高服务器集群资源有效性的方法及*** |
CN103514298A (zh) * | 2013-10-16 | 2014-01-15 | 浪潮(北京)电子信息产业有限公司 | 一种实现文件锁的方法及元数据服务器 |
CN103516812A (zh) * | 2013-10-22 | 2014-01-15 | 浪潮电子信息产业股份有限公司 | 一种加速云存储内部数据传输的方法 |
CN103559231B (zh) * | 2013-10-23 | 2018-03-09 | 华为技术有限公司 | 一种文件***配额管理方法、装置及*** |
CN107656939A (zh) * | 2016-07-26 | 2018-02-02 | 南京中兴新软件有限责任公司 | 文件写入方法及装置 |
CN108881107B (zh) * | 2017-05-09 | 2021-08-17 | 腾讯科技(深圳)有限公司 | 一种分布式资源配给方法、装置以及*** |
US11093532B2 (en) | 2017-05-25 | 2021-08-17 | International Business Machines Corporation | Pre-allocating filesystem metadata within an object storage system |
CN109977079B (zh) * | 2019-04-01 | 2021-10-26 | 泰州清润环保科技有限公司 | 一种基于分布式文件***的数据处理方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1203395A (zh) * | 1997-02-28 | 1998-12-30 | 松下电器产业株式会社 | 文件管理装置和方法及记录文件管理程序的记录媒体 |
JP2001266259A (ja) * | 2000-03-15 | 2001-09-28 | Sharp Corp | 取引処理装置 |
CN1632765A (zh) * | 2004-12-31 | 2005-06-29 | 大唐微电子技术有限公司 | 一种闪存文件***管理方法 |
US20060101085A1 (en) * | 2004-10-26 | 2006-05-11 | Soulier Paul E | Method and system for efficient write journal entry management for a distributed file system |
CN1848118A (zh) * | 2005-04-14 | 2006-10-18 | 三星电子株式会社 | 管理文件***的设备和方法 |
-
2007
- 2007-10-25 CN CNB2007101679005A patent/CN100517335C/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1203395A (zh) * | 1997-02-28 | 1998-12-30 | 松下电器产业株式会社 | 文件管理装置和方法及记录文件管理程序的记录媒体 |
JP2001266259A (ja) * | 2000-03-15 | 2001-09-28 | Sharp Corp | 取引処理装置 |
US20060101085A1 (en) * | 2004-10-26 | 2006-05-11 | Soulier Paul E | Method and system for efficient write journal entry management for a distributed file system |
CN1632765A (zh) * | 2004-12-31 | 2005-06-29 | 大唐微电子技术有限公司 | 一种闪存文件***管理方法 |
CN1848118A (zh) * | 2005-04-14 | 2006-10-18 | 三星电子株式会社 | 管理文件***的设备和方法 |
Non-Patent Citations (2)
Title |
---|
Linux下网络块设备的设计与实现. 马琦,郭玉东.微机发展,第13卷第5期. 2003 * |
分布式计算机可扩展的并行I/O数据分配策略研究. 曾碧卿,陈志刚,谭璐,吕西红.小型微型计算机***,第26卷第10期. 2005 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011147073A1 (zh) * | 2010-05-24 | 2011-12-01 | 中兴通讯股份有限公司 | 分布式文件***中的数据处理方法和装置 |
CN104809124A (zh) * | 2014-01-24 | 2015-07-29 | ***通信集团河北有限公司 | 云虚拟文件***及其输入/输出请求处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101149755A (zh) | 2008-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100517335C (zh) | 一种分布式文件***的文件写入***和方法 | |
JP5142995B2 (ja) | メモリページ管理 | |
CN100498740C (zh) | 一种数据缓存处理方法、***及数据缓存装置 | |
CA2209549C (en) | Method and apparatus for loading data into a database in a multiprocessor environment | |
CN110555001B (zh) | 数据处理方法、装置、终端及介质 | |
CN107544756B (zh) | 基于SCM的Key-Value日志型本地存储方法 | |
CN102063406A (zh) | 用于多核处理器的网络共享Cache及其目录控制方法 | |
CN107256196A (zh) | 基于闪存阵列的支持零拷贝的缓存***及方法 | |
CN110858162B (zh) | 内存管理方法及装置、服务器 | |
CN100424699C (zh) | 一种属性可扩展的对象文件*** | |
CN111984191A (zh) | 一种支持分布式存储的多客户端缓存方法及*** | |
US20180004798A1 (en) | Read only bufferpool | |
CN109446114A (zh) | 一种空间数据缓存方法、装置和存储介质 | |
Lee et al. | Metadata management of the SANtopia file system | |
Rumble | Memory and object management in RAMCloud | |
CN108089825A (zh) | 一种基于分布式集群的存储*** | |
CN101377788B (zh) | 一种机群文件***中缓存管理的方法及*** | |
CN109960662A (zh) | 一种内存回收方法及设备 | |
Li et al. | Enabling efficient updates in KV storage via hashing: Design and performance evaluation | |
JPWO2004036432A1 (ja) | データベースのアクセラレーター | |
CN116894041B (zh) | 数据存储方法、装置、计算机设备及介质 | |
CA2415018C (en) | Adaptive parallel data clustering when loading a data structure containing data clustered along one or more dimensions | |
CN114785662B (zh) | 一种存储管理方法、装置、设备及机器可读存储介质 | |
CN115794368A (zh) | 业务***、内存管理方法及装置 | |
CN100395730C (zh) | 基于数据源的虚拟内存处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090722 Termination date: 20191025 |