linux – 在块层/设备上绕过4KB块大小限制
我们正在开发一种ssd类型的存储硬件设备,它可以一次接收大块大小> 4KB的读/写请求(即使是MB大小).
我的理解是 linux及其文件系统会将文件“砍掉”成4KB的块大小,这些块大小将被传递给块设备驱动程序,这需要用来从设备中物理填充块(例如,用于写入) 我也知道内核页面大小在此限制中起作用,因为它设置为4KB. 对于实验,我想知道是否有办法实际增加这个块大小,这样我们将节省一些时间(而不是多次4KB写入,我们可以用更大的块大小来做). 有没有FS或任何现有的项目我可以看看这个? 谢谢. 解决方法
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,谷歌,亚马逊等地工作,这不是你想要作为内核的私人改变而维护的那种改变,而是你想要上游的东西,因为其他方面它将是一个巨大的,侵略性的变化,支持它作为一个树外补丁将是一个巨大的头痛. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |