在Linux上使用软件RAID和LVM时,哪些IO调度程序和预读设置受到尊重?

在Linux上使用软件RAID和LVM时,哪些IO调度程序和预读设置受到尊重?,第1张

概述在多层(物理驱动器 – > md – > dm – > lvm)的情况下,调度程序,预读设置和其他磁盘设置如何交互? 想象一下,你有几个磁盘(/ dev / sda – / dev / sdd)是用mdadm创建的软件RAID设备(/ dev / md0)的所有部分.每个设备(包括物理磁盘和/ dev / md0)都有自己的IO调度程序(changed like so)和预读(changed us 在多层(物理驱动器 – > 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
> blktrace – generate traces of the i/o traffic on block devices
> Relevant Linux kernel mailing list thread

解决方法 如果从md0读取,则使用md0的预读.如果您从sd读取了md0的组件,那么它将使用sda设置.设备映射器只是将I / O拆分为多个读取和写入以执行RAID,但这都是在发生预读的块缓存层之下.存储堆栈看起来像:

filesystem – bypasses cache when you open with O_DIRECT

block cache – readahead,write cache,scheduler

device-mapper – dm,lvm,software RAID,snapshot,etc.

sd – disk driver

SCSI – error handling,device routing

harDWare driver – scsi card,FC card,ethernet

请注意,当你这样做

dd if=/dev/sda of=foo

你正在阅读sda作为文件,所以你正在通过块缓存.要直接进入磁盘,请执行

dd if=/dev/sda of=foo iflag=direct

至于I / O电梯调度程序,那些只存在于磁盘驱动程序(sd)上. / sys / block / md或/ sys / block / dm下没有队列目录.您只需通过磁盘升降机排序一次.

总结

以上是内存溢出为你收集整理的在Linux上使用软件RAID和LVM时,哪些IO调度程序和预读设置受到尊重?全部内容,希望文章能够帮你解决在Linux上使用软件RAID和LVM时,哪些IO调度程序和预读设置受到尊重?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1046244.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存