一种提升文件系统IO性能的方法与流程

文档序号:17358064发布日期:2019-04-09 21:51阅读:634来源:国知局
一种提升文件系统IO性能的方法与流程

本发明属于计算机系统软件专业技术领域,具体提出一种提升文件系统io性能的方法。



背景技术:

文件系统以链表方式管理逻辑分区的空间分配时,会造成空间碎片化的问题,特别是对大文件进行io操作时,在链表查找地址会耗费大量时间,从而降低文件系统的整体io性能。针对以链表方式管理空间分配的文件系统,如果对于空间碎片化的问题处理不当,长时间使用文件系统后整体性能将急剧下降。如何在合理的空间利用率下有效解决空间碎片化造成的文件系统io性能下降是需要重点研究的问题。因此,提出一种提升文件系统io性能的方法。



技术实现要素:

本发明的目的:

为了解决单一链式碎片化空间分配方法导致大文件读写删除等操作频繁与底层设备io,造成文件系统性能降低的问题,以结合多种空间分配方法在合理的空间利用率下有效提升文件系统的整体io性能,特提出本发明。

本发明的技术方案:

一种提升文件系统io性能的方法,其特征在于,包括以下步骤:

步骤1:在文件系统启动时,创建链式碎片化空间分配管理结构,根据块标记判断其为已分配或空闲状态,以链表方式维护每一个文件的空间使用情况;

步骤2:在文件系统启动时,创建连续空间分配管理结构,主要成员包括连续空闲空间的起始块号与块数目、所属的文件句柄以及文件是否使用连续空间地址索引的标记;

步骤3:在文件系统正常运行创建文件时,当选择为该文件预先分配连续空闲空间,则遍历整个碎片化空间链表尝试找到满足预先分配条件的连续空闲空间;

步骤4:如果指定了预先分配大小,则找到当前空间第一个不小于预先分配大小的连续空闲空间,转向步骤5;如果未指定预先分配大小,则找到当前空间最大的连续空闲空间,直接将其标记为已分配,转向步骤6;如果无法找到满足条件的连续空闲空间,则执行完毕,返回失败;

步骤5:在文件系统正常运行创建文件时,当已找到满足预先分配条件的连续空闲空间时:如果该连续空闲空间等于预先分配大小,则直接将该链表元素标记为已分配;如果该连续空闲空间大于预先分配大小,则其分裂两个链表元素,一个大小等于预先分配大小并将其标记为已分配,另一个则成为一段新的空闲空间,然后根据分配的结果在该文件句柄中填充连续空间分配管理结构各成员;

步骤6:在文件系统正常运行中,当选择以预先分配空间方式打开文件时,检查该文件真正的空间使用情况:如果该文件仅存在一个连续使用空间,则将文件是否使用连续空间地址索引标记为真,转向步骤7;如果该文件使用超过一个的不连续空间,则将其标记为假,转向步骤9;

步骤7:在文件系统正常运行中,以预先分配空间方式创建并打开文件后,向该文件写入数据时,将在预先分配的连续空间直接进行线性索引,不从空间链表中查找地址空间信息,在文件关闭时将同步更新文件的真正大小;

步骤8:在文件系统正常运行中,以预先分配空间方式创建并打开文件后,从该文件读取数据时,将在预先分配的连续空间直接进行线性索引,不从空间链表中查找地址空间信息,执行完毕;

步骤9:在文件系统正常运行中,读写文件时通过空间链表索引进行逻辑地址向物理地址的转换,执行完毕。

所述的文件系统以链表方式管理空间分配。

所述的文件系统的逻辑分区大于1gb。

本发明具有的优点效果:

实施本发明所述的方法后,可解决单一链式碎片化空间分配方法导致大文件读写删除等操作频繁与底层设备io,造成文件系统性能降低的问题。

附图说明

图1为空间混合分配方法示意图。

图2为空间混合分配方法执行流程图。

具体实施方式

以链表方式管理空间分配的文件系统,由于每个文件可能会被多次打开并追加写入数据,所以文件使用的空间并不连续且以链表的方式互相连接。当一个文件的数据越来越多,所包含的不连续空间将会越来越多,查找的耗时也会越来越长。单一的链式空间分配不足以解决空间碎片化的问题,所以针对大文件应结合连续空间分配方法以提升其io性能,如图1。本发明的核心技术方案如下:

