performance 工具截图 转载

 1、

复制代码
进程状态一共有如下5种

R(运行):进程正在运行或在运行队列中等待。
T(停止):进程收到停止信号后停止运行。
Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,他是不能被其他进程或者中断打断,这个时候的进程就区域不可中断的状态。如果此时的进程被打断了,就容易出现磁盘数据与进程数据不一致的问题。因此,不可中断状态实际上是系统对进程和硬件设备的一种保护机制。

最理想的状态,就是每个CPU上都刚好运行着一个进程,这样每个CPU都得到充分利用。例如,当平均负载为2时,
复制代码

2、

而CPU使用率,是根据单位时间内CPU的繁忙情况进行统计,和平均负载并一定完全一致。例如,

CPU密集型进程,大量使用CPU会导致负载升高,此时CPU使用率和平均负载是一致的。
I/O密集型进程,等待I/O也会导致平均负载升高,但是CPU的使用率并不一定会很高。
大量等待CPU的进程调度也会导致平均负载升高,此时的CPU使用率也会比较高。

3、

复制代码
cpu上下文切换
进程在竞争CPU的时候并没有真正运行,是CPU上下文切换导致平均负载升高。在每个任务运行前,CPU都需要知道任务从哪里加载、又从哪里开始运行,也就是说,需要系统事先帮他设置好CPU寄存器和程序计数器。

cpu寄存器是CPU内置的容量小、但速度极快的内存。而程序计数器,则是 用来存储CPU正在执行的指令位置、或者即将执行的下一条指令位置。他们都是CPU在运行任何任务前,必须的依赖环境,因此也被叫做CPU上下文。

CPU上下文切换,就是先把前一个任务的CPU上下文(也就是CPU寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。而这些保存下来的上下文,会存储在系统内核中,并在任务重新调度之行时候再次加载进来,这样就能保证任务原来的状态不受影响,让任务看起来还是连续运行。

根据任务的不同,cpu的上在问切换可以分为几个不同的场景,也就是进程上下文切换、线程上下文切换、中断上下文切换。
一次系统调用的过程,其实时发生了两次CPU上下文切换。
系统调用过程中,并不会涉及到虚拟内存等用户态的资源切换,也不会切换进程,这和我们通常所说的进程上下文切换是不一样的:

进程上下文切换,是指从一个进程切换到另一个进程中。
而系统调用的过程一直是同一个进程在运行,只是用户空间与内核空间进行切换,分别执行相应权限的指令。
Linux通过TLB来管理虚拟内存到五力内存的映射,当虚拟内存更新后,TLB也需要刷新,内存的访问也会随之变慢。特别是在多处理器的系统上,缓存是被多个处理器共享的,刷新缓存不仅会影响当前处理器的进程,还会影响共享缓存的其他处理器的进程。

只有在进程调度切换时候,才需要切换上下文,linux为每一个cpu都维护了一个就绪队列,将活跃进程(即正在运行和正在等待CPU的进程)按照优先级和等待CPU的时间顺序,然后选择最需要CPU的进程,也就是优先级最高和等待CPU时间最长的进程来运行
复制代码
  1. cpu上下文切换,是保证linux正常工作的核心功能之一,一般情况下不需要我们特别关注。
  2. 但过多的上下文切换,回报cpu时间消耗在寄存器,内核栈以及虚拟内存等数据的保存和恢复上,从而缩短进程真正运行的时间,导致系统的整体性能大幅下降。

 

posted @   codestacklinuxer  阅读(65)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示