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