系统相关
首页 > 系统相关> > linux – 写缓存如何与跨越不同速度的磁盘的文件系统一起工作?

linux – 写缓存如何与跨越不同速度的磁盘的文件系统一起工作?

作者:互联网

在具有多个磁盘和跨越慢速(HDD)和快速(SSD)驱动器的软件RAID的现代Linux系统上,如何缓存对文件系统的写入?

对于md-raid RAID1,阵列可以配置磁盘为–write-mostly和–write-behind,这表示从较快的磁盘执行读取,而写入较慢磁盘的磁盘可能滞后.但是如何在内核级别缓存?内核是否在md-raid层之前或之后缓存磁盘写入?在write()调用结束时,是否保证将数据写入其中一个非写后面的磁盘?

对于btrfs RAID1,同样的情况怎么样?没有 – 写入功能,在设备级别或文件系统级别计算脏页面是什么? write()返回什么时候?

vm.dirty_ * ratio可调参数如何影响这些设置?

解决方法:

-write-mostly, – write-behind由内部的md驱动程序处理. md保留元数据,就像写入意图位图(后写功能必不可少)一样,基本上记录了哪些数据已写入,哪些数据仍然缺失.如果存在功率损耗事件,则当数据尚未到达写入主要设备时,这是必要的.在这种情况下,受影响的数据区域将重新同步(在您的情况下从SSD读取,写入HDD).

But how is that cached at kernel level?

对于后写案例,md驱动程序基本上在内部复制写请求.主写入请求进入主驱动器并告诉上层“好我已经完成了”;复制的写入请求然后留在RAID的大部分写入后面,可能需要更长的时间才能完成,希望没有人注意到.

然后,raid层需要执行大量步骤,以确保在队列中仍有待处理的后写请求时,不会从写入主设备读取任何数据.为什么要从写主设备读取数据?那么,SSD可能已经失败,所以它就在那里.它很复杂,而后写引入了一些极端情况.

这可能也是为什么它只支持RAID-1级别,而不是其他任何级别.虽然从理论上说将SSD基本上作为RAID-0和两个奇偶校验硬盘处于后写模式可能是有意义的,但是不支持这样的后写RAID-6.它只是RAID-1,甚至很少使用.

其他缓存设置不受此影响,基本上整体缓存机制至少不关心md驱动程序如何在内部实现内容.缓存做了它的事情,而md做了它的事情.因此,对于md之上的文件系统而言,文件系统缓存的工作方式与裸驱动器上的文件系统相同. (现实比这更复杂,但你可以这样想.)

标签:linux,filesystems,mdadm,btrfs,software-raid
来源: https://codeday.me/bug/20190809/1630833.html