cpu 性能分析基础

文章目录

  • [1 理论基础](#1 理论基础)
    • [1.1 cpu load 运行队列](#1.1 cpu load 运行队列)
    • [1.2 上下文切换](#1.2 上下文切换)
    • [1.3 中断](#1.3 中断)
    • [1.4 cpu usage](#1.4 cpu usage)
    • [1.5 时间](#1.5 时间)
  • [2 工具](#2 工具)
    • [2.1 proc](#2.1 proc)
  • [3 其他工具](#3 其他工具)
  • [4 调优](#4 调优)

1 理论基础

1.1 cpu load 运行队列

Linux进程,要么是可运行状态,要么是阻塞状态。可运行不一定是正在运行,可能是正在等待进程调度。阻塞可能是在等待IO设备数据,也可能是在等待系统调用返回。可运行进程的队列越长,处于等待状态的进程就越多。

在一定的时间内,可运行进程个数的平均值,包括正在运行的进程,即平均负载,这个时间一般为1分钟、5分钟、15分钟。理想情况下,平均负载不超过CPU核心数的70%

1.2 上下文切换

单核CPU一次只能运行一个进程或线程,超线程除外,看上去多个任务在同时运行,其实是Linux内核在不同的进程间切换,公平地分配CPU时间片,这便是上下文切换。上下文切换,需要移动跟踪进程的大量信息,开销很大。内核调度,会周期性地中断正在运行的进程,切换其它进程,引起上下文切换。如果上下文切换明显多于定时器中断,那么可能是IO请求或长时间的系统调用造成的,在这种操作不能立即完成的情况下,为了提高CPU效率,内核也会调度进程,发生上下文切换。

1.3 中断

硬件设备有事件需要内核处理时,会触发中断,即硬中断。如果有相应的已注册的中断处理程序,就会处理这个中断,否则将忽略。中断处理程序运行时的优先级很高,速度也很快。如果不需要高优先级时,会启动下半部,交给软中断处理程序。

1.4 cpu usage

CPU状态,包括idle空闲状态、执行user用户代码的用户态、执行system系统代码的内核态、执行低优先级用户代码的友好用户态、iowait状态、irq硬中断状态、softirq软中断状态。

CPU使用率即CPU各个状态占总时间的百分比,常用来作为衡量系统性能的一个指标。理想情况下,系统CPU使用率不超过70%。

1.5 时间

应用程序在运行时,消耗在系统调用即内核上的时间为系统时间,消耗在依赖库和程序代码上的时间为用户时间。

分析CPU性能问题时,往往需要细化到主要是哪个函数或哪行代码在消耗CPU时间。

2 工具

2.1 proc

通过/proc/cpuinfo文件可以查看cpu相关信息

3 其他工具

4 调优

相关推荐
码农coding32 分钟前
android12 SystemUI之StatusBar(二)
android
Lesile2 小时前
Interview#1 历史演进:MVC · MVP · MVVM · MVI架构详解
android·android jetpack
杉氧3 小时前
Flutter 像素级还原实战:用 CustomPaint 与 Bezier 曲线手绘精致图针
android·前端·flutter
我命由我123455 小时前
Android 在构建过程中,发现有两个依赖库都包含了相同路径的资源文件
android·java·开发语言·java-ee·kotlin·android-studio·android runtime
Coffeeee6 小时前
谷歌的一个优化建议,让我重新学了一遍Android里面如何正确处理位图
android·google·kotlin
冰暮流星6 小时前
mysql之新建表及对表的查询
android·数据库·mysql
用户2018792831676 小时前
彻底搞懂LayoutInflater、ViewInflater与textViewStyle优先级:XML属性为何能覆盖全局样式?
android
达达尼昂6 小时前
AI Native 工程实践:如何为 Claude 5 设计更有效的上下文
android·人工智能·后端
Cry丶7 小时前
【已解决】adb devices 能识别手机,但 HBuilderX 搜索不到设备的避坑指南
android·adb·uni-app·hbuilderx·真机调试
墨神谕8 小时前
认识一下Unicode(统一码)
android·java·数据库