一种磁盘空闲空间分配的方法
【技术领域】
[0001]本发明涉及计算机存储技术领域,尤其涉及文件系统对磁盘空间的管理和空闲空间的分配。
【背景技术】
[0002]在文件系统对文件的读写操作中,为了提高读写效率,一般采用异步写的方式,SP在内存中分配出一片缓存,把文件数据首先缓存在缓存中,对文件的写操作即是对缓存中数据的写操作,然后在某个时间点由具体的刷写线程将缓存中的数据刷写到磁盘上。在刷写之前的这段时间内可能会对文件进行了多次写操作,也就是多次分配空间,同样为了使同一个文件的数据块尽量连续,最好的办法是当磁盘块要分配给待写操作时,从空闲空间计数中减去附加数据的磁盘空间大小,但是实际上并不在空闲空间位图中分配空间。相反,附加数据一直保存在内存中,直到刷写线程决定刷新写缓冲到磁盘时,才将空间分配出去。
[0003]磁盘寻道时间一直是影响文件系统性能的一个主要因素。因此文件系统的空间策略是尽量让新分配的块紧接着原文件,使文件在磁盘上的布局尽量连续,以减少磁盘寻道时间,提高顺序访问文件的性能。然而,当在同一目录下的两个文件同时申请磁盘块时,这两个文件就会交织在一起。因此需要采取一定的方法避免这种情况并同延迟分配的策略相结合,使同一个文件的数据块尽量连续。
【发明内容】
[0004]为了解决上述技术问题,本发明提供了一种利用保留空间的方式同文件系统的延迟分配相结合的方法,尽可能的保证了文件在增长过程中所得到的分配空间的连续性,使文件数据的磁盘空间地址尽可能连续,减少文件碎片,减少读写数据时的寻道时间。
[0005]为了达到本发明目的,本发明提供了一种磁盘空闲空间分配方法,其特征在于,为文件设置保留空间,文件系统的延迟分配使用上述保留空间,以使文件增长过程中分配的空间为物理上为一段连续地址。
[0006]进一步地,所述保留空间是指文件系统为文件增长需要在磁盘上保留的物理地址空间,其紧接着所述文件的末尾地址位置的一段连续空间。
[0007]进一步地,所述保留空间在磁盘设备上以键值对的形式组织,每个键值对与所述文件通过inode号关联在一起。
[0008]进一步地,根据文件的增长次数计算需要设置的保留空间的大小。
[0009]进一步地,所述保留空间具有最大值和最小值,所述根据文件的增长次数计算的保留空间的大小与所述最大值比较,其中取较小者作为新的保留空间的大小。
[0010]进一步地,如果文件的保留空间没有被分配完,则在进行新的保留空间分配时,上述未分配的保留空间与所述文件末尾地址相连的连续空间合并用于新的保留空间的分配。
[0011]进一步地,所述延迟分配是指在文件增长需要分配新的磁盘空间时,预留出增长需要的空间,并不立即在磁盘上给其分配空间,直到文件数据落盘时才真正分配空间。
[0012]进一步地,所述文件数据落盘是指文件系统在对文件写操作时,先将数据写到内存的缓存中,等到某个时间点再统一写到磁盘设备上。
[0013]进一步地,为新创建的文件延迟分配预留文件所需大小的磁盘空间时,如果所述磁盘没有空闲空间时,则查找保留空间并将其转变为普通的磁盘空闲空间进行预留分配。
[0014]进一步地,所述文件系统在延迟分配使用了上述保留空间后为所述文件申请新的保留空间。
[0015]为了达到本发明目的,本发明还提供了一种磁盘空闲空间分配装置,其特征在于,包括:处理器;用于存储所述处理器的可执行程序的存储器;其中,所述处理器被配置为用于执行上述方法。
【附图说明】
[0016]附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。
[0017]图1示出了根据本发明的一实施例的文件的保留空间申请流程图;
[0018]图2示出了根据本发明的一实施例的磁盘空闲空间的分配流程图。
【具体实施方式】
[0019]为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
[0020]在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0021]为了更好地说明,首先明确两个概念:保留空间和预留空间。
[0022]本说明中所述的保留空间,是指文件系统为文件增长需要在磁盘上保留的物理地址空间,是紧接着目前文件的末尾地址位置的一段连续空间。
[0023]所述预留空间,其是延迟分配中的概念,是指在对文件进行写操作需要增加文件的地址空间时预先留出来的磁盘空间,并没有真正在磁盘上分配,当文件系统刷写缓存到磁盘时才真正分配空间,此时的范围可能由于在刷写缓存之前文件已进行了多次空闲空间分配而将这些地址进行了合并及调整等操作。
[0024]每一个文件对应一个保留空间结构,这个结构以B+tree的形式组织起来,B+tree的索引是文件的inode号,这个B+tree在本发明中记为保留空间B+tree。保留空间在磁盘设备上以键值对的形式组织,每个键值对与特定文件通过inode号(文件标识)关联在一起。
[0025]文件所占用的磁盘空间跟文件的增长次数成一定的正比关系,文件增长次数越多所使用的磁盘空间越大。设置标记记录文件的增长次数,在给文件设置保留空间时根据文件的增长次数决定保留空间的大小。文件的保留空间有一个最小值和一个最大值,在给一个文件第一次设置保留空间时设置为最小值,以后根据文件的增长次数设置保留空间大小直到预先设定的最大值。本说明中文件的增长次数记为GrowNum,保留空间最小值记为MinVal,保留空间最大值记为MaxVal。
[0026]参考附图1,根据本发明的一实施例,保留空间在文件第一次创建或被分配用于文件增长之后需要重新向磁盘申请空间,根据不同的情况进行不同的操作:
[0027](I)如果是文件第一次设置保留空间,则查询判断是否有同该文件末尾地址相连的连续空闲空间。如果有,则比较这段连续空闲空间与MinVal的大小,如果这段连续空闲空间小于等于MinVal,则将这段连续空闲空间设置为保留空间;如果这段连续空闲空间大于MinVal,