zoukankan      html  css  js  c++  java
  • 深入理解“CPU 使用率”

    回顾

    CPU 使用率是单位时间内 CPU 使用情况的统计,以百分比的方式展示

    案例:

    最常用什么指标来描述系统的 CPU 性能?

    回答

    CPU 使用率,而不是平均负载,CPU 上下文切换

    CPU 使用率

    前言

    前面说过,Linux 作为一个多任务操作系统,将每个 CPU 的时间划分为很短的时间片,在通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉

    了解节拍率

    • 为了维护 CPU 时间,Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使用全局变量 Jiffies 记录了开机以来的节拍数
    • 每发生一次时间中断,Jiffies 的值 就加 1。
    • 节拍率 HZ 是内核的可配选项,可以设置为 100、250、1000 等
    • 不同的系统可能设置不同数值,你可以通过查询 /boot/config 内核选项来查看它的配置值
    • 比如在我的系统中, 节拍率设置成了 1000,也就是每秒钟触发 1000 次时间中断。
    grep 'CONFIG_HZ=' /boot/config-$(uname -r)

    了解用户空间节拍率

    • 因为节拍率 HZ 是内核选项,所以用户空间程序并不能直接访问
    • 为了方便用户空间程序,内核还提供了一个用户空间节拍率 USER_HZ
    • 它总是固定为 100,也就是 1/100 秒
    • 这样,用户空间程序并不需要关心内核中 HZ 被设置成了多少,因为它看到的总是固定值 USER_HZ

    系统 CPU 数据来源(了解)

    • Linux 通过 /proc 虚拟文件系统,向用户空间提供了系统内部状态的信息
    • 而 /proc/stat 提供的就是系统的 CPU 和任务统计信息

    只查看 CPU 的数据

    cat /proc/stat | grep ^cpu

    结果分析

    从左往右一共 11 列哦

    1. CPU 编号:第一行是 CPU 的累加
    2. user(us):用户态 CPU 的时间,不包括下面的 nice 时间,但包括了 guest 时间
    3. nice(ni):低优先级用户态 CPU 的时间,就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间;注意 nice 可取值范围是 -20 到 19,数值越大,优先级反而越低
    4. system(sys):内核态 CPU 的时间
    5. idle(id):空闲时间,它不包括等待 I/O 的时间(iowait)
    6. iowait(wa):等待 I/O 的 CPU 时间
    7. irq(hi):处理硬中断的 CPU 时间
    8. softirq(si):处理软中断的 CPU 时间
    9. steal(st):当系统运行在虚拟机中的时间,被其他虚拟机占用的 CPU 时间
    10. guest:通过虚拟化运行其他操作系统的时间,就是运行虚拟机的 CPU 时间
    11. guest_nice(gnice):以低优先级运行虚拟机的时间

    CPU 使用率计算公式(了解)

    除了空闲时间外的其他时间占总 CPU 时间的百分比

    案例:

     /proc/stat 的数据,算的是什么时间段的 CPU 使用率?

    回答

    这是开机以来的节拍数累加值,所以直接算出来的,是开机以来的平均 CPU 使用率,一般没啥参考价值

    性能工具所看到的 CPU 使用率的实际计算方法

    为了计算 CPU 使用率,性能工具一般都会取间隔一段时间(比如 3 秒)的两次值,作差后,再计算出这段时间内的平均 CPU 使用率

    总结下

    • 各种各样的性能分析工具已经帮我们计算好了 CPU 平均使用率,不需要自己单独计算
    • 不过要注意的是,性能分析工具给出的都是间隔一段时间的平均 CPU 使用率,所以要注意间隔时间的设置,
  • 相关阅读:
    17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication
    17.1.2 Replication Formats
    Setting the Master Configuration on the Slave
    17.1.1.9 Introducing Additional Slaves to an Existing Replication Environment
    17.1.1.8 Setting Up Replication with Existing Data
    17.1.1.7 Setting Up Replication with New Master and Slaves
    17.1.1.6 Creating a Data Snapshot Using Raw Data Files
    列出display的值,并说明它们的作用
    CSS设置DIV居中
    CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?
  • 原文地址:https://www.cnblogs.com/uestc2007/p/14689229.html
Copyright © 2011-2022 走看看