首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当在Linux上使用软件RAID和LVM时,哪些IO调度程序和readahead设置会得到遵守?

当在Linux上使用软件RAID和LVM时,哪些IO调度程序和readahead设置会得到遵守?
EN

Server Fault用户
提问于 2012-05-03 20:34:05
回答 1查看 7K关注 0票数 29

在多层(物理驱动器-> -> dm dm -> lvm)的情况下,调度器、readahead设置和其他磁盘设置是如何交互的?

假设有几个磁盘(/dev/sda - /dev/sdd)都是用mdadm创建的软件RAID设备(/dev/md0)的一部分。每个设备(包括物理磁盘和/dev/md0)都有自己的IO调度程序(变得像这样)和readahead (使用区块开发更改)设置。当你加入像dm (加密)和LVM这样的东西时,你会添加更多的层和它们自己的设置。

例如,如果物理设备先于128个块读取,而RAID的readahead为64个块,那么当我从/dev/md0读取数据时,就会出现这种情况吗?md驱动程序是否尝试读取物理设备驱动程序随后转换为128个块的64块?或者RAID readahead“通过”到底层设备,从而导致64块读取?

同样的问题也适用于调度程序吗?我是否需要担心IO调度器的多个层及其如何交互,或者/dev/md0是否有效地覆盖底层调度程序?

在回答这个问题时,我挖掘了一些有关调度程序和工具的有趣数据,这些数据可能有助于解决这个问题:

  • 来自Google的Linux磁盘调度器基准
  • 在块设备上生成I/O通信量的跟踪.
  • 相关的Linux内核邮件列表线程
EN

回答 1

Server Fault用户

发布于 2012-05-12 16:12:46

如果从md0读取,则使用md0的readahead。如果您执行了从sda的读取,这是md0的一个组件,那么它将使用sda设置。设备映射器只是将I/O拆分成多个读和写来执行RAID,但这都在发生readahead的块缓存层下面。存储堆栈看起来如下:

文件系统-当您使用O_DIRECT块缓存打开时绕过缓存- readahead、写缓存、调度器设备-mapper- dm、lvm、软件RAID、快照等sd -磁盘驱动程序SCSI -错误处理、设备路由硬件驱动程序- scsi卡、FC卡、以太网。

注意当你这么做的时候

代码语言:javascript
复制
dd if=/dev/sda of=foo

您正在将sda作为一个文件读取,因此您正在通过块缓存。要直接进入磁盘,请执行以下操作

代码语言:javascript
复制
dd if=/dev/sda of=foo iflag=direct

至于I/O电梯调度程序,它们只存在于磁盘驱动程序(sd)上。/sys/block/md或/sys/block/dm下没有队列目录。你只通过磁盘电梯排序一次。

票数 8
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/385841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档