评估 Linux 上的 CPU I/O 等待

Tot*_*oto 6 linux optimization io

做一个top检查io等待,我得到这些数字:

Cpu(s):  6.7%us,  1.4%sy,  1.2%ni, 85.5%id,  5.0%wa,  0.0%hi,  0.3%si,  0.0%st
Run Code Online (Sandbox Code Playgroud)

看看这些数字 (%us ~= %wa),它们是否意味着:

  1. 等待的 CPU 进程几乎与工作的 CPU 进程一样多?(=> 坏)
  2. 工作流程正在等待执行计划的 5.0%?(=> 在这种情况下可以)
  3. 别的东西

Mat*_*Ife 19

评估这些数字时需要小心。

  1. IOWait 是相关的,但不一定与磁盘活动线性相关。
  2. 您拥有的 CPU 数量会影响您的百分比。
  3. 高 IOWait(取决于您的应用程序)并不一定表示您有问题。或者,一个小的 IOWait 可能会转化为您的问题。它基本上归结为正在等待什么任务。

在这种情况下,IOWait 是对给定时间段内 CPU(或所有 CPU)空闲时间的度量,因为所有可运行的任务都在等待 IO 操作完成。

在您的示例中,如果您有 20 个 CPU,其中一项任务真正敲打磁盘,则此任务(实际上)将 100% 的时间花费在 IOWait 上,随后运行此任务的 CPU 花费几乎 100% 的时间在等等。但是,如果其他 19 个 CPU 有效空闲且未使用此磁盘,则它们会报告 0% IOWait。这导致平均 IOWait 百分比为 5%,而实际上,如果您查看磁盘利用率,这可能会报告为 100%。如果在磁盘上等待的应用程序对您很重要——这 5% 有点误导,因为瓶颈中的任务可能会遇到比 5% 慢得多的性能问题。

等待的 CPU 进程几乎与工作的 CPU 进程一样多?(=> 坏)

可能,请记住大部分 CPU 运行任务,而任务是请求 IO 的内容。如果两个单独的任务忙于在两个单独的 CPU 上查询同一个磁盘,这将使两个 CPU 处于 100% IOWait(在 20 个 CPU 示例中,总体平均 IOWait 为 10%)。

基本上,如果您有很多任务需要 IO,尤其是来自同一个磁盘,而且该磁盘的利用率为 100%(请参阅 参考资料iostat -mtx),那么这很糟糕。

工作流程正在等待执行计划的 5.0%?(=> 在这种情况下可以)

不会。工作进程几乎肯定是全职等待 IO。这只是一般的报告情况(“其他 CPU 不忙”)掩盖了 CPU 有许多任务要运行的百分比或事实,其中许多任务不需要执行 IO。

作为一般规则,在多 CPU 系统上,IOWait 百分比(等于 CPU 数量除以 100)可能需要调查。

别的东西

看上面。但请注意,执行大量写入的应用程序会受到限制(停止使用回写,开始直接写入磁盘)。这会导致这些任务产生高 IOWait,而同一 CPU 上的其他任务写入同一磁盘则不会。所以例外确实存在。

另请注意,如果您有 1 个 CPU 专用于运行 2 个任务,一个是重度 IO 读/写器,另一个是重度 CPU 用户,那么在这种情况下,CPU 将报告 50% IOWait,如果您有 10 个这样的任务将是 10% IOWait(和一个可怕的负载),因此报告的数字远低于实际可能存在的问题。

我认为您确实需要查看iostat -mtx一些磁盘利用率指标,并pidstat -d获取一些每个进程的指标,然后考虑以这种方式访问​​这些磁盘的应用程序是否可能导致问题,或其他潜在的应用程序击中这些磁盘可能会导致问题。

CPU 指标确实充当了潜在问题的指标,它们是通用的,因此了解它们可能过于笼统的地方是一件好事。