谷歌文件系统中的惰性空间分配是什么



我正在阅读谷歌文件系统(GFS)的论文,其中提到GFS使用Lazy空间分配来减少内部碎片
有人能解释一下,惰性空间是如何减少内部碎片化的吗?

来源:http://research.google.com/archive/gfs-sosp2003.pdf

使用惰性空间分配,空间的物理分配会尽可能长时间地延迟,直到积累了块大小的数据(在GFS的情况下,根据2003年的论文,为64MB)。换句话说,在磁盘上分配新块之前的决策过程在很大程度上受到要写入的数据大小的影响。这种等待而不是基于某些其他特性分配更多块的偏好,最大限度地减少了内部碎片(即64MB块的未使用部分)的机会。

在谷歌的论文中,它还说:"大多数块都是满的,因为大多数文件都包含许多块,只有最后一个块可能被部分填满。"因此,同样的方法也适用于文件创建。

与此类似:http://duartes.org/gustavo/blog/post/how-the-kernel-manages-your-memory

我还没有读完整篇论文。。但我希望下面的片段能对你有所帮助。

我想问的第一个问题是:在文件系统中拥有大的块大小会产生什么影响?假设FS块大小为64MB。好消息是,我们在硬盘上写入了良好的连续块(每次查找写入的数据更多),在间接块中保留的元数据更少,等等。坏消息是内部碎片。。如果文件是1MB,但最小块大小是64MB,则存在63MB的内部碎片。那么,如何获得好消息,避免坏消息呢?

一种方法是进行延迟空间分配或延迟空间分配。在这里,我们保持块大小较小(比如1MB),但我们在写入磁盘时会写入大量数据,即许多1MB的块。通过这种方式,我们获得了大块写入的好处。请注意,这意味着我们写入incore缓冲区,但告诉write()sys调用它已完成写入磁盘。。。就像写入缓冲区缓存一样。

注意:当"时间"到了进行真正的块分配的时候,我们需要保证磁盘上的空间。因此,延迟块分配=>空间预留是在写入时完成的,但空间分配是在内核中积累了足够的数据块之后完成的。

数据首先写入缓冲区。因此,它们不是在创建文件的那一刻分配内存,而是等待实际写入。如XFShttp://en.wikipedia.org/wiki/XFS#Delayed_allocation

创建时不必修改文件大小。您可以将它附加到一个更大的文件中。你可以参考这个。

最新更新