如何防止磁盘 I/O 接管我的 CPU?

如何防止磁盘 I/O 接管我的 CPU?

我在四核 i7 处理器上运行 Debian Jessie,由于超线程,这导致显示 8 个核心。在磁盘负载较重的情况下,所有八个核心的 io-wait 都达到最大,如 htop 所示。这会导致界面非常缓慢(我使用 Gnome),系统有时会完全冻结,直到 I/O 完成。

我应该如何诊断这个问题?我可以调整哪些设置来防止这种情况发生?

我使用单个硬盘,SMART 检查显示其运行状况良好。

编辑:为了澄清一些事情,我对加速 I/O 不感兴趣。我想让它在我做其他事情的时候在后台运行。目前,升级到 SSD 对我来说不是一个选择。

答案1

有多种方法可以调整 I/O 性能。

  • 文件系统选择 - 根据典型数据的情况选择文件系统 - 有些文件系统可以更好地处理大量较小的文件,有些可以很好地处理大文件,有些在一次访问(尤其是创建)多个文件时不能很好地扩展。碎片整理可能对旋转盘驱动器有帮助(对基于闪存的设备没有那么多帮助,但差异应该仍然存在)。

  • 文件系统调整——现代文件系统具有大量选项(创建时和安装时),这些选项可以向一个或另一个方向推动文件系统的性能。最好的例子就是如何写日记。

  • DMA 设置 - 虽然这已经自动完成很多年了,但检查它总没有坏处(hdparm -i这是你的朋友)。

具体针对 Linux(但对于其他内核也可能类似):

  • THP - 透明大页用于导致性能下降。 IIRC 该问题不久前已得到解决(至少在某种程度上)。如果复制到 USB 或从 USB 复制是问题,您可能应该朝这个方向看。禁用透明大页可能成为如何禁用 THP 的一个很好的起点。

  • 内核 I/O 调度程序对性能影响很大。有些人主张使用 Deadline 调度程序而不是 CFQ,CFQ 更复杂,有时据称往往会想得太多。

除此之外,在某些情况下,会发生大量 I/O。当您开始将文件从 USB 存储卡读卡器复制到硬盘驱动器、从硬盘驱动器复制到 USB 闪存盘时,浏览网页(某些浏览器可能会fsync()很重,以确保在崩溃时可以恢复内容)、下载电子邮件、运行P2P客户端和播放电影同时进行,物理磁盘和文件系统就会成为瓶颈。在某些情况下,精心构建(使用适当的条带大小和组成驱动器数量读取)RAID0 可能有助于缓解问题。

相关内容