2

我有一个绝对路径(例如“/mnt/target/benchmarkTest/Run1”),我想获取可用 IO 调度程序的列表,并为该路径物理所在的设备设置一个 IO 调度程序。

编程语言无关紧要,可以说它是 c 或 bash 脚本。

我知道您可以使用/sys/block/sda/queue/scheduler文件系统上的sysfs文件设置 IO 调度程序。

我知道我可以使用 pyhsical devices 块设备

readlink -f `df -T -P /mnt/target/benchmarkTest/Run1 | awk 'NR>1 {printf $1}'`

这可能至少返回(列表不完整)

  1. 带有分区号的典型块设备,例如。/dev/sda3
  2. 如果数据直接存储在设备上而没有任何分区(例如 USB 记忆棒),则没有 pration 编号的块设备,例如/dev/sdd
  3. 如果使用 LVM(或类似),则为设备映射器块设备,例如/dev/dm-2

对于这些返回类型中的每一个,我需要检查 IO 调度程序的不同位置:

  1. 以某种方式获取实际包含分区的设备。也许通过丢弃所有数字并将其作为设备。
  2. 我可以将设备直接带入sysfs文件
  3. 现在变得很棘手:我需要检查 lvm 卷所在的设备(可能很多),然后为每个设备设置调度程序。请记住:LVM 没有自己的 IO 调度程序。

这个过程可以以某种方式简化吗?是否有这个或另一个简化过程的入口点的内核系统调用?当前的方法似乎很容易出错。

谢谢!

4

0 回答 0