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 的上下文切换就可以分为几个不同的场景,也就是进程上下文切换、线程上下文切换以及中断上下文切换
  • 相关阅读:
    C# Use Pop3Client to read gmail
    在c#程式中配置log4net
    修改windows系統下xampp中apache端口被其他程式占用的問題
    关于知识总结的个人体验与见解
    html 元素水平居中方式
    JS setInterval 函数调用
    HTML特殊字符、列表、表格总结
    UISegmentedControl的详细使用
    IOS研究之iOS7适配的使用详细说明
    uibutton设置
  • 原文地址:https://www.cnblogs.com/fzzf/p/13022737.html
Copyright © 2011-2022 走看看