use*_*404 15 filesystems lazy-evaluation fragmentation
我正在浏览谷歌文件系统(GFS)文件,它提到GFS使用Lazy空间分配来减少内部碎片.
有人可以解释,懒惰的空间如何减少内部碎片?
在惰性空间分配的情况下,空间的物理分配会尽可能地延迟,直到累积了大小为块大小的数据(在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() 系统调用它已完成写入磁盘......就像写入缓冲区高速缓存一样。
注意:当“时间”到来时进行真正的块分配时,我们需要保证磁盘上的空间。因此,延迟块分配 => 空间预留是在写入时完成的,但空间分配是在内核中积累了足够的数据块时完成的。