标签: ionice

如何测试 ionice 的效果(针对使用 cfq 调度程序的设备)?

我正在尝试构建一个实验来测量 ionice 的效果。我想做的是(根据serverfault 的另一个答案)导致足够频繁的 I/O,以至于足够“好的”进程缺乏任何 I/O。

基于serverfault上的另一个答案,我认为我需要每 250 毫秒对一个常见的 cfq 调度设备进行至少一个实际 I/O 操作。我的想法是编写一个简单的程序,它确实有一个循环

  • 写入公共设备上的(可配置)文件,
  • 执行一个fsync()(强制执行确定的 I/O 操作),
  • 用于usleep()延迟可配置的时间量
  • 定期用于lseek()截断文件(这样我就不会填满文件系统)

然后我使用ionice -c3空闲调度类)针对公共设备上的一个文件启动程序的一个实例。我同时使用默认(尽力而为)调度类运行各种实例,在公共设备上指定不同的文件(改变延迟值)。

我的假设是,对于“尽力而为”过程中 250 毫秒或更多的延迟值,我会看到“空闲”过程取得的进展;对于小于 250 毫秒的值,我认为“空闲”过程几乎没有进展。

我的观察是这两个过程的性能没有差异。他们都取得了类似的进展。只是为了确定(以防挂钟指示“尽力而为”进程执行 I/O 的速度比每 250 毫秒快得多),我启动了“尽力而为”进程的多个同时实例,指定 no(零)延迟。尽管如此,我仍然没有看到两个调度类中的进程之间的性能差异。

可以肯定的是,我重新检查了调度程序类:

$ cat /sys/block/xvda/queue/scheduler
noop anticipatory deadline [cfq] 
Run Code Online (Sandbox Code Playgroud)

关于 cfq 调度程序的工作方式,我缺少什么?

如果重要的话,这是在 2.6.18 内核上。

linux storage ionice performance-tuning scheduler

5
推荐指数
1
解决办法
1570
查看次数

ionice idle 被忽略

我已经测试ionice命令一段时间了,idle在大多数情况下似乎忽略了(3) 模式。

我的测试是同时运行这两个命令:

  • <big folder>
  • 离子 -c 3 du <another big folder>

如果我检查两个进程,iotop我看不到每个进程的 io 利用率百分比有什么不同。

为了提供有关 CFQ 调度程序的更多信息,我使用的是 3.5.0 linux 内核。

我开始做这个测试是因为每次updatedb.mlocate在我的 Ubuntu 12.10 机器上执行每日 cron 作业时我都在试验系统延迟。

如果您检查该/etc/cron.daily/mlocate文件,您会发现该命令的执行方式如下:

/usr/bin/ionice -c3 /usr/bin/updatedb.mlocate

此外,有趣的是,每当我的系统出于某种原因开始使用交换内存时,updatedb.mlocateio 进程的调度速度比kswapd0进程快,然后我的系统就会卡住。

一些建议?

参考:

ubuntu ionice

5
推荐指数
2
解决办法
1837
查看次数

在集群上使用 ionice

背景:

我在工作中使用计算集群(4 个从节点和 1 个头节点),它使用 SGE 作业调度程序。最近我们一直在运行一些执行大量 IO 的作业,它一直在减慢 shell/vim 的使用(小 IO,但我们需要它 24/7 平稳运行)。我找到了 ionice,它似乎是一台计算机的完美解决方案,但我不确定它对集群是否有帮助......

题:

如果我通过带有 ionice 设置(-c2 -n0)的头节点运行一个进程(比如 vim),它是否仍然比其他计算机上的进程(从属设备上的高 IO -c2 -n4)上的进程优先于共享 HD ?

谢谢你的时间!

cluster nfs io ionice gridengine

2
推荐指数
1
解决办法
924
查看次数

ionice对NFS客户端有影响吗?

我需要在 NFS 共享上递归删除数百万个目录,为了避免任何性能问题,我运行了以下命令:

ionice -c 3 -t find /dir -type f -exec rm {};

这将删除所有文件和剩余的空目录,我可以使用 rm -rf 删除。

但我无法说 ionice 对上述命令是否有任何影响。

来自 man,ionice 3 级:

仅当没有其他程序在定义的宽限期内请求磁盘 io 时,以空闲 io 优先级运行的程序才会获得磁盘时间。空闲 io 进程对正常系统活动的影响应该为零。

从源代码中,我看到 ionice set ioprio_set

那么,ioprio_set 是什么?

ioprio_get() 和 ioprio_set() 系统调用分别获取和设置一个或多个线程的 I/O 调度类和优先级。

这是否意味着进程线程带有额外的属性供 I/O 调度程序使用它们来调度进程的 I/O?

这向我提出了以下问题:

  • I/O 调度程序通常知道磁盘上的 I/O 负载还是只是将 I/O 调度到磁盘?
  • 如果是这种情况,即 I/O 调度程序了解磁盘上的负载并据此做出决策,我认为 IO 调度类和优先级不会对远程磁盘的 IO 调度产生任何影响。因此 ionice 不会产生任何效果。
  • 如果不是,我认为 IO 调度类和优先级可能会对远程磁盘(也如 NFS)的 IO 调度产生影响。因此,如果多个用户/进程使用相同的 NFS 磁盘,ionice 将会工作,其中 I/O 调度程序根据其他用户/进程是否使用相同的 NFS 磁盘来为给定线程调度 IO。

如果我完全错了,请纠正我。 …

nfs io ionice scheduling scheduler

2
推荐指数
1
解决办法
1620
查看次数