我运行一台具有 md-raid(软件)级别 1(2 个 HDD 镜像)的服务器,并且在该服务器上运行了几种不同的应用程序。
当文件密集型作业(例如提取大型档案)运行时,某些用户也在使用实时应用程序(例如游戏服务器),就会出现问题。文件密集型作业将填满 IO 队列,迫使 md-raid 阻止进一步的 IO,直到两个驱动器同步,这将使实时应用程序陷入困境并迫使它们暂停并等待,从而给用户带来极大的烦恼。
IO 密集型作业以最低的进程和 IO 优先级()运行,nice -n +19 ionice -c 3 ...
采用 CFQ 调度,但其他应用程序仍然处于饥饿状态。
有没有办法让 md-raid 在保持磁盘同步方面更加宽松?
还有其他可能的解决方案来避免重要应用程序陷入困境吗?
答案1
该问题可能是由页面缓存刷新而不是 I/O 队列填充引起的。
要检查它,请尝试解压一个大档案,然后在另一个终端中执行cat /proc/meminfo
。您将在内存下看到一些大值Dirty
;当刷新该“脏”内存时,会发生大 I/O,并且您的实时应用程序会受到影响。
它的行为可以配置,但这并不简单,因为默认情况下 Linux I/O 堆栈更看重吞吐量而不是延迟。无论如何,作为一个好的开始,请尝试使用deadline
调度程序并确保您的磁盘上启用了 NCQ。