我们正在使用一个相当繁忙的网络服务器。我们想使用 rsync 进行一些数据移动,这显然会影响磁盘,因此我们曾经ionice将 rsync 进程放在空闲类中。系统 (SSD+HDD) 上两个磁盘的队列都设置为使用 CFQ 调度程序。结果……磁盘被彻底砸烂,网站性能惨不忍睹。
我已经做了一些挖掘,看看是否有任何调整可能对此有所帮助。手册页ionice说:
Idle: A program running with idle I/O priority will only get disk time
when no other program has asked for disk I/O for a defined grace period.
The impact of an idle I/O process on normal system activity should be zero.
Run Code Online (Sandbox Code Playgroud)
在谷歌的帮助下,我在任何可以找到的地方都没有清楚地解释这个“定义的宽限期”。一个帖子表明它的价值,fifo_expire_async但我找不到任何真正的支持。
然而,在我们的系统上,fifo_expire_async和fifo_expire_sync都设置得足够长(250 毫秒、125 毫秒,这是默认值),空闲类实际上根本不应该获得磁盘带宽。即使认为宽限期是由设置的人fifo_expire_async是完全错误的,在“空闲 I/O 进程对正常系统活动的影响应该为零”这句话中也没有太多的回旋余地。
显然这不是我们机器上发生的事情,所以我想知道 CFQ+idle 是否只是坏了。
有没有人设法让它工作?非常感谢提示!
更新: 我今天做了更多的测试。我编写了一个小型 Python 应用程序来读取整个磁盘中的随机扇区,中间有短暂的睡眠。我在没有 ionice 的情况下运行了这个副本,并将其设置为每秒执行大约 30 …