云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云存储_阿里云服务器连不上_稳定性好

小七 141 0

数据云存储_有哪些_价格便宜的云存储

我写这篇文章大约是一年前,当时我想弄清楚metaslab是如何与georgewilson一起工作的。当时,我发现和George一起浏览代码非常有帮助,所以我发布这篇文章以防其他人发现它有用。在OpenZFS中,metaslab是spa用来跟踪内存分配的数据结构。尤其是,每个vdev被分成大约200个区域(vdev_metaslab_set_size)。分配器的记帐信息在内存中表示为范围树的集合,在磁盘上表示为空间映射。空间地图空间映射是一个区域的空闲/分配空间的相当简单的日志。当空间从区域中释放/分配时,记录会被追加到spacemap中(根据需要,最后一个块被覆盖)-在metaslab_sync中,当它对分配的空间执行space_map_写操作时,大数据软件,会发生这种情况。随着时间的推移,附加的分配记录的长日志将导致空间映射的空间利用效率低下。如果metaslab_should_condense确定空间映射效率太低,那么metaslab_condense将重写整个空间映射,而不仅仅是追加新的记录。ms_树和ms_size_树metaslab的核心是ms_-tree,它是表示可分配的可用空间的范围树。此范围树由ms_size_tree镜像:ms_size_树存储与ms_树相同的信息,只有ms_树中的空闲段按地址排序,在ms_size_树中按大小排序。此外,还有3种其他树用于跟踪元板中的空间:ms_alloctree、ms_freetree和ms_defertree。不幸的是,这是一个成熟的,经过优化的系统软件,这一事实可能掩盖了正在发生的事情。在继续之前,简要讨论ZFS中的事务组将非常有用。事务处理组所有写zio在创建时都被分配到事务组(txg)。始终有3个活动事务组:打开上下文、静止上下文和同步上下文中各有一个。在开放上下文中,为对应数据集的dsl dir之外的操作保留了空间,ZIL写出了执行IOs的意图。在同步上下文中,我们写出所有已更改的块(在spa_sync中)。这可能会导致分配额外的元数据块,弄脏更多的元板,而这些元板又需要同步到它们各自的空间映射中,等等。因此,我们必须在迭代过程中写入,直到最终通过不再写入脏块而"收敛"。为了帮助确保收敛,我们进行了以下几个优化:在zfs_sync_pass_deferred_free passes之后,我们不会写出释放的空间。相反,我们将其放入spa_deferred_bpobj中,以便在下一个txg中释放它。吕阿洛克崔女士和吕自由树女士ms_alloctree和ms_freetree包含分配/释放此同步过程的所有块。不幸的是,对于每个可能的txg状态,我们需要为每一个树都有一个并行副本。这是因为并不是所有的分配/释放都在同步上下文中执行—ZL能够在同步上下文之外执行写入和分配。在每个同步过程结束时,通过metaslab_sync同步所有脏metaslab。在metaslab_sync中,当前(同步)txg的ms_alloctree和ms_freetree中的所有脏块都写入关联的空间映射,然后将它们清空。因此,同步txg的ms_alloctree和ms_freetree在同步过程结束时为空。在这里事情变得有点复杂。我们的目标是能够回滚到TXG\u defere_大小的TXG,如果需要的话。为此,我们需要确保在txg n中释放的块在txg n+txg_DEFER_SIZE之前实际上不可分配。我们通过在这个txg的ms_defertree中保存释放的空间来确保这一点,而不是在将释放的空间同步到空间映射之后将它们直接移动到ms_树中。在TXG_DEFER_SIZE txgs之后,企业大数据,大数据培训,它们被移到ms_树中,在那里它们可以被分配。因为在txg结束之前,ms_defertree中的空间是不可用的,所以我们将同步txg中释放的所有块累加到一个"freed"树中。因为没有人能够使用它(我们至少有一个txg的槽,比我们可能的txg状态多1个槽,所以它不能在开放上下文中,并且ZIL不能修改它),所以我们使用上一个事务的ms_freetree(txg CLEAN(txg))来处理这个释放的树。请注意,空间映射在磁盘上表示的可用空间的计算可能与metaslab的ms_树在内存中表示的可用空间不匹配。此外,我们有一个性能优化,允许我们从元板中释放块,而无需从磁盘上读取(只需将记录附加到空间映射)。执行此操作时,释放的空间将添加到metaslab的ms_defertree中,并在metaslab_load中加载metaslab时从ms_tree中删除。因此,可用空间ms_defertrees和ms_树与空间映射所表示的可用空间相匹配。元板的寿命元板的寿命如下:在开放环境中,ZIL可以发出IOs,永久免费自助建站软件,从而分配和释放块。在同步上下文中:前一个txg的spa_deferred_bpobj被同步,导致写入空间映射和潜在的分配和释放。每次同步过程:写入所有脏的vdev,导致分配和释放块。所有元板同步:如果这是第一个同步过程,而元板效率太低,则它会被压缩。否则,新云,分配/空闲记录将追加到空间映射。ms_alloctree被清空。删除ms_freetree中的块并将其添加到先前的txgs ms_freetree中。ms_alloctree和ms_freetree现在是空的,以前的txgs ms_freetree包含这个txg释放的所有块的累计。对于每个脏元板,将ms_defertree中的块添加到ms_树中,并且将先前txgs ms_freetree中的块移动到ms_defertree中。Alex Reece撰写,Google+上见。