gpt4 book ai didi

linux - 绕过 block 层/设备上的 4KB block 大小限制

转载 作者:IT王子 更新时间:2023-10-29 00:38:02 24 4
gpt4 key购买 nike

我们正在开发一种 ssd 类型的存储硬件设备,它可以一次处理大于 4KB 的大块大小(即使是 MB 大小)的读/写请求。我的理解是 linux 及其文件系统会将文件“切碎”为 4KB 的 block 大小,这些 block 大小将被传递给 block 设备驱动程序,这将需要用来自设备的数据物理填充 block (例如,用于写入)

我也知道内核页面大小在这个限制中起作用,因为它被设置为 4KB。

对于实验,我想看看是否有办法真正增加这个 block 大小,这样我们就可以节省一些时间(我们可以用更大的 block 大小来完成,而不是多次写入 4KB)。

是否有任何 FS 或任何现有项目可供我查看?如果没有,做这个实验需要什么——linux 的哪些部分需要修改?试图找出困难程度和所需资源。或者,如果甚至不可能这样做和/或我们甚至不需要这样做的任何原因。任何意见表示赞赏。

谢谢。

最佳答案

4k 的限制是由于页面缓存。主要问题是如果你有一个 4k 页面大小,但是一个 32k block 大小,如果文件只有 2000 字节长会发生什么,所以你只分配一个 4k 页面来覆盖 block 的前 4k。现在有人试图偏移 20000,并写入一个字节。现在假设系统内存压力很大,前 2000 字节的 4k 页面是干净的,被推出内存。您如何跟踪 32k block 的哪些部分包含有效数据,以及当系统需要写出偏移量 20000 处的脏页时会发生什么?

此外,假设系统内存压力很大,我们需要写出最后一页;如果没有足够的可用内存来实例化 32k block 中的其他 28k,那么我们可以执行读取-修改-写入循环只是为了更新偏移量 20000 处的那个脏 4k 页面?

这些问题都可以解决,但是需要在VM层做大量的手术。 VM 层需要知道对于这个文件系统,页面需要一次以 8 个页面的 block 的形式实例化,如果存在推出特定页面的内存压力,则需要写出所有 8 个页面同时如果它是脏的,然后同时从页面缓存中删除所有 8 个页面。所有这些都意味着您想要跟踪页面使用情况和脏页,而不是在 4k 页面级别,而是在复合 32k 页面/“ block ”级别。它基本上将涉及对 VM 子系统的几乎每个部分的更改,从页面清理器到页面错误处理程序、页面扫描器、写回算法等等。

还要考虑,即使您确实聘请了 Linux VM 专家来完成这项工作(HDD 供应商会非常喜欢您,因为他们也希望能够部署具有 32k 或 64k 物理扇区大小的 HDD) ,这种经过修改的 VM 层将在 Red Hat Enterprise Linux 内核或 SuSE 或 Ubuntu 的等效企业或 LTS 内核中出现还需要 5-7 年的时间。因此,如果您在一家希望将您的 SSD 产品销售到企业市场的初创公司工作——您现在最好放弃这种方法。在您的钱用完之前,它是行不通的。

现在,如果您碰巧在一家制造自己硬件的大型云公司(如 Facebook、亚马逊、谷歌等)工作,也许您可​​以走这条路,因为他们不使用企业内核以缓慢的速度添加新功能——但出于这个原因,他们希望相对靠近上游内核以最大限度地降低维护成本。

如果您确实为这些大型云公司之一工作,我强烈建议您联系同一领域的其他公司,也许您可​​以与他们合作,看看是否可以一起进行这种开发一起工作,努力让这种改变上游。这真的,真的不是一个微不足道的变化,虽然 --- 特别是因为上游 linux 内核开发人员会要求这不会对常见情况下的性能产生负面影响,而这不会 在不久的将来随时涉及 > 4k block 设备。如果你在 Facebook、谷歌、亚马逊等公司工作,这不是你想要作为对内核的私有(private)更改来维护的那种更改,而是你希望获得上游的东西,因为其他明智的将是一个如此巨大的、侵入性的变化,以至于支持它作为一个树外补丁将是非常令人头疼的。

关于linux - 绕过 block 层/设备上的 4KB block 大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30585565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com