zoukankan      html  css  js  c++  java
  • linux 性能优化之CPU性能

    linux 性能优化之CPU性能

    一、理解CPU信息:

    物理 cpu 数(physical cpu):指主板上实际插入的 cpu 硬件个数(socket)。

    #查看物理 cpu 数
    cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
    

    核心(core):一开始,每个物理 cpu 上只有一个核心(a single core),对操作系统而言,也就是同一时刻只能

    运行一个进程/线程。 为了提高性能,cpu 厂商开始在单个物理 cpu 上增加核心(实实在在的硬件存在),也就出

    现了双核心 cpu(dual-core cpu)以及多核心 cpu(multiple cores),这样一个双核心 cpu 就是同一时刻能够

    运行两个进程/线程的。

    #每个物理 cpu 中 核心数(core 数):
    cat /proc/cpuinfo | grep "cpu cores" | uniq
    

    逻辑 processer: logical processor:是为了提高单个 core 同一时刻能够执行的多线程数的技术。

    AMD的SMT,Intel 的HT技术。

    总的逻辑 cpu 数 = 物理 cpu 数 * 每颗物理 cpu 的核心数 * 每个核心的超线程数

    #总的逻辑 cpu 数(processor 数):
    cat /proc/cpuinfo| grep "processor"| wc -l
    
    #查看 cpu 型号:
    cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
    

    二、什么是平均负载?

    平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。

    可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态

    (Running 或 Runnable)的进程。

    不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件

    设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。

    不可中断状态实际上是系统对进程和硬件设备的一种保护机制。

    当平均负载高于逻辑 CPU 数量 80% 的时候,你就应该分析排查负载高的问题了。一旦负载过高,就可能导致进程

    响应变慢,进而影响服务的正常功能。

    平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。但只看平均负载本身,我们并不能直

    接发现,到底是哪里出现了瓶颈。所以,在理解平均负载时,也要注意:平均负载高有可能是 CPU 密集型进程导

    致的平均负载高并不一定代表 CPU 使用率高,还有可能是 I/O 更繁忙了;当发现负载高的时候,你可以使用

    mpstat、pidstat 等工具,辅助分析负载的来源。

    分析负载的案例

    1. 安装 stress 和 sysstat apt install stress sysstat

    CPU 密集型

    1. stress 施加压力 stress --cpu 1 --timeout 600
    2. 观察平均负载变化 watch -d uptime
    3. 观察所有CPU的使用情况 mpstat -P ALL 5
    4. 按线程观察CPU使用情况 pidstat -u 5 1

    io 密集型

    1. 施加io压力 stress -i 1 --timeout 600
    2. 观察CPU情况,系统 CPU 使用率升高到了 23.87,而 iowait 高达 67.53%。这说明,平均负载的升高是由于 iowait 的升高。

    大量进程场景

    1. 施加多进程压力,stress -c 8 --timeout 600
    2. pidstat -u 5 1 会发现每个进程等待CPU的时间为 75%。

    CPU 上下文切换

    1. 每个任务运行前,需要系统事先帮它设置好 CPU 寄存器和程序计数器。
    2. CPU 上下文切换,就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。
    3. 根据任务的不同,CPU 的上下文切换就可以分为几个不同的场景,也就是进程上下文切换、线程上下文切换以及中断上下文切换
  • 相关阅读:
    BZOJ 3506 机械排序臂 splay
    BZOJ 2843 LCT
    BZOJ 3669 魔法森林
    BZOJ 2049 LCT
    BZOJ 3223 文艺平衡树 splay
    BZOJ 1433 假期的宿舍 二分图匹配
    BZOJ 1051 受欢迎的牛 强连通块
    BZOJ 1503 郁闷的出纳员 treap
    BZOJ 1096 ZJOI2007 仓库设计 斜率优化dp
    BZOJ 1396: 识别子串( 后缀数组 + 线段树 )
  • 原文地址:https://www.cnblogs.com/fzzf/p/13022737.html
Copyright © 2011-2022 走看看