我正在浏览谷歌文件系统(GFS)文件,它提到GFS使用Lazy空间分配来减少内部碎片。
有人可以解释,懒惰的空间如何减少内部碎片?
答案 0 :(得分:8)
使用惰性空间分配时,空间的物理分配会尽可能地延迟,直到累积了大小为块大小的数据(在GFS的情况下,根据2003年的论文为64 MB)。换句话说,在磁盘上分配新块之前的决策过程很大程度上受要写入的数据大小的影响。这种等待而不是基于某些其他特性分配更多块的优先选择,最小化了内部碎片的可能性(即64 MB块的未使用部分)。
在谷歌的论文中,它还说:“大多数文件块已满,因为大多数文件包含许多块,只有最后一块可以部分填充。”因此,相同的方法应用于文件创建。
它类似于: http://duartes.org/gustavo/blog/post/how-the-kernel-manages-your-memory
答案 1 :(得分:1)
我还没看完整篇论文..但我希望以下片段可以帮助你。
我要问的第一个问题是:在文件系统中使用大块大小会产生什么影响?我们假设FS块大小为64MB。好消息是我们以良好的连续块写入硬盘(每次搜索写入更多数据),更少的元数据保留在间接块中等。坏消息是内部碎片..如果文件是1MB,但最小块大小是64MB ,内部碎片为63MB。那么,如何获得好消息并避免坏消息呢?
一种方法是进行惰性空间分配或延迟空间分配。在这里,我们保持块大小(比如1MB),但是当我们写入磁盘时,我们写了一大堆数据,即多个1MB块。这样,我们就可以获得大块写入的优点。请注意,这意味着我们写入一个incore缓冲区,但告诉write()sys调用它已写入磁盘...就像写入缓冲区缓存一样。
注意:当“时间”进行实际块分配时,我们需要保证磁盘上的空间。因此,延迟块分配=>空间预留在写入时完成,但是空间分配在稍后有足够的数据块累积在核心内时完成。
答案 2 :(得分:0)
首先将数据写入缓冲区。因此,不是在创建文件的那一刻分配内存,而是等待实际写入发生。与在XFS http://en.wikipedia.org/wiki/XFS#Delayed_allocation
中一样答案 3 :(得分:0)
您无需在创建时修复文件大小。您可以将其附加到更大的文件中。您可以参考this。