【问题标题】:What is lazy space allocation in Google File system什么是 Google 文件系统中的惰性空间分配
【发布时间】:2013-08-09 04:41:16
【问题描述】:

我正在浏览 google 文件系统 (GFS) 论文,它提到 GFS 使用延迟空间分配来减少内部碎片。
有人可以解释一下,惰性空间如何减少内部碎片?

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

【问题讨论】:

  • what is lazy allocation?的可能重复
  • 如果您发现其中一个回复有用,请勾选回复文本左侧的标记来接受它。

标签: filesystems lazy-evaluation fragmentation


【解决方案1】:

您不必在创建时修复文件大小。您可以将其附加到更大的文件中。可以参考this

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      数据首先写入缓冲区。因此,它们不是在创建文件时分配内存,而是等待实际写入发生。和 XFS 一样http://en.wikipedia.org/wiki/XFS#Delayed_allocation

      【讨论】:

        【解决方案4】:

        我还没有阅读整篇论文..但我希望以下片段能对您有所帮助。

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

        一种方法是进行惰性空间分配或延迟空间分配。在这里,我们保持块的大小很小(比如 1MB),但是当我们写入磁盘时,我们会写入一大块数据,即许多 1MB 的块。这样,我们就得到了大块写入的好处。请注意,这意味着我们写入内核缓冲区但告诉 write() 系统调用它已完成写入磁盘......就像写入缓冲区缓存一样。

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

        【讨论】:

        • 但 GFS 中的块大小并不小(1 MB)。实际上它说“我们选择了 64 MB,这比典型的文件系统块大小要大得多。惰性空间分配避免了由于内部碎片而浪费空间”。因此,尽管使用了更大的块大小,但内部碎片减少了,如何?也许我在这里遗漏了任何概念。
        • 你好,这是否意味着对于一个 1kb 的文件,磁盘上不可用的空间是 64MB?
        猜你喜欢
        • 1970-01-01
        • 2011-02-24
        • 2015-03-19
        • 2013-09-04
        • 2022-11-04
        • 1970-01-01
        • 2011-08-22
        • 2020-08-22
        • 1970-01-01
        相关资源
        最近更新 更多