1).在文件系统启动时,创建链式碎片化空间分配管理结构与连续空间分配管理结构。

在文件系统启动时,首先创建链式碎片化空间分配管理结构,根据块标记判断其为已分配或空闲状态,以链表方式维护每一个文件的空间使用情况。其次创建连续空间分配管理结构,主要成员包括连续空闲空间的起始块号与块数目、所属的文件句柄以及文件是否使用连续空间地址索引的标记等。

2).在文件系统运行中,创建文件时连续空闲空间的查找与分配。

在文件系统正常运行创建文件时,当选择为该文件预先分配连续空闲空间,则遍历整个碎片化空间链表尝试找到满足预先分配条件的连续空闲空间。

当已找到满足预先分配条件的连续空闲空间时:如果该连续空闲空间等于预先分配大小,则直接将该链表元素标记为已分配;如果该连续空闲空间大于预先分配大小,则其分裂两个链表元素,一个大小等于预先分配大小并将其标记为已分配,另一个则成为一段新的空闲空间。然后根据分配的结果在该文件句柄中填充连续空间分配管理结构各成员。

3).在文件系统运行中,读写文件时连续空间的线性索引。

在文件系统正常运行中,当选择以预先分配空间方式打开文件时,检查该文件真正的空间使用情况:如果该文件仅存在一个连续使用空间,则将文件是否使用连续空间地址索引标记为真;如果该文件使用超过一个的不连续空间,则将其标记为假。

以预先分配空间方式创建并打开文件后,向该文件写入数据时,将在预先分配的连续空间直接进行线性索引,不再需要从空间链表中查找地址空间信息,在文件关闭时将同步更新文件的真正大小,如图2。

以预先分配空间方式创建并打开文件后,从该文件读取数据时,将在预先分配的连续空间直接进行线性索引,不再需要从空间链表中查找地址空间信息,如图2。

具体的,使用本发明所述的一种提升文件系统io性能方法的具体实施例的工作步骤如下:

1)在sata设备上配置一个fat文件系统逻辑分区,其中sata设备物理扇区大小为512b,逻辑分区大小为2gb(包含4194304个物理扇区),逻辑分区类型为fat32(fat表中一个表项大小为4b),逻辑分区单个簇大小为4kb(包含8个物理扇区)。

2)在文件系统启动时,创建链式碎片化空间分配管理结构,根据fat表中标记判断各个簇为已分配或空闲状态,以链表方式维护每一个文件的簇使用情况。

3)在文件系统启动时,创建连续空间分配管理结构,主要成员包括连续空闲簇的起始簇号与簇数目、所属的文件句柄以及文件是否使用连续空间地址索引的标记等。

4)在文件系统正常运行中,创建一个新文件且为其预先分配256mb的连续空闲空间,根据1)中所述,fat文件系统空间管理的最小单位为簇,256mb连续空闲空间对应65536个连续空闲簇,遍历整个碎片化空间链表尝试找到不小于65536个簇数目的连续空闲簇。

5)当已找到不小于65536个簇数目的连续空闲簇时:如果其正好包含65536个簇,则直接将该链表元素标记为已分配,同步在fat表中更新相关簇;如果其包含的簇数目大于65536,则其分裂两个链表元素:一个连续空闲簇包含65536个簇,将其在链表标记为已分配,同步在fat表中更新相关簇的使用情况;另一个则成为一段新的空闲簇。

6)假设找到的连续空闲簇起始簇号为1000,则根据分配结果在该文件句柄中填充连续空间分配管理结构各成员:将连续空闲簇起始簇号与簇数目分别设置为1000与66536,将文件句柄设置为新文件句柄,将文件是否使用连续空间地址索引标记为真。

7)向该文件写入128mb数据时,不再需要从fat表中查找空闲簇,将在1000~66536个连续空闲簇中直接进行线性索引,然后将

128mb数据写入1000~33768空闲簇中,接着在文件关闭时将同步更新文件真正大小,并在fat表中更新相关簇的使用情况。

8)从该文件偏移128kb处读取64mb数据时,不再需要从fat表中查找该文件的簇,将在1000~33768个连续簇中直接进行线性索引,然后将从1032~17416簇中读取64mb数据。

按照上述工作步骤执行即可实现发明所达到的效果。

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