在Linux上使用软件RAID和LVM时,哪些IO调度程序和预读设置受到尊
在多层(物理驱动器 – > md – > dm – > lvm)的情况下,调度程序,预读设置和其他磁盘设置如何交互?
想象一下,你有几个磁盘(/ dev / sda – / dev / sdd)是用mdadm创建的软件RAID设备(/ dev / md0)的所有部分.每个设备(包括物理磁盘和/ dev / md0)都有自己的IO调度程序(changed like so)和预读(changed using blockdev)设置.当您投入dm(加密)和LVM之类的东西时,您可以使用自己的设置添加更多图层. 例如,如果物理设备预先读取了128个块,并且RAID具有64个块的预读,那么当我从/ dev / md0读取时,这是否值得尊敬? md驱动程序是否尝试64块读取,然后物理设备驱动程序转换为128块读取?或者RAID预读“传递”到底层设备,导致64块读取? 调度员也有同样的问题吗?我是否必须担心多层IO调度程序以及它们如何交互,或者/ dev / md0是否有效地覆盖了底层调度程序? 在我试图回答这个问题的过程中,我挖掘了一些关于调度程序和工具的有趣数据,这可能有助于解决这个问题: > Linux Disk Scheduler Benchmarking from Google 解决方法
如果从md0读取,则使用md0的预读.如果您从sd读取了md0的组件,那么它将使用sda设置.设备映射器只是将I / O拆分为多个读取和写入以执行RAID,但这都是在发生预读的块缓存层之下.存储堆栈看起来像:
请注意,当你这样做 dd if=/dev/sda of=foo 你正在阅读sda作为文件,所以你正在通过块缓存.要直接进入磁盘,请执行 dd if=/dev/sda of=foo iflag=direct 至于I / O电梯调度程序,那些只存在于磁盘驱动程序(sd)上. / sys / block / md或/ sys / block / dm下没有队列目录.您只需通过磁盘升降机排序一次. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |