V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
edis0n0
V2EX  ›  Linux

为什么硬盘卡 IO 会导致 CPU usage (wa)升高?这两者有什么关系?

  •  
  •   edis0n0 · 2023-01-15 12:59:58 +08:00 · 2480 次点击
    这是一个创建于 677 天前的主题,其中的信息可能已经有所发展或是发生改变。
    4 条回复    2023-01-15 22:58:53 +08:00
    cxtrinityy
        1
    cxtrinityy  
       2023-01-15 13:11:38 +08:00 via Android   ❤️ 2
    CPU iowait 时间增加,等 IO
    rrfeng
        2
    rrfeng  
       2023-01-15 15:56:20 +08:00 via Android
    wa=iowait 我不知道还需要怎么解释…
    Cyshall
        3
    Cyshall  
       2023-01-15 20:48:53 +08:00
    这个时间取决于 cpu 有没有别的事可做,如果你在 io 的时候,cpu 空闲,那么 iowait 就会很高,如果在 io 的时候,有其他 cpu 密集型的应用在吃 cpu ( cpu 百分百),那么 iowait 基本就不会增长
    h0099
        4
    h0099  
       2023-01-15 22:58:53 +08:00
    wa=waiting for i/o ,又称 iowait
    wa%的统计口径是一切 hardware interrupt 造成的 cputime ,他本身被归类到 idle%中

    https://serverfault.com/questions/12679/can-anyone-explain-precisely-what-iowait-is 进一步指出
    > IOWait (通常标注%wa 在 top )是 idle 的一个子类(%idle 通常表示为除了定义的子类之外的所有 idle ),意思是 CPU 没有做任何事情。因此,只要 CPU 可以处理另一个进程,它就会处理。此外,idle 、user 、system 、iowait 等都是针对 CPU 的度量。换句话说,你可以把 iowait 看作是等待 io 导致的空闲。
    > 准确地说,iowait 是接收和处理硬件中断所花费的时间占处理器滴答的百分比。软件中断通常单独标记为%si.
    > 但是没有 iowait 并不一定意味着您的应用程序在 IO 上没有瓶颈。考虑在一个系统上运行的两个应用程序。如果程序 1 是严重的 io 瓶颈,而程序 2 是重度 CPU 用户,则%user + %systemCPU 可能仍约为 ~100%,相应地,iowait 将显示 0 。但这只是因为程序 2 是密集型的,相对而言似乎什么也没说程序 1 ,因为所有这些都是从 CPU 的角度来看的。

    > 假设有两个程序在一个 CPU 上运行。一个是从磁盘读取的“dd”程序。另一个是不执行 I/O 但将 100% 的时间用于计算工作的程序。现在假设 I/O 子系统有问题,并且物理 I/O 需要一秒钟才能完成。每当“dd”程序在等待其 I/O 完成时处于休眠状态,另一个程序就可以在该 CPU 上运行。当时钟中断发生时,总会有程序运行在用户态或系统态。因此,%idle 和 %iowait 的值将为 0 。即使 iowait 现在为 0 ,这并不意味着没有 I/O 问题,因为如果物理 I/O 需要一秒钟才能完成,则显然存在问题。

    https://serverfault.com/questions/684339/why-cpu-spent-time-on-iowa
    > CPU 空闲状态分为两种不同的“子”状态:iowait 和 idle 。
    > 如果 CPU 空闲,则内核然后确定是否有至少一个当前正在进行的 I/O 到本地磁盘或从该 CPU 启动的远程安装磁盘 (NFS)。如果存在,则 CPU 处于状态 iowait 。如果没有从该 CPU 启动的正在进行的 I/O ,则 CPU 处于 idle 状态。
    > 因此,iowait 是 CPU 空闲时间的百分比,并且至少有一个 I/O 正在从该 CPU 启动。
    > iowait 计数器表明系统可以处理更多的计算工作。仅仅因为 CPU 处于 iowait 状态并不意味着它不能在该 CPU 上运行其他线程或进程。
    > 所以,iowait 这只是一种空闲时间。

    (假设是 Linux ,虽然一般概念可以应用于其他操作系统。)

    https://serverfault.com/questions/972343/what-is-the-relation-between-io-wait-utilisation-and-load-average
    > 工作负载不能仅通过平均负载和 %iowait 来描述。这些指标仅汇总特定状态下的任务。分别计算可运行和不可中断、空闲时间和未完成的 I/O 。
    > 您可能会遇到这样一种情况,即有任务处于可运行状态,有一些空闲 CPU 周期,但 I/O 上没有空闲。想象一个有点繁忙的 Web 服务器,有 200 个工作进程在 2 个 CPU 上运行。平均负载约为 1 ,iowait 接近 0 。任务很多,每个任务的工作量都不是很多,CPU 闲置但在磁盘上等待的时间更少。

    如果这个假设的 Web 服务器 VM 被实时迁移,它的内存延迟和可用的 CPU 时间可能会受到短暂的影响。一个症状是更高的平均负载,但这不会驱动 iowait 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2904 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 02:59 · PVG 10:59 · LAX 18:59 · JFK 21:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.