微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 在块层/设备上绕过4KB块大小限制

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

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

对于实验,我想知道是否有办法实际增加这个块大小,这样我们将节省一些时间(而不是多次4KB写入,我们可以用更大的块大小来做).

有没有FS或任何现有的项目我可以看看这个?
如果没有,那么做这个实验需要什么 – 需要修改linux的哪些部分?
试图找出所需的困难和资源水平.或者,如果甚至不可能这样做和/或我们甚至不需要这样做的任何原因.任何评论表示赞赏.

谢谢.

解决方法

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

另外,让我们假设系统存在巨大的内存压力,我们需要写出最后一页;如果没有足够的内存可用于实例化32k块的其他28k,那么我们可以执行读 – 修改 – 写周期只是为了在偏移20000处更新那个脏的4k页?

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

还要考虑一下,即使你雇用一个Linux VM专家来完成这项工作(硬盘供应商会非常喜欢你,因为他们也希望能够部署具有32k或64k物理扇区大小的HDD),它将会在这一个经过修改的VM层出现在Red Hat Enterprise Linux内核或SuSE或Ubuntu的等效企业或LTS内核之前5到7年.因此,如果您正在一家希望将您的SSD产品销售到企业市场的初创公司工作 – 您现在也可以放弃这种方法.在资金耗尽之前,它不会起作用.

现在,如果您正在为一家正在制作自己的硬件(如Facebook,亚马逊,谷歌等)的大型云公司工作,也许您可​​以走这条特定的道路,因为他们不使用添加新的企业内核以冰川的速度运行 – 但出于这个原因,他们希望相对靠近上游内核,以最大限度地降低维护成本.

如果您为这些大型云计算公司之一工作,我强烈建议您联系同一领域的其他公司,也许您可​​以与他们合作,看看您是否可以一起完成这种开发工作尝试在上游进行这种改变.实际上,这确实不是一个微不足道的变化 – 特别是因为上游Linux内核开发人员会要求这不会对常见情况下的性能产生负面影响,而不会涉及> 4k块设备在不久的将来的任何时间.如果你在Facebook,谷歌,亚马逊等地工作,这不是你想要作为内核的私人改变而维护的那种改变,而是你想要上游的东西,因为其他方面它将是一个巨大的,侵略性的变化,支持它作为一个树外补丁将是一个巨大的头痛.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