linux 工作队列 cpu 100%,【操作系统之十一】任务队列、CPU Load、指令乱序、指令屏障...

一、CPU Load

cpu load是对使用或者等待cpu进程的统计(数量的累加):每一个使用(running)或者等待(runnable)CPU的进程,都会使load值+1;每一个结束的进程,都会使load值-1。

大部分Unix操作系统只计算running和runnable的进程。但是Linux系统除了上述两种状态进行,还计算uninterruptible sleep状态的进程(通常是在等待磁盘IO)。

cpu load average:分别表示1分钟、5分钟和15分钟内的cpu负载均值,使用命令:w,uptime,top。

二、工作队列(workqueue)是Linux内核中把工作延迟执行的一种手段,工作队列主要目的是节省资源,不创建线程,没有CPU和内存开销,其比较适合很微小的任务,比如执行某个唤醒工作等。

三、指令乱序

通过改变原有执行顺序而减少时间的执行过程称之为乱序执行,也称为重排,在单核情况下,乱序技术提高了运算速度。

5afeae79188433eaa37ccdfe385ca887.png

c53312b1a4d14ca75ebed6a549c0e7e5.png

(1)处理器乱序分类

现代处理器采用指令并行技术,在不存在数据依赖性的前提下,处理器可以改变语句对应的机器指令的执行顺序来提高处理器执行速度;

现代处理器采用内部缓存技术,导致数据的变化不能及时反映在主存所带来的乱序;

现代编译器为优化而重新安排语句的执行顺序;

(2)as-if-serial语义

无论是处理器还是编译器,不管怎么重排都要保证(单线程)程序的执行结果不能被改变,这就是as-if-serial语义.比如烧水煮茶的最终结果永远是煮茶,而不能变成烧水.为了遵循这种语义,处理器和编译器不能对存在数据依赖性的操作进行重排,因为这种重排会改变操作结果

四、内存屏障

对于多核情况,其中的某些”自作聪明”的乱序优化导致多线程程序产生各种各样的意外.因此有必要存在一种机制来消除乱序执行带来的坏影响,也就是说应该允许程序员显式的告诉处理器对某些地方禁止乱序执行.这种机制就是所谓内存屏障.

不同架构的处理器在其指令集中提供了不同的指令来发起内存屏障,对应在编程语言当中就是提供特殊的关键字(比如:volatile)来调用处理器相关的指令.

内存屏障的分类:

Store就是将处理器缓存中的数据刷新到内存中,而Load则是从内存拷贝数据到缓存当中.

c876afd5bf487797d6eceba778e36937.png

StoreLoad Barriers同时具备其他三个屏障的效果,因此也称之为全能屏障,是目前大多数处理器所支持的,但是相对其他屏障,该屏障的开销相对昂贵.在x86架构的处理器的指令集中,lock指令可以触发StoreLoad Barriers.

volatile关键字及编译器指令乱序总结

本文简单介绍volatile关键字的使用,进而引出编译期间内存乱序的问题,并介绍了有效防止编译器内存乱序所带来的问题的解决方法,文中简单提了下CPU指令乱序的现象,但并没有深入讨论. 以下是我搭建的博 ...

JMM内存模型、CPU缓存一致性原则(MESI)、指令重排、as-if-serial、happen-before原则

JMM三大特性原子性 汇编指令 --原子比较和交换在底层的支持 cmp-chxg 总线加锁机制 Synchronized Lock锁机制 public class VolatileAtomicSamp ...

《30天自制操作系统》笔记(06)——CPU的32位模式

<30天自制操作系统>笔记(06)——CPU的32位模式 进度回顾 上一篇中实现了启用鼠标.键盘的功能.屏幕上会显示出用户按键.点击鼠标的情况.这是通过设置硬件的中断函数实现的,可以说硬件 ...

操作系统概念学习笔记 10 CPU调度

操作系统概念学习笔记 10 CPU调度 多道程序操作系统的基础.通过在进程之间切换CPU.操作系统能够提高计算机的吞吐率. 对于单处理器系统.每次仅仅同意一个进程执行:不论什么其它进程必须等待,直到C ...

CPU利用率和CPU负荷&lpar;CPU usage vs CPU load&rpar;

对于CPU的性能监测,通常用top指令能显示出两个指标:cpu 利用率和cpu负荷. 其中%Cpu相关的内容: us表示用户进程cpu利用率,sy表示系统内核进程cpu利用率,ni表示运行正常进程消耗 ...

浅谈cpu&period;idle和cpu&period;load

1.概述 大家经常对一个系统的容量进行评估时,会参考cpu.idle和cpu.load指标,但是这两个指标到底在什么区间,表示系统是正常或者异常呢,业内有不同的说法.因此本文搜集一些资料,并对一个系统 ...

Linux内核分析:页回收导致的cpu load瞬间飙高的问题分析与思考--------------蘑菇街技术博客

http://mogu.io/156-156 摘要 本文一是为了讨论在Linux系统出现问题时我们能够借助哪些工具去协助分析,二是讨论出现问题时大致的可能点以及思路,三是希望能给应用层开发团队介绍一些 ...

linux loadavg详解(top cpu load)

目录 [隐藏] 1 Loadavg分析 1.1 Loadavg浅述 1.2 Loadavg读取 1.3 Loadavg和进程之间的关系 1.4 Loadavg采样 2 18内核计算loadavg存在的 ...

cpu load过高问题排查

load average的概念 top命令中load average显示的是最近1分钟.5分钟和15分钟的系统平均负载. 系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少 ...

随机推荐

Android 控件的显示隐藏上下左右移动动画

一.利用Android提供的左右移动工具类:AnimationUtils 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 LinearLayout ll_fi ...

对话框AlertDialog的基本类型与创建

测试代码: 布局: activity_main.xml:     &l ...

PHP基础(2)

测试模板

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值