欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > CPU性能指标详解

CPU性能指标详解

日期:2023-09-29 11:58

1.服务器CPU简介

CPU概念:

CPU(CentralProcessingUnit)又称中央处理器。它的主要功能是进行计算和逻辑运算。内部结构大致可分为控制单元、算术逻辑单元和存储单元等几个部分。根据处理信息的字长可分为:8位微处理器、16位微处理器、32位微处理器、64位微处理器等。

  目前服务器CPU仍然按照CPU指令系统来区分。通常分为CISC CPU 和RISC CPU。后来出现了64位的VLIM(超长指令字)。 )CPU的指令集。

  • CPU架构:
    • 复杂指令集CPU:X86架构:如Intel、AMD
    • 精简指令集CPU:ARM架构如飞腾、PowerPC架构如IBM
  • CPU频率:
    • CPU核心的时钟频率,是指CPU内部晶振的频率,代表了CPU中数字脉冲信号的振荡速度。常见单位是MHz,它反映了CPU的基本工作情况。节拍极大地影响CPU的计算速度。 CPU的很多性能指标都与时钟频率有关,所以一般来说,主频越高,CPU每秒可以处理的数据就越多。
  • CPU核心线程:
?核心数)
  • 对于CPU来说,线程数总是大于或等于核心数(物理核心)。一个核心(物理核心)至少对应一个线程,但是通过超线程技术,一个核心可以对应两个线程,也就是说它可以同时运行两个线程。这也解释了为什么有六个核心(物理核心)和十二个线程(CPU核心数)。
    • CPU 缓存:
      • 用于减少处理器访问内存的平均时间的组件。在金字塔存储系统中,从上到下位于第二级,仅次于CPU寄存器。它的容量比内存小很多,但速度却可以接近处理器的频率。

    ?物理CPU核心数

  • CPU插槽:#物理CPU数量
  • CPU MHz:#cpu主频,即CPU核心的时钟频率和计算速度
  • cpu核心计算:

    CPU 核心总数 = 物理 CPU 数量 * 每个物理 CPU 核心数量 =8*1=8

    逻辑CPU总数=物理CPU数量*每个物理CPU的核心数量*超线程数量*复用率=8*1*1=8

    2。 CPU性能指标分类

    cpu性能指标如下:

    3。 CPU使用率详解

    • 频率:
    单位时间内振动或振荡完成的次数或周期
    常用单位是赫兹。 1 Hz 等于 1 次/秒或 1 个周期/秒。频率单位为:
    Hz(赫兹)、kHz(千赫兹)、MHz(兆赫兹)、GHz(千兆赫兹)。
    其中1GHz=1000MHz、1MHz=1000kHz、1kHz=1000Hz[root@localhost hello]# cat /proc/cpuinfo //虚拟机pc桌面频率
    处理器:0
    vendor_id:正版英特尔
    CPU系列:6
    型号:94型号名称:Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
    • LINUX系统时钟频率:
    LINUX系统时钟频率由恒定的HZ决定。例如:通常f=3.40GHz,则其精度为0.29ns(纳秒)。
    1GHz周期为1ns。
    也就是说每0.29ns就有一次中断。所以一般来说Linux的精度在1ns以内。 
    • 时钟周期:
    时钟周期也称为振荡周期,定义为时钟频率的倒数。
    时钟周期是计算机中最基本、最小的时间单位。
    在一个时钟周期内,CPU只完成一项最基本的动作。时钟周期是一段时间。
    1GHz周期为1ns。
    期间单位:
    s(秒)、ms(毫秒)、μs(微秒)、ns(纳秒)、
    其中:1s=1000ms、1ms=1000μs、1μs=1000ns。 
    • 指令周期:
    指令周期:获取和执行指令的时间。
    计算机执行指令的过程可分为以下三个步骤:
    1.Fetch(取指)就是从PC寄存器中找到对应的指令地址
    2、Decode(解码)将指令寄存器中的指令解析为要执行的操作。
    3. Execute(执行指令)执行算术和逻辑运算、数据传输或直接地址跳转。对于一个指令周期,我们取出一条指令然后执行它,这至少需要两个CPU周期。
    取指令至少需要1个CPU周期,执行也至少需要1个CPU周期,复杂的指令需要更多的CPU周期。
    一个CPU周期是几个时钟周期的总和。 

    • CPU 时间(单调时间映射 - 单调时间转换):
    ?记录。每次系统启动时,jiffies都初始化为0。每次定时器中断到来时,jiffies就加1,这意味着它代表了自系统启动以来已经过去的tick数。
  • jiffies 必须单调递增。
  • jiffies 是内核中的一个全局变量,用于记录系统启动以来产生的时钟中断的数量。在Linux中,中断可以粗略地理解为操作系统进程调度的最小时间片。不同的Linux内核可能有不同的值,通常在1ms到10ms之间
  • 全局变量jiffies用于记录系统启动以来产生的节拍总数。启动时,内核将此变量初始化为 0,此后每次使用时钟中断处理程序时,该变量的值都会递增。一秒内时钟中断的次数等于Hz,所以一秒内jiffies增加的值也是Hz。系统运行时间以秒为单位,等于 jiffies/Hz。
    • CPU 状态类型:
      • cpu 时间 => cpu 用户时间/系统时间/美好时间/空闲时间/irq....

    (top命令默认每3秒更新一次输出结果)

    参数

    分析(单位:jiffies 记录系统启动以来产生的节拍数,1 个节拍可以看做进程调度的最小时间片,jiffies 必须单调递增)

    用户 (1204317)

    从系统启动到当前时刻累计的用户态运行时间,不包括nice值为负的进程。用户CPU使用率包括用户态CPU使用率(user)和低优先级用户态CPU使用率(nice),代表CPU运行在用户态的时间百分比。高用户 CPU 使用率通常表明应用程序繁忙。

    好(189103)

    从系统启动到当前时刻nice值为负的进程占用的CPU时间

    系统 (1171340)

    从系统启动到当前时刻累计的核心状态运行时间。系统CPU使用率表示CPU在内核模式下运行的时间百分比(不包括中断)。系统 CPU 使用率高表明内核正忙。

    空闲 (60581145)

    从系统启动到当前时间,除 IO 等待时间外的其他等待时间

    iowait (90421)

    从系统启动到当前时刻累计的 IO 等待时间。等待 I/O 的 CPU 使用率通常也称为 iowait,表示等待 I/O 所花费的时间百分比。 iowait较高通常表明系统与硬件设备之间的I/O交互时间较长。

    中断 (132530)

    硬中断时间是从系统启动到当前时刻累计的。表示内核调用硬中断处理程序

    软中断(80465)

    软中断时间是从系统启动到当前时刻累计的。表示内核调用软中断处理程序

    偷窃被盗(0)

    在虚拟机环境中运行其他操作系统所花费的时间。 Steal CPU 使用率(steal)表示其他虚拟机占用 CPU 时间的百分比

    嘉宾(0)

    在访客模式下运行所花费的时间。来宾 CPU 使用率(来宾)表示运行来宾虚拟机的 CPU 时间的百分比

    guest_nice (0)

    以负nice值运行在Guest模式下的进程占用的CPU时间

    好值说明:

    每个进程都有一个PRI和NI值,可以通过ps -ef -l命令或者top命令查看。 PRI比较好理解,就是进程的优先级,或者通俗点讲就是CPU执行程序的顺序。值越小,进程的优先级越高。 NI呢?这就是我们所说的nice值,它表示进程可以执行的优先级的修改值。正如前面提到的,PRI值越小,执行的速度就越快。添加nice值后,PRI将变为:PRI(new)=PRI(old)+nice。这样,当nice值为负数时,程序的优先级值会变小,即优先级会变高,执行速度也会越快

    • 获取当前时刻各个CPU状态的累计值:

    对应的累计时间值会记录在/proc伪文件系统中,这些总累计值会存储在/proc/stat文件中。

    cat /proc/stat 可以观察这些值

    每个进程的累计值存储在自己的目录文件中,/proc/进程号/stat

    • CPU占用率计算原理:
    在讲CPU占用率之前,我们先看一下下面的例子:
    一个服务器
    12:00 开始 12:30 结束
    CPU在用户模式下的总使用时间为8分钟
    CPU在内核模式下的总使用时间为1.5分钟
    CPU处于IO等待状态的总时间为0.5分钟
    CPU总共处于空闲状态20分钟。
    其他几个状态下CPU使用时间为0分钟 (user(8mins) + sys(1.5mins) + iowait(0.5mins) + 0 + 0 + 0 + 0) / (30mins)
    = 1 - ((空闲(20分钟) / (30分钟))
    = 30% CPU 使用率 = (所有非空闲状态下的 CPU 时间总和) / (所有状态下的 CPU 时间总和) = 1 - ((空闲状态下的 CPU 时间总和) / (所有状态下的 CPU 时间总和))
    (问题:按照上述方法计算只能算出30分钟内CPU总平均时间,精度太低,没有参考价值)

    以上是从开机时间开始计算。我们之前提到过,jiffies记录了系统启动以来产生的节拍数,而jiffies单调递增,那么上面的CPU占用率的计算公式就是即将发生变化。 CPU使用率表示一定时间内CPU时间增量的变化率:

    ? elements;
  • 计算总cpu时间:
  • ?所有时间片,即totalCpuTime =total_t2 -total_t1;
      • 计算空闲时间空闲:
        • idle 对应第四列的数据,就用第二个idle - 第一个idle
        • idle =idle_t2 –idle_t1
      • 计算CPU使用率:
        • CPU 使用率 = 100 * (1-(idle_t2 –idle_t1) / (total_t2 –total_t1))

    • CPU时间累计增加观察
      • 我们每隔30min观察CPU核0的CPU空闲状态时间值,通过指标获取可以看到整体值是单调递增的
      • node_cpu_seconds_total{ instance="192.168.1.190 :9100”,作业=“node_exporter”,nodename=“V6-node-exporter”}
      • 观察CPU核0的用户状态时间值,也在增加

    • 使用promethues获取各种指标并计算CPU占用率
      • 获取 CPU 时间:
        • 获取每个核心的总 CPU 时间:
          • node_cpu_seconds_total{实例=“192.168.1.190:9100”,作业=“node_exporter”,nodename=“V6-node-exporter”}
        • 获取每个核心CPU的1分钟时间增量:
          • 增加(node_cpu_seconds_total{实例=“192.168.1.190:9100”,作业=“node_exporter”,nodename=“V6-node-ex porter”} [1m])
        • 获取1分钟内各核CPU时间增量总和:
          • sum(增加(node_cpu_seconds_total{实例=“192.168.1.190:9100”,作业=“node_exporter”,nodename=“V6-node-exporter”) “}[1m]))
      • 获取CPU空闲状态时间:
        • 获取每个核心cpu空闲状态的累计空闲时间:
          • node_cpu_seconds_total{ mode="idle",instance="192.168.1.190:9100", job="node_exporter", nodename="V6-无脱机搬运工”}
        • 以 1 分钟为单位获取每个核心 CPU 的空闲状态时间:
          • 增加(node_cpu_seconds_total{ mode =“idle”,instance =“192.168.1.190:9100”,job =“node_exporter”,nodename =“V6-”节点导出器"}[1m ])
        • 获取CPU各核1分钟内空闲状态时间增量总和:
          • sum(增加(node_cpu_seconds_total{模式=“空闲”,实例=“192.168.1.190:9100”,作业=“node_exporter”,节点名称=“V”) 6节点导出器” } [1m])
                  • cpu 使用率 = 100 * (1-(idle_t2 –idle_t1) / (total_t2 –total_t1))
                • 将变量代入公式:
                  • 100 * (1 - ((sum(增加(node_cpu_seconds_total{ mode="idle",instance="192.168.1.190:9100", job="node_导出器”,节点名=“ V6-node-exporter"}[1m]))) / (sum(increase(node_cpu_seconds_total{ instance="192.168.1.190:9100", job="node_exporter", nodename="V6-node-exporter"}[1m]) ))))

            4。 CPU平均活跃进程数(平均负载)详解(Load Average

            • 负载平均概念:
              • 平均负载也可以理解为:单位时间内的“平均活跃进程数”。这里的活跃进程主要是指处于可运行状态的进程和处于不可中断状态的进程。与CPU使用率没有直接关系。
            • 可运行且不间断的状态进程:
              • 可运行状态进程
                • 可运行状态的进程是指正在使用CPU或等待CPU的进程,即我们可以通过ps命令查看处于Running或Runnable状态的进程。
              • 不间断的状态处理
                • 不可中断进程是指处于核心状态且不能被中断的进程。也就是我们可以通过ps命令查看到的处于D状态的进程。例如,为了保证磁盘数据的一致性,回写磁盘的过程不能被中断。 不间断状态是系统对硬件设备的一种保护机制。

            。 。 。 。 。 。 。 。

            5。 CPU 上下文切换

            6.CPU缓存命中率

            7。 CPU运行队列

            。 。 。 。 。 。 。 。待续。 。 。 。 。 。 。 。

    关灯