并行文件系统中资源的管理和分配方法

文档序号:7700639阅读:165来源:国知局
专利名称:并行文件系统中资源的管理和分配方法
并行文件系统中资源的管理和分配方法技术领域并行文件系统中资源的管理和分配方法属于存储区域网络并行文件系统领 域,尤其涉及其中的资源管理与数据分布领域。
背景技术
存储区域网络(Storage Area Network, SAN)是一种连接外接存储设备 和服务器的构架,采用包括光纤通道技术、磁盘阵列、磁带柜、光盘柜的各种 技术进行实现,并广泛的应用到高性能计算等各个领域。该架构的特点是,连 接到服务器的存储设备,将被操作系统视为直接连接的存储设备。SAN文件系 统是一种基于存储区域网络设备的并行文件系统,Linux SAN文件系统对于 Linux的虚拟文件系统(Virtual File System, VFS)是透明的,它允许多个客户端 共享的直接访问在远程服务器上的文件,和访问本地文件相同,由并行文件系 统管理和存储文件。当前,并行文件系统被广泛的应用,以达到高性能计算的 要求。SAN并行文件系统是基于SAN实现的面对高性能计算的并行文件系统。 在对并行文件系统中对于资源的管理和分配是并行文件系统底层的主体结构, 与并行文件系统的整体架构直接相关,影响到并行文件系统的性能、可扩展性、 可靠性,属于并行文件系统的核心部分。随着存储网络规模的不断扩大,传统 的分布式文件系统如NFS、 AFS等已经无法满足大规模网络存储系统的高可扩 展性要求,基于对象的文件系统如Lustre、 PanFS等不能满足SAN应用环境, 近来出现的SAN文件系统,如GPFS等,其空间管理采用基于块的分配方式。发明内容并行文件系统中资源的管理和分配方法属于SAN区域网络存储领域,其特 征是通过将存储资源分成多个分配组(Allocate Group, AG),并行分配,降低 了单个分配组对其他分配组的影响,提高了并行文件系统的吞吐率、可靠性和 管理效率,每个AG可以由单个磁盘分区或者多个磁盘按照Raid形式构成,多 个AG之间也可以使用副本策略,通过存储资源的两层虚拟化,提高系统的性 能、可用性和可靠性,每个分区使用B+树进行空间分配,并存储自己的B+树 数据,与传统SAN文件系统相比降低了并行文件系统元数据服务器的压力,提 高了分配效率,在通过B+树实现的目录树中索引文件元数据和目录元数据,保 持文件元数据存储的局部性,与传统SAN文件系统相比提高了元数据访问的性 能,并行文件系统中资源的管理和分配方法,所述方法是一种Lirmx SAN并行 文件系统资源的管理和分配方法,依次含有以下步骤步骤(l)构建一个所述的Linux SAN并行文件系统,以下简称并行文件系统;所述并行文件系统是由不少于一个客户端,不少于一个存储设备,不少 于一个元数据服务器MDS,和存储区域网络SAN组成,所述客户端和所述元数 据服务器之间的TCP/IP网络是控制通路,传输元数据和控制信息,所述客户端、 所述元数据服务器与起所述存储设备作用的磁盘阵列之间的所述SAN网络是数 据通路,所述元数据服务器和所述客户端直接通过所述数据通路在所述磁盘阵 列上进行数据访问,在所述存储设备上,有两种磁盘,数据磁盘,至少存储数 据、磁盘的状态和空间分配信息,另一种是元数据服务器MDS磁盘,至少存储 元数据、所述数据磁盘的信息、所述元数据磁盘的信息、以及所述并行文件系 统的结构、状态信息,其中所述数据磁盘分为至少一个分配组AG,而每个所述分配组又至少分为两 个磁盘分区,其中,第一个所述磁盘分区包括保留区、分配组超级快ASB、第 一B+树(l)的和第二B+树(2)的根节点TreeRoot,其中,所述分配组超级快ASB 包括分配组号AGN、设备标识DID、第一B+树(l)的和第二B+树(2)的根节点的 地址B+TreeRoot[2]、所述分配组AG状态信息AG State Information、以及所述 两个B+树空闲列表Free List,简称FL,在所述的两个B+树中,每个节点是所 述分配组AG中数据存储和检索的一段基本数据空间单元,简称一个快,所述 两个B+树的索引中的每一项是由所述分配组AG的多个连续空闲块组成的一 段空闲空间,所述分配组AG上的所述每段空闲空间通过所述两个B+树中的 所对应的区间Extent来索引,每个所述区间Extent由两项组成第一项是所述 该段空闲空间所在的所述磁盘分区的起始块号start,第二项是所述该段空闲空 间覆盖的块的数量,用该段空闲空间的长度Len表示,初始时,所有空闲空间 的索引Extent全部保存在所述两个B+树中,其中所述第一 B+树(l)用所述区间 Extent的起始块号作为键值,所述第二 B+树(2)用所述区间Extent的第二项所述 该段空间的长度作为键值,在所述分配组超级快ASB中,所述分配组AG的状 态信息State Information是指所述分配组AG的空闲空间或非空闲空间,所述空 闲列表Free List由所述一个块地址数组和三个变量组成,其中包括所述空闲 空间组成的可分配块在所述数组中的起始位置first,用地指标是,下同,末尾位 置last,可分配的块的个数count,所述的空闲列表Free List所管理的块由所述 两个B+树进行分配和释放,除了所述第一磁盘分区外,其余每个磁盘分区包括: 保留区和超级快SB,该超级快SB包括所述的AGN和DID;所述元数据服务器MDS磁盘包括:保留区、主超级快MSB,位图Bitmap, 日志Journal,分配组链表信息AGLI以及目录树根节点Inode Root;所述主超级快MSB包括文件系统状态File System State,日志地址Journal Address, AG链表根节点AGLH的地址AGIP,以及目录树根节点地址 Inode Address,其中,所述文件系统状态File System State包含文件系统的块大 小Block Size、挂载标识Mounted Flag、元数据磁盘空间大小MDS Block Size 以及空闲空间大小MDS Free Size,所述分配组AG链表根节点AGLH的地址 AGIP包括所述分配组链表根节点AGLH, AG链表位图AGLB,以及所述分 配组链表AG List,其中,所述分配组链表根节点AGLH包括分配组总数AG Count、所有AG的可用空间大小AGs Total Blocks以及空闲空间大小AGs Free Blocks,所述分配组链表AGList由AG信息AGI以数组的形式组成,每个所述 AG信息AGI包含一个分配组AG的信息,其中,包括分配组号AGN,不少于 一个的分配中磁盘分区的设备标识DID,每个所述AG的信息AGI,线性且连 续保存在所述元数据服务器MDS磁盘上,位置由所述AG链表位图AGLB所索 引,所述目.录树根节点Inode Root由目录B+树来管理的,所述目录B+树索引 的每一项是一个节点Inode,所有文件和目录都是由Inode表示,该Inode的键 值是由所述文件或者目录所在父目录的文件名的哈希值、所述文件或者目录的 名称的哈希值、所述文件或者目录的类型Type组成,所述类型Type包括文 件类型、目录类型、元数据类型,其中,所述文件类型的Inode用于存储文件的 所述布局信息,即从所述管理空闲空间的两个B+树中分配出来的区间Extent, 所述目录类型的Inode用于存储包含在当前目录下的所述文件的文件名和目录 的目录名,元数据类型的Inode包含该节点Inode对应的文件或者目录的元数据 信息,该节点Inode对应的文件或者目录的Inode地址,以及该节点Inode对应 的文件或者目录的Inode类型Type,其中所述的元数据信息是指由IEEF制定的 POSIX标准定义的元数据信息;在所述客户端设有客户端模块和交互层模块,其中,所述客户端模块 设有虚拟文件系统VFS层的调用接口,并进行数据和元数据的缓存,对于所述VFS层的函数调用,则按以下方式判断若是和所述元数据服务器的交互操作, 则生成相应的请求通过函数调用发送到底层的所述交互层模块,所述函数调用 包括该文件系统客户端使用的所有请求操作,以及当前请求的索引,若是对所 述数据磁盘进行数-据访问的操作,则生成相应的数据访问请求发送到底层的SAN驱动模块,所述交互层模块通过远程过程调用协议实现所述客户端和所述 元数据服务器MDS之间的通信;在所述元数据服务器中,设有SAN文件系统管理模块,简称管理层模块,交互层模块和元数据文件系统模块,其中所述交互层模块和所述管理层模块相连,当向所述管理层模块发送以下各种请求系统状态管理请求,操作状态管理请求,元数据访问请求以及空间 管理请求,所述管理层模块则把生成的相应请求发送到所述元数据文件系统模 块中;元数据文件系统模块设有以下接口 Linux内核中的本地文件系统的内核调用接口,接收所述元数据访问的请求,元数据文件系统所述第一调用接口,供所述管理层模块调用,其中管理 的信息包括空闲空间的大小、AGN、其实地址以及相应的区间Extent链表;元数据文件系统模块还设有第二模块接口,从所述元数据服务器的SAN 驱动模块中调用需要释放的区间Extent,以及所述并行文件系统的包括元数据 MSB在内存中的数据结构MSB—Core的指针i_private,以及以下数据结构 MSB_Core, AGLH—Core, AGLH, AGI—Core,以及AGI,其中MSB_Core包括目录树根节点Inode一Root和所述AGLH内存中所述数据 结构AGLH一Core的指针AGLH_point;AGLH一Core包括AGLH在所述元数据服务器MDS磁盘的地址AGLH—disk_piont和所述AGI以下两个链表指针AGI链表指针AGI—List_piont 和所述AGI哈希表指针AGI__hash_piont;AGI—Core包括所述AGI在所述元数据服务器MDS磁盘的地址 AGI—disk_piont ,所述AGI链表指针AGI_List_piont , AGLI—Core指针 AGLI_Core_piont ,可访问磁盘分区在内存中的数据结构的数组 Block—Device—Array,所述两个B+树在数据磁盘上地址,所述空闲空间列表Free List在数据磁盘上的地址FreeJList,以及该AG的磁盘分区的所述DID在内存 中的数组DeviceJLable—List;AGI,包括所述AGN和DID; 步骤(2)按以下步骤启动所述并行文件系统 步骤(2.1)初始化所述元数据服务器MDS磁盘; 步骤(2.2)加载所述元数据服务器需要的所述各种模块,挂载所述元数 据服务器MDS磁盘;步骤(2.3)在所述元数据服务器MDS磁盘上加载新的AG; 步骤(3)所述并行文件系统按以下步骤响应客户端应用程序的读写请求; 步骤(3.1)所述并行文件系统按以下步骤响应一个客户端应用程序的读请求-步骤(3丄1)客户端的应用程序发出读请求到所述客户端模块;步骤G丄l.l)所述客户端模块首先查看是否缓存了相应文件的元数 据,如果缓存了,直接跳到步骤(3丄3);步骤(3丄1.2)所述客户端模块如果没有缓存相应元数据,则通过所 述交互层模块和所述文件系统管理层模块,将元数据访问请求发送到所述 元数据文件系统模块; 步骤(3丄2)所述客户端模块接受元数据访问请求后,进行如下处理;步骤(3丄2.1)所述元数据文件系统模块首先检査此元数据是否被缓 存,如果缓存了,跳转到步骤(3丄2.2.3);步骤(3丄2.2)所述元数据文件系统模块首先访问所述元数据服务器 MDS磁盘;步骤(3丄2.2.1)所述元数据文件系统模块根据被访问文件的路径 名生成相应的所述目录树B+树的键值;步骤(3丄2.2.2)所述元数据文件系统模块读取所述目录树B+树的 根节点,根据所述键值,查找对应文件的元数据;步骤(3丄2.2.3)所述元数据文件系统模块读取此文件的布局信息, 并通过所述管理层模块、所述交互层模块返回给所述客户端模块; 步骤(3丄3)所述客户端模块获取文件布局信息,并读取数据信息, 步骤(3丄3.1)所述客户端模块分析获取的文件布局信息,并查找需 要的数据所在的区间Extent信息;步骤(3丄3.2)所述客户端模块通过所述区间Extent信息获取所需要 数据所在的AG;步骤(3.1.3.2.1)所述客户端模块检査本地设备列表是否缓存了所 要访问的AG的所有数据磁盘的DID,如果缓存了所述数据直接跳到步 骤(3丄3.3);步骤(3丄3.2.2)如果没有所需设备的DID,那么所述客户端模块 通过所述交互层模块、所述管理层模块发送相应AG的设备列表信息请 求到所述元数据文件系统模块,获取属于相应AG的所有磁盘的DID;步骤(3丄3.2.3)所述客户端模块通过已获得的DID,扫描所有磁 盘的DID,找到与已获得的DID相同的属于所述相应AG的所有磁盘;步骤(3丄3.2.4)所述客户端模块通过所述SAN驱动模块访问相应AG的所有磁盘;步骤(3丄3.3)所述客户端模块在AG的磁盘上读取相应的数据信息; 步骤(3丄4)所述客户端模块将读取的数据返回给应用程序,结束此次 读请求;步骤(3.2)所述并行文件系按以下步骤统响应一个客户端应用程序的写请步骤(3.2.1)所述客户端模块生成文件写请求;步骤(3.2丄1)所述客户端模块首先检査已经获得文件元数据信息是 否有空闲空间可以使用,如果没有跳转到步骤(3.2丄3);步骤(3.2丄2)所述客户端模块检查文件元数据信息空闲空间是否够 用,如果够用,调转到步骤(3.2.4);步骤(3.2丄3)如果文件元数据信息空闲空间不够用,所述客户端模 块生成相应的文件空间申请请求通过所述交互层模块和所述管理层模块 发送到所述元数据文件系统模块,同时使用文件元数据信息已有的空闲空 间;步骤(3.2.2)所述元数据文件系统模块根据文件的写请求生成相应的空 间分配请求进行操作;步骤(3.2.2.1)所述元数据文件系统模块首先检查当前的整个文件系 统的空闲空间是否满足所需要的空闲空间大小,如果不满足,则返回错误, 终止上述写请求;步骤(3.2.2.2)所述元数据文件系统模块检査空闲空间分配请求的相 应的AG是否满足所需要的空闲空间大小,如果满足,选择此AG进行空 间分配,否则选择一个其他可以满足此空闲空间请求的AG,跳转到步骤(3.2.3);步骤(3.2.2.3)如果所有单个AG都不满足上述空闲空间请求,所述 元数据文件系统模块选取多个AG进行空间分配,并根据每个AG的大小 生成相应的空间请求; 步骤(3.2.3)所述元数据文件系统模块选取AG进行空间分配;步骤(3.2.3.1)所述元数据文件系统模块查看当前AG的空闲空间是 否满足需要分配的大小;步骤(3.2.3.2)所述元数据文件系统模块检査当前AG的Free List是 否有满足空闲空间B+树进行空间管理所需要的空间;步骤(3.2.3.3)所述元数据文件系统模块根据分配请求査找当前AG 的对应的空闲空间B+树,找到符合的Extent,可能需要多个Extent,在当 前B+树中删除或添加相应的Extent;步骤(3.2.3.4)所述元数据文件系统模块同步两个空闲空间B+树,进 行两个空闲空间B+树平衡;步骤(3.2.3.5)所述元数据文件系统模块修改当前AG和MDS上的 ASB和MSB,记录空间变化;步骤(3.2.3.6)所述元数据文件系统模块将此区间Extent的信息计入 元数据服务器MDS磁盘的响应的文件的Inode,但是不修改该文件的长度 信息;步骤(3.2.3.7)所述元数据文件系统模块将得到的区间Extent填入相 应的返回列表,并将所述列表通过交互层模块发送到所述客户端模块; 步骤(3.2.4)所述客户端模块获得文件空闲空间信息,开始写入数据信息;步骤(3.2.4.1)所述客户端模块分析获取的文件空闲空间信息,并查 找需要的数据所在的区间Extent;步骤(3.2.4.2)所述客户端模块通过区间Extent信息获取所需要数据所在的AG;步骤(3.2.4.2.1)所述客户端模块检查本地设备列表是否缓存了所 要访问的AG的所有磁盘的DID,如果缓存了直接跳到步骤(3.2.4.3);步骤(3.2.4.2.2)如果没有所需设备的DID,所述客户端模块那么 发送相应AG的磁盘列表信息请求到MDS,请求相应的磁盘的DID;步骤(3.2.4.2.3)所述客户端模块通过已获得的DID,扫描所有磁 盘的DID,找到与已获得的DID相同的属于所述相应AG的所有磁盘;步骤(3.2.4.2.4)所述客户端模块通过SAN驱动模块访问相应AG 的所有磁盘;步骤(3.2.4.3)所述客户端模块在相应的AG的磁盘上写入相应的数据;步骤(3.2.5)元数据服务器MDS根据客户端的访问信息,修改相应文件的 Inode中的元数据;步骤(3.2.5.1)如果客户端继续写,跳转到步骤(3.2丄1);步骤(3.2.5.2)如果数据写完,所述客户端模块将己经使用的新生成 的文件元数据信息和文件空闲空间信息通过所述交互层模块发送给所述 管理层模块;步骤(3.2.5.3)如果有文件空闲空间信息,所述管理层模块发送空间 释放请求到所述元数据文件系统模块进行空间释放;步骤(3.2.5.3.1)所述元数据文件系统模块检查Free List是否有满 足空闲空间B+树进行空间管理所需要的空间;步骤(3.2.5.3.2)所述元数据文件系统模块根据分配请求査找对应 的空闲空间B+树中相应的区间Extent的插入位置,进行删除或添加相应的区间Extent;步骤(3.2.5.3.3)所述元数据文件系统模块同步两个空闲空间B+树, 进行空闲空间B+树平衡,步骤(3.2.5.3.4)所述元数据文件系统模块修改对应AG的所述ASB 和MSB上的空间信息;步骤(3.2.5.4所述元数据文件系统模块修改相应文件的Inode信息, 将文件的大小信息更新为当前的返回值步骤(3.2.6)所述客户端模块返回操作完成信息到应用程序,结束所 述写请求。当所述分配组只有一个磁盘分区时,只采用所述第一磁盘分区。本发明降低了并行文件系统元数据服务器的压力,提高了分配效率,在 通过B+树实现的目录树中索引文件元数据和目录元数据,保持文件元数据存储 的局部性,与传统SAN文件系统相比提高了元数据访问的性能。


图1.以4096字节作为一个Block的MDS磁盘数据布局图2.以4096字节为一个Block的AG数据布局图3.并行文件系统的软件结构4.元数据文件系统模块数据结构5.文件系统响应客户端写请求流程6.文件系统响应客户端读请求流程7.文件系统硬件结构图实施步骤1、并行文件系统中资源的管理和分配方法,其特征在于,所述方法是一种Linux SAN并行文件系统资源的管理和分配方法,依次含有以下步骤步骤(l)构建一个所述的Linux SAN并行文件系统,以下简称并行文件系统;所述并行文件系统是由不少于一个客户端,不少于一个存储设备,不少 于一个元数据服务器MDS,和存储区域网络SAN组成,所述客户端和所述元数 据服务器之间的TCP/IP网络是控制通路,传输元数据和控制信息,所述客户端、 所述元数据服务器与起所述存储设备作用的磁盘阵列之间的所述SAN网络是数 据通路,所述元数据服务器和所述客户端直接通过所述数据通路在所述磁盘阵 列上进行数据访问,在所述存储设备上,有两种磁盘,数据磁盘,至少存储数 据、磁盘的状态和空间分配信息,另一种是元数据服务器MDS磁盘,至少存储 元数据、所述数据磁盘的信息、所述元数据磁盘的信息、以及所述并行文件系 统的结构、状态信息,其中-所述数据磁盘分为至少一个分配组AG,而每个所述分配组又至少分为两 个磁盘分区,其中,第一个所述磁盘分区包括保留区、分配组超级快ASB、第 一B+树(l)的和第二B+树(2)的根节点TreeRoot,其中,所述分配组超级快ASB 包括分配组号AGN、设备标识DID、第一 B+树(l)的和第二 B+树(2)的根节点的 地址B+TreeRoot[2]、所述分配组AG状态信息AG State Information、以及所述 两个B+树空闲列表Free List,简称FL,在所述的两个B+树中,每个节点是所 述分配组AG中数据存储和检索的一段基本数据空间单元,简称一个快,所述 两个B+树的索引中的每一项是由所述分配组AG的多个连续空闲块组成的一 段空闲空间,所述分配组AG上的所述每段空闲空间通过所述两个B+树中的所对应的区间Extent来索引,每个所述区间Extent由两项组成第一项是所述 该段空闲空间所在的所述磁盘分区的起始块号start,第二项是所述该段空闲空 间覆盖的块的数量,用该段空闲空间的长度Len表示,初始时,所有空闲空间 的索引Extent全部保存在所述两个B+树中,其中所述第一 B+树(l)用所述区间 Extent的起始块号作为键值,所述第二 B+树(2)用所述区间Extent的第二项所述 该段空间的长度作为键值,在所述分配组超级快ASB中,所述分配组AG的状 态信息State Information是指所述分配组AG的空闲空间或非空闲空间,所述空 闲列表Free List由所述一个块地址数组和三个变量组成,其中包括所述空闲 空间组成的可分配块在所述数组中的起始位置first,用地指标是,下同,末尾位 置last,可分配的块的个数count,所述的空闲列表Free List所管理的块由所述 两个B+树进行分配和释放,除了所述第一磁盘分区外,其余每个磁盘分区包括 保留区和超级快SB,该超级快SB包括所述的AGN和DID;所述元数据服务器MDS磁盘包括保留区、主超级快MSB,位图Bitmap, 日志Journal,分配组链表信息AGLI以及目录树根节点Inode Root;所述主超级快MSB包括文件系统状态File System State,日志地址 Journal Address, AG链表根节点AGLH的地址AGIP,以及目录树根节点地址 Inode Address,其中,所述文件系统状态File System State包含文件系统的块大 小Block Size、挂载标识Mounted Flag、元数据磁盘空间大小MDS Block Size 以及空闲空间大小MDS Free Size,所述分配组AG链表根节点AGLH的地址 AGIP包括所述分配组链表根节点AGLH, AG链表位图AGLB,以及所述分 配组链表AG List,其中,所述分配组链表根节点AGLH包括分配组总数AG Count、所有AG的可用空间大小AGs Total Blocks以及空闲空间大小AGs Free Blocks,所述分配组链表AGList由AG信息AGI以数组的形式组成,每个所述 AG信息AGI包含一个分配组AG的信息,其中,包括分配组号AGN,不少于一个的分配中磁盘分区的设备标识DID,每个所述AG的信息AGI,线性且连 续保存在所述元数据服务器MDS磁盘上,位置由所述AG链表位图AGLB所索 引,所述目录树根节点Inode Root由目录B+树来管理的,所述目录B+树索引 的每一项是一个节点Inode,所有文件和目录都是由Inode表示,该Inode的键 值是由所述文件或者目录所在父目录的文件名的哈希值、所述文件或者目录的 名称的哈希值、所述文件或者目录的类型Type组成,所述类型Type包括文 件类型、目录类型、元数据类型,其中,所述文件类型的Inode用于存储文件的 所述布局信息,即从所述管理空闲空间的两个B+树中分配出来的区间Extent, 所述目录类型的Inode用于存储包含在当前目录下的所述文件的文件名和目录 的目录名,元数据类型的Inode包含该节点Inode对应的文件或者目录的元数据 信息,该节点Inode对应的文件或者目录的Inode地址,以及该节点Inode对应 的文件或者目录的Inode类型Type,其中所述的元数据信息是指由IEEF制定的 POSIX标准定义的元数据信息;在所述客户端设有客户端模块和交互层模块,其中,所述客户端模块 设有虚拟文件系统VFS层的调用接口,并进行数据和元数据的缓存,对于所述 VFS层的函数调用,则按以下方式判断若是和所述元数据服务器的交互操作, 则生成相应的请求通过函数调用发送到底层的所述交互层模块,所述函数调用 包括该文件系统客户端使用的所有请求操作,以及当前请求的索引,若是对所 述数据磁盘进行数据访问的操作,则生成相应的数据访问请求发送到底层的 SAN驱动模块,所述交互层模块通过远程过程调用协议实现所述客户端和所述 元数据服务器MDS之间的通信;在所述元数据服务器屮,设有SAN文件系统管理模块,简称管理层模块, 交互层模块和元数据文件系统模块,其中-所述交互层模块和所述管理层模块相连,当向所述管理层模块发送以下各种请求系统状态管理请求,操作状态管理请求,元数据访问请求以及空间 管理请求,所述管理层模块则把生成的相应请求发送到所述元数据文件系统模 块中;元数据文件系统模块设有以下接口 -Linux内核中的本地文件系统的内核调用接口,接收所述元数据访问的请求,元数据文件系统所述第一调用接口,供所述管理层模块调用,其中管理 的信息包括空闲空间的大小、AGN、其实地址以及相应的区间Extent链表;元数据文件系统模块还设有第二模块接口,从所述元数据服务器的SAN 驱动模块中调用需要释放的区间Extent,以及所述并行文件系统的包括元数据 MSB在内存中的数据结构MSB—Core的指针ijprivate,以及以下数据结构-MSB—Core, AGLH—Core, AGLH, AGI—Core,以及AGI,其中MSB—Core包括目录树根节点Inode_Root和所述AGLH内存中所述数据 结构AGLH—Core的指针AGLH_point;AGLH—Core包括AGLH在所述元数据服务器MDS磁盘的地址 AGLH_disk_piont和所述AGI以下两个链表指针AGI链表指针AGI—List_piont 和所述AGI哈希表指针AGI_hash_piont;AGI—Core包括所述AGI在所述元数据服务器MDS磁盘的地址 AGI—disk_piont ,所述AGI链表指针AGI_List_piont , AGLI一Core指针 AGLI—Core_piont ,可访问磁盘分区在内存中的数据结构的数组 Block—Device—Array,所述两个B+树在数据磁盘上地址,所述空闲空间列表Free List在数据磁盘上的地址Free—List,以及该AG的磁盘分区的所述DID在内存 中的数组Device—Lable—List;AGI,包括所述AGN和DID;除上述模块,另外实现了两个用户态工具,分别是MDS磁盘初始化工具 mkmds和AGADD工具addag, MDS磁盘初始化工具mkmds运行在MDS服务 器的用户态,进行元数据磁盘的格式化,输入参数为MDS磁盘设备文件名,将 图1所示的元数据信息写入元数据磁盘,addag运行在MDS服务器的用户态, 输入参数为加载的AG的磁盘分区设备文件名、MDS磁盘设备文件名,根据图 2所示的数据磁盘分区信息写入数据磁盘分区;步骤(2) SAN并行文件系统的启动分为以下几个步骤步骤(2.1)通过MDS磁盘初始化工具mkmds,初始化MDS磁盘; 步骤(2.2)加载MDS需要的管理层模块、交互层模块和元数据文件系 统模块,通过mount命令挂载MDS磁盘;步骤(2.2.1) MDS读取AGLH数据块的信息,以确定是否此并行文 件系统是否完整,如果不完整,将文件系统的状态设置为不一致状态;步骤(2.2.2)根据AGLH信息AGLB,扫描AG List,将上次文件系 统卸载前己加入的设备添加到并行文件系统;步骤(2.2.2.1)根据AGLH、 AGLB信息,读取AG List中的AGI 信息,找到文件系统上次卸载前加载的每一个AG;步骤(2.2.2.2)从AG链表中,选出一个准备添加的AG,初始化此 AG在内存相应的数据结构AGI一Core,读取相应的AGN和AG中每个 设备的DID,每个DID和AGN可以组成一个标识字符串,用于标识一 个相应的设备;步骤(2.2.2.3)根据获取的标识字符串,扫描SCSI设备队列中的每 个未使用设备,将和上述标识字符串匹配的设备添加到相应的AGI一Core的Block—Device—Array结构中;
步骤(2.2.2.4)当一个AG的所有设备加载完毕后以后,初始化此AG的B+数;
步骤(2.2.2.5)如果找到相应的匹配设备,继续加载其他设备,等文件系统启动完毕后,返回没有匹配到的设备的信息;
步骤(2.2.3)如果文件系统被设置为不一致状态,停止并行文件系统加载,返回加载错误;
步骤(2.3)在MDS加载新AG;
步骤(2.3.1)获取磁盘分区信息和需要创建的AG信息;步骤(2.3.2) addag和元数据文件系统模块交互,从元数据文件系统模块获取唯一的AGN;
步骤(2.3.2.1 )AG向MDS发出一个请求,需要MDS返回一个AGN,步骤(2.3.2.2)元数据文件系统模块从AGLH中获取当前的AG的信息,如果找到一个未使用的AGN,则将其返回给AGADD工具,否则返回加载AG失败信息;
步骤(2.3.3)初始化AG磁盘分区;
步骤(2.3.3.1)将每个磁盘分区信息和AGN等相关信息写入此AG的每个磁盘分区的SB中;
步骤(2.3.3.2)初始化AG的MSB信息,并根据AG信息初始化管理空闲空间的两个B+树;
步骤(2.3.3.3)将由AGN和DID组成的标志字符串传输给元数据文件系统模块;
步骤(2.3.4)元数据文件系统模块为AGI初始化数据结构AGI一Core;步骤(2.3.4.1)根据接收到的AG标识字符串,扫描所有磁盘分区,找到符合的磁盘分区,并检査其ASB是否正确;
步骤(2.3.4.2)根据读取的ASB的信息,初始化AGI—Core,并将此结构加载到AG链表,修正并行文件系统当前的空间信息,如所有空间大小、剩余空间大小;
步骤(2.3.4.3)初始化此AG在MDS的磁盘上数据结构,将所添加的AG的磁盘信息写入AGList,修正MDS磁盘上的AG信息,包括AGLB和AGLH的相应的信息;
步骤(2.3.4.4)将相应的AGN标识为已用;步骤(2.4) AG加载完成,空间分配模块运行,SAN并行文件系统转入正常运行状态;
步骤(3)所述并行文件系统按以下步骤响应客户端应用程序的读写请求;步骤(3.1)所述并行文件系统按以下步骤响应一个客户端应用程序的读请
步骤(3丄1)客户端的应用程序发出读请求到所述客户端模块;
步骤(3丄1.1)所述客户端模块首先查看是否缓存了相应文件的元数据,如果缓存了,直接跳到步骤(3丄3);
步骤(3丄1.2)所述客户端模块如果没有缓存相应元数据,则通过所述交互层模块和所述文件系统管理层模块,将元数据访问请求发送到所述元数据文件系统模块;
步骤(3丄2)所述客户端模块接受元数据访问请求后,进行如下处理;
步骤(3丄2.1)所述元数据文件系统模块首先检査此元数据是否被缓存,如果缓存了,跳转到步骤(3丄2.2.3);
步骤(3丄2.2)所述元数据文件系统模块首先访问所述元数据服务器MDS磁盘;
步骤(3丄2.2.U所述元数据文件系统模块根据被访问文件的路径
名生成相应的所述目录树B+树的键值;
步骤(3.1.2.2.2)所述元数据文件系统模块读取所述目录树B+树的根节点,根据所述键值,查找对应文件的元数据;
步骤(3.1.2.2.3)所述元数据文件系统模块读取此文件的布局信息,并通过所述管理层模块、所述交互层模块返回给所述客户端模块;步骤(3丄3)所述客户端模块获取文件布局信息,并读取数据信息,步骤(3丄3.1)所述客户端模块分析获取的文件布局信息,并査找需要的数据所在的区间Extent信息;
步骤(3.1.3.2)所述客户端模块通过所述区间Extent信息获取所需要数据所在的AG;
步骤(3丄3.2.1)所述客户端模块检查本地设备列表是否缓存了所要访问的AG的所有数据磁盘的DID,如果缓存了所述数据直接跳到步骤(3丄3.3);
步骤(3丄3.2.2)如果没有所需设备的DID,那么所述客户端模块通过所述交互层模块、所述管理层模块发送相应AG的设备列表信息请求到所述元数据文件系统模块,获取属于相应AG的所有磁盘的DID;
步骤(3丄3.2.3)所述客户端模块通过已获得的DID,扫描所有磁盘的DID,找到与已获得的DID相同的属于所述相应AG的所有磁盘;
步骤(3丄3.2.4)所述客户端模块通过所述SAN驱动模块访问相应AG的所有磁盘;
步骤(3丄3.3)所述客户端模块在AG的磁盘上读取相应的数据信息;步骤(3丄4)所述客户端模块将读取的数据返回给应用程序,结束此次读请求;
步骤(3.2)所述并行文件系按以下步骤统响应一个客户端应用程序的写请
步骤(3.2.1)所述客户端模块生成文件写请求;
步骤G.2丄l)所述客户端模块首先检査已经获得文件元数据信息是否有空闲空间可以使用,如果没有跳转到步骤(3.2丄3);
步骤(3.2丄2)所述客户端模块检査文件元数据信息空闲空间是否够用,如果够用,调转到步骤(3.2.4);
步骤(3.2丄3)如果文件元数据信息空闲空间不够用,所述客户端模块生成相应的文件空间申请请求通过所述交互层模块和所述管理层模块发送到所述元数据文件系统模块,同时使用文件元数据信息已有的空闲空间;
步骤(3.2.2)所述元数据文件系统模块根据文件的写请求生成相应的空间分配请求进行操作;
步骤(3.2.2.1)所述元数据文件系统模块首先检査当前的整个文件系统的空闲空间是否满足所需要的空闲空间大小,如果不满足,则返回错误,终止上述写请求;
步骤(3.2.2.2)所述元数据文件系统模块检査空闲空间分配请求的相应的AG是否满足所需要的空闲空间大小,如果满足,选择此AG进行空间分配,否则选择一个其他可以满足此空闲空间请求的AG,跳转到步骤(3.2.3);
步骤(3.2.2.3)如果所有单个AG都不满足上述空闲空间请求,所述元数据文件系统模块选取多个AG进行空间分配,并根据每个AG的大小生成相应的空间请求;
步骤(3.2.3)所述元数据文件系统模块选取AG进行空间分配;
步骤(3.2.3.1)所述元数据文件系统模块查看当前AG的空闲空间是否满足需要分配的大小;
步骤(3.2.3.2)所述元数据文件系统模块检査当前AG的Free List是否有满足空闲空间B+树进行空间管理所需要的空间;
步骤(3.2.3.3)所述元数据文件系统模块根据分配请求查找当前AG的对应的空闲空间B+树,找到符合的Extent,可能需要多个Extent,在当前B+树中删除或添加相应的Extent;
步骤(3.2.3.4)所述元数据文件系统模块同步两个空闲空间B+树,进行两个空闲空间B+树平衡;
步骤(3.2.3.5)所述元数据文件系统模块修改当前AG和MDS上的ASB和MSB,记录空间变化;
步骤(3.2.3.6)所述元数据文件系统模块将此区间Extent的信息计入元数据服务器MDS磁盘的响应的文件的Inode,但是不修改该文件的长度信息;
步骤(3.2.3.7)所述元数据文件系统模块将得到的区间Extent填入相应的返回列表,并将所述列表通过交互层模块发送到所述客户端模块;步骤(3.2.4)所述客户端模块获得文件空闲空间信息,开始写入数据信息;
步骤(3.2.4.1)所述客户端模块分析获取的文件空闲空间信息,并査找需要的数据所在的区间Extent;
步骤(3.2.4.2)所述客户端模块通过区间Extent信息获取所需要数据所在的AG;
步骤(3.2.4.2.1)所述客户端模块检査本地设备列表是否缓存了所要访问的AG的所有磁盘的DID,如果缓存了直接跳到步骤(3.2.4.3);
步骤(3.2.4.2.2)如果没有所需设备的DID,所述客户端模块那么发送相应AG的磁盘列表信息请求到MDS,请求相应的磁盘的DID;
步骤(3.2.4.2.3)所述客户端模块通过已获得的DID,扫描所有磁盘的DID,找到与已获得的DID相同的属于所述相应AG的所有磁盘;
步骤(3.2.4.2.4)所述客户端模块通过SAN驱动模块访问相应AG的所有磁盘;
步骤(3.2.4.3)所述客户端模块在相应的AG的磁盘上写入相应的数
据;
步骤(3.2.5)元数据服务器MDS根据客户端的访问信息,修改相应文件的Inode中的元数据;
步骤(3.2.5.1)如果客户端继续写,跳转到步骤(3.2丄1);
步骤(3.2.5.2)如果数据写完,所述客户端模块将已经使用的新生成的文件元数据信息和文件空闲空间信息通过所述交互层模块发送给所述管理层模块;
步骤(3.2.5.3)如果有文件空闲空间信息,所述管理层模块发送空间释放请求到所述元数据文件系统模块进行空间释放;
步骤(3.2.5.3.1)所述元数据文件系统模块检查Free List是否有满足空闲空间B+树进行空间管理所需要的空间;
步骤(3.2.5.3.2)所述元数据文件系统模块根据分配请求査找对应的空闲空间B+树中相应的区间Extent的插入位置,进行删除或添加相应的区间Extent;
步骤(3.2.5.3.3)所述元数据文件系统模块同步两个空闲空间B+树,进行空闲空间B+树平衡,步骤(3.2.5.3.4)所述元数据文件系统模块修改对应AG的所述ASB 和MSB上的空间信息;
步骤(3.2.5.4所述元数据文件系统模块修改相应文件的Inode信息, 将文件的大小信息更新为当前的返回值
步骤(3.2.6)所述客户端模块返回操作完成信息到应用程序,结束所 述写请求。
当所述分配组只有一个磁盘分区时,只采用所述第一磁盘分区。
3权利要求
1、并行文件系统中资源的管理和分配方法,其特征在于,所述方法是一种Linux SAN并行文件系统资源的管理和分配方法,依次含有以下步骤步骤(1)构建一个所述的Linux SAN并行文件系统,以下简称并行文件系统;所述并行文件系统是由不少于一个客户端,不少于一个存储设备,不少于一个元数据服务器MDS,和存储区域网络SAN组成,所述客户端和所述元数据服务器之间的TCP/IP网络是控制通路,传输元数据和控制信息,所述客户端、所述元数据服务器与起所述存储设备作用的磁盘阵列之间的所述SAN网络是数据通路,所述元数据服务器和所述客户端直接通过所述数据通路在所述磁盘阵列上进行数据访问,在所述存储设备上,有两种磁盘,数据磁盘,至少存储数据、磁盘的状态和空间分配信息,另一种是元数据服务器MDS磁盘,至少存储元数据、所述数据磁盘的信息、所述元数据磁盘的信息、以及所述并行文件系统的结构、状态信息,其中所述数据磁盘分为至少一个分配组AG,而每个所述分配组又至少分为两个磁盘分区,其中,第一个所述磁盘分区包括保留区、分配组超级快ASB、第一B+树(1)的和第二B+树(2)的根节点Tree Root,其中,所述分配组超级快ASB包括分配组号AGN、设备标识DID、第一B+树(1)的和第二B+树(2)的根节点的地址B+Tree Root[2]、所述分配组AG状态信息AG State Information、以及所述两个B+树空闲列表Free List,简称FL,在所述的两个B+树中,每个节点是所述分配组AG中数据存储和检索的一段基本数据空间单元,简称一个快,所述两个B+树的索引中的每一项是由所述分配组AG的多个连续空闲块组成的一段空闲空间,所述分配组AG上的所述每段空闲空间通过所述两个B+树中的所对应的区间Extent来索引,每个所述区间Extent由两项组成第一项是所述该段空闲空间所在的所述磁盘分区的起始块号start,第二项是所述该段空闲空间覆盖的块的数量,用该段空闲空间的长度Len表示,初始时,所有空闲空间的索引Extent全部保存在所述两个B+树中,其中所述第一B+树(1)用所述区间Extent的起始块号作为键值,所述第二B+树(2)用所述区间Extent的第二项所述该段空间的长度作为键值,在所述分配组超级快ASB中,所述分配组AG的状态信息State Information是指所述分配组AG的空闲空间或非空闲空间,所述空闲列表Free List由所述一个块地址数组和三个变量组成,其中包括所述空闲空间组成的可分配块在所述数组中的起始位置first,用地指标是,下同,末尾位置last,可分配的块的个数count,所述的空闲列表Free List所管理的块由所述两个B+树进行分配和释放,除了所述第一磁盘分区外,其余每个磁盘分区包括保留区和超级快SB,该超级快SB包括所述的AGN和DID;所述元数据服务器MDS磁盘包括保留区、主超级快MSB,位图Bitmap,日志Journal,分配组链表信息AGLI以及目录树根节点Inode Root;所述主超级快MSB包括文件系统状态File System State,日志地址Journal Address,AG链表根节点AGLH的地址AGIP,以及目录树根节点地址Inode Address,其中,所述文件系统状态File System State包含文件系统的块大小Block Size、挂载标识Mounted Flag、元数据磁盘空间大小MDS Block Size以及空闲空间大小MDS Free Size,所述分配组AG链表根节点AGLH的地址AGIP包括所述分配组链表根节点AGLH,AG链表位图AGLB,以及所述分配组链表AG List,其中,所述分配组链表根节点AGLH包括分配组总数AGCount、所有AG的可用空间大小AGs Total Blocks以及空闲空间大小AGs FreeBlocks,所述分配组链表AG List由AG信息AGI以数组的形式组成,每个所述AG信息AGI包含一个分配组AG的信息,其中,包括分配组号AGN,不少于一个的分配中磁盘分区的设备标识DID,每个所述AG的信息AGI,线性且连续保存在所述元数据服务器MDS磁盘上,位置由所述AG链表位图AGLB所索引,所述目录树根节点Inode Root由目录B+树来管理的,所述目录B+树索引的每一项是一个节点Inode,所有文件和目录都是由Inode表示,该Inode的键值是由所述文件或者目录所在父目录的文件名的哈希值、所述文件或者目录的名称的哈希值、所述文件或者目录的类型Type组成,所述类型Type包括文件类型、目录类型、元数据类型,其中,所述文件类型的Inode用于存储文件的所述布局信息,即从所述管理空闲空间的两个B+树中分配出来的区间Extent,所述目录类型的Inode用于存储包含在当前目录下的所述文件的文件名和目录的目录名,元数据类型的Inode包含该节点Inode对应的文件或者目录的元数据信息,该节点Inode对应的文件或者目录的Inode地址,以及该节点Inode对应的文件或者目录的Inode类型Type,其中所述的元数据信息是指由IEEF制定的POSIX标准定义的元数据信息;在所述客户端设有客户端模块和交互层模块,其中,所述客户端模块设有虚拟文件系统VFS层的调用接口,并进行数据和元数据的缓存,对于所述VFS层的函数调用,则按以下方式判断若是和所述元数据服务器的交互操作,则生成相应的请求通过函数调用发送到底层的所述交互层模块,所述函数调用包括该文件系统客户端使用的所有请求操作,以及当前请求的索引,若是对所述数据磁盘进行数据访问的操作,则生成相应的数据访问请求发送到底层的SAN驱动模块,所述交互层模块通过远程过程调用协议实现所述客户端和所述元数据服务器MDS之间的通信;在所述元数据服务器中,设有SAN文件系统管理模块,简称管理层模块,交互层模块和元数据文件系统模块,其中所述交互层模块和所述管理层模块相连,当向所述管理层模块发送以下各种请求系统状态管理请求,操作状态管理请求,元数据访问请求以及空间管理请求,所述管理层模块则把生成的相应请求发送到所述元数据文件系统模块中;元数据文件系统模块设有以下接口Linux内核中的本地文件系统的内核调用接口,接收所述元数据访问的请求,元数据文件系统所述第一调用接口,供所述管理层模块调用,其中管理的信息包括空闲空间的大小、AGN、其实地址以及相应的区间Extent链表;元数据文件系统模块还设有第二模块接口,从所述元数据服务器的SAN驱动模块中调用需要释放的区间Extent,以及所述并行文件系统的包括元数据MSB在内存中的数据结构MSB_Core的指针i_private,以及以下数据结构MSB_Core,AGLH_Core,AGLH,AGI_Core,以及AGI,其中MSB_Core包括目录树根节点Inode_Root和所述AGLH内存中所述数据结构AGLH_Core的指针AGLH_point;AGLH_Core包括AGLH在所述元数据服务器MDS磁盘的地址AGLH_disk_piont和所述AGI以下两个链表指针AGI链表指针AGI_List_piont和所述AGI哈希表指针AGI_hash_piont;AGI_Core包括所述AGI在所述元数据服务器MDS磁盘的地址AGI_disk_piont,所述AGI链表指针AGI_List_piont,AGLI_Core指针AGLI_Core_piont,可访问磁盘分区在内存中的数据结构的数组Block_Device_Array,所述两个B+树在数据磁盘上地址,所述空闲空间列表FreeList在数据磁盘上的地址Free_List,以及该AG的磁盘分区的所述DID在内存中的数组Device_Lable_List;AGI,包括所述AGN和DID;步骤(2)按以下步骤启动所述并行文件系统步骤(2.1)初始化所述元数据服务器MDS磁盘;步骤(2.2)加载所述元数据服务器需要的所述各种模块,挂载所述元数据服务器MDS磁盘;步骤(2.3)在所述元数据服务器MDS磁盘上加载新的AG;步骤(3)所述并行文件系统按以下步骤响应客户端应用程序的读写请求;步骤(3.1)所述并行文件系统按以下步骤响应一个客户端应用程序的读请求步骤(3.1.1)客户端的应用程序发出读请求到所述客户端模块;步骤(3.1.1.1)所述客户端模块首先查看是否缓存了相应文件的元数据,如果缓存了,直接跳到步骤(3.1.3);步骤(3.1.1.2)所述客户端模块如果没有缓存相应元数据,则通过所述交互层模块和所述文件系统管理层模块,将元数据访问请求发送到所述元数据文件系统模块;步骤(3.1.2)所述客户端模块接受元数据访问请求后,进行如下处理;步骤(3.1.2.1)所述元数据文件系统模块首先检查此元数据是否被缓存,如果缓存了,跳转到步骤(3.1.2.2.3);步骤(3.1.2.2)所述元数据文件系统模块首先访问所述元数据服务器MDS磁盘;步骤(3.1.2.2.1)所述元数据文件系统模块根据被访问文件的路径名生成相应的所述目录树B+树的键值;步骤(3.1.2.2.2)所述元数据文件系统模块读取所述目录树B+树的根节点,根据所述键值,查找对应文件的元数据;步骤(3.1.2.2.3)所述元数据文件系统模块读取此文件的布局信息,并通过所述管理层模块、所述交互层模块返回给所述客户端模块;步骤(3.1.3)所述客户端模块获取文件布局信息,并读取数据信息,步骤(3.1.3.1)所述客户端模块分析获取的文件布局信息,并查找需要的数据所在的区间Extent信息;步骤(3.1.3.2)所述客户端模块通过所述区间Extent信息获取所需要数据所在的AG;步骤(3.1.3.2.1)所述客户端模块检查本地设备列表是否缓存了所要访问的AG的所有数据磁盘的DID,如果缓存了所述数据直接跳到步骤(3.1.3.3);步骤(3.1.3.2.2)如果没有所需设备的DID,那么所述客户端模块通过所述交互层模块、所述管理层模块发送相应AG的设备列表信息请求到所述元数据文件系统模块,获取属于相应AG的所有磁盘的DID;步骤(3.1.3.2.3)所述客户端模块通过已获得的DID,扫描所有磁盘的DID,找到与已获得的DID相同的属于所述相应AG的所有磁盘;步骤(3.1.3.2.4)所述客户端模块通过所述SAN驱动模块访问相应AG的所有磁盘;步骤(3.1.3.3)所述客户端模块在AG的磁盘上读取相应的数据信息;步骤(3.1.4)所述客户端模块将读取的数据返回给应用程序,结束此次读请求;步骤(3.2)所述并行文件系按以下步骤统响应一个客户端应用程序的写请求步骤(3.2.1)所述客户端模块生成文件写请求;步骤(3.2.1.1)所述客户端模块首先检查已经获得文件元数据信息是否有空闲空间可以使用,如果没有跳转到步骤(3.2.1.3);步骤(3.2.1.2)所述客户端模块检查文件元数据信息空闲空间是否够用,如果够用,调转到步骤(3.2.4);步骤(3.2.1.3)如果文件元数据信息空闲空间不够用,所述客户端模块生成相应的文件空间申请请求通过所述交互层模块和所述管理层模块发送到所述元数据文件系统模块,同时使用文件元数据信息已有的空闲空间;步骤(3.2.2)所述元数据文件系统模块根据文件的写请求生成相应的空间分配请求进行操作;步骤(3.2.2.1)所述元数据文件系统模块首先检查当前的整个文件系统的空闲空间是否满足所需要的空闲空间大小,如果不满足,则返回错误,终止上述写请求;步骤(3.2.2.2)所述元数据文件系统模块检查空闲空间分配请求的相应的AG是否满足所需要的空闲空间大小,如果满足,选择此AG进行空间分配,否则选择一个其他可以满足此空闲空间请求的AG,跳转到步骤(3.2.3);步骤(3.2.2.3)如果所有单个AG都不满足上述空闲空间请求,所述元数据文件系统模块选取多个AG进行空间分配,并根据每个AG的大小生成相应的空间请求;步骤(3.2.3)所述元数据文件系统模块选取AG进行空间分配;步骤(3.2.3.1)所述元数据文件系统模块查看当前AG的空闲空间是否满足需要分配的大小;步骤(3.2.3.2)所述元数据文件系统模块检查当前AG的Free List是否有满足空闲空间B+树进行空间管理所需要的空间;步骤(3.2.3.3)所述元数据文件系统模块根据分配请求查找当前AG的对应的空闲空间B+树,找到符合的Extent,可能需要多个Extent,在当前B+树中删除或添加相应的Extent;步骤(3.2.3.4)所述元数据文件系统模块同步两个空闲空间B+树,进行两个空闲空间B+树平衡;步骤(3.2.3.5)所述元数据文件系统模块修改当前AG和MDS上的ASB和MSB,记录空间变化;步骤(3.2.3.6)所述元数据文件系统模块将此区间Extent的信息计入元数据服务器MDS磁盘的响应的文件的Inode,但是不修改该文件的长度信息;步骤(3.2.3.7)所述元数据文件系统模块将得到的区间Extent填入相应的返回列表,并将所述列表通过交互层模块发送到所述客户端模块;步骤(3.2.4)所述客户端模块获得文件空闲空间信息,开始写入数据信息;步骤(3.2.4.1)所述客户端模块分析获取的文件空闲空间信息,并查找需要的数据所在的区间Extent;步骤(3.2.4.2)所述客户端模块通过区间Extent信息获取所需要数据所在的AG;步骤(3.2.4.2.1)所述客户端模块检查本地设备列表是否缓存了所要访问的AG的所有磁盘的DID,如果缓存了直接跳到步骤(3.2.4.3);步骤(3.2.4.2.2)如果没有所需设备的DID,所述客户端模块那么发送相应AG的磁盘列表信息请求到MDS,请求相应的磁盘的DID;步骤(3.2.4.2.3)所述客户端模块通过已获得的DID,扫描所有磁盘的DID,找到与已获得的DID相同的属于所述相应AG的所有磁盘;步骤(3.2.4.2.4)所述客户端模块通过SAN驱动模块访问相应AG的所有磁盘;步骤(3.2.4.3)所述客户端模块在相应的AG的磁盘上写入相应的数据;步骤(3.2.5)元数据服务器MDS根据客户端的访问信息,修改相应文件的Inode中的元数据;步骤(3.2.5.1)如果客户端继续写,跳转到步骤(3.2.1.1);步骤(3.2.5.2)如果数据写完,所述客户端模块将已经使用的新生成的文件元数据信息和文件空闲空间信息通过所述交互层模块发送给所述管理层模块;步骤(3.2.5.3)如果有文件空闲空间信息,所述管理层模块发送空间释放请求到所述元数据文件系统模块进行空间释放;步骤(3.2.5.3.1)所述元数据文件系统模块检查Free List是否有满足空闲空间B+树进行空间管理所需要的空间;步骤(3.2.5.3.2)所述元数据文件系统模块根据分配请求查找对应的空闲空间B+树中相应的区间Extent的插入位置,进行删除或添加相应的区间Extent;步骤(3.2.5.3.3)所述元数据文件系统模块同步两个空闲空间B+树,进行空闲空间B+树平衡,步骤(3.2.5.3.4)所述元数据文件系统模块修改对应AG的所述ASB和MSB上的空间信息;步骤(3.2.5.4)所述元数据文件系统模块修改相应文件的Inode信息,将文件的大小信息更新为当前的返回值步骤(3.2.6)所述客户端模块返回操作完成信息到应用程序,结束所述写请求。
2、根据权利要求l所述并行文件系统中资源的管理和分配方法,其特征在 于当所述分配组只有一个磁盘分区时,只采用所述第一磁盘分区。
全文摘要
并行文件系统中资源的管理和分配方法属于SAN区域网络存储领域。其特征是通过将存储资源分成多个分配组(Allocate Group,AG),并行分配,降低了单个分配组对其他分配组的影响,提高了并行文件系统的吞吐率、可靠性和管理效率,每个AG可以由单个磁盘分区或者多个磁盘按照Raid形式构成,多个AG之间也可以使用副本策略,通过存储资源的两层虚拟化,提高系统的性能、可用性和可靠性,每个分区使用B+树进行空间分配,并存储自己的B+树数据,与传统SAN文件系统相比降低了并行文件系统元数据服务器的压力,提高了分配效率,在通过B+树实现的目录树中索引文件元数据和目录元数据,保持文件元数据存储的局部性,与传统SAN文件系统相比提高了元数据访问的性能。
文档编号H04L29/08GK101567003SQ20091008570
公开日2009年10月28日 申请日期2009年5月27日 优先权日2009年5月27日
发明者易乐天, 磊 王, 舒继武, 巍 薛 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1