关于CPU,有3个重要的概念:上下文切换(context switchs),运行队列(Run queue)和使用率(utilization)。

  上下文切换:

  目前流行的CPU在同一时间内只能运行一个线程,超线程的处理器可以在同一时间运行多个线程(包括多核CPU),Linux内核会把多核的处理器当作多个单独的CPU来识别。

  一个标准的Linux内核可以支持运行50~50000个进程运行,对于普通的CPU,内核会调度和执行这些进程。每个进程都会分到CPU的时间片来运 行,当一个进程用完时间片或者被更高优先级的进程抢占后,它会备份到CPU的运行队列中,同时其他进程在CPU上运行。这个进程切换的过程被称作上下文切 换。过多的上下文切换会造成系统很大的开销。

  运行队列

  每个CPU都会维持一个运行队列,理想情况下,调度器会不断让队列中的进程运行。进程不是处在sleep状态就是run able状态。如果CPU过载,就会出现调度器跟不上系统的要求,导致可运行的进程会填满队列。队列愈大,程序执行时间就愈长。

  关于时间片和动态优先级

  时间片对于CPU来说是很关键的参数,如果时间片太长,就会使系统的交互性能变差,用户感觉不到并行。如果太短,又会造成系统频繁的上下文切换,使性能 下降。对于IO Bound的系统来讲并不需要太长的时间片,因为系统主要是IO操作;而对于CPU Bound的系统来说需要长的时间片以保持cache的有效性。

  每一个进程启动的时候系统都会给出一个默认的优先级,但在运行过程中,系统会根据进程的运行状况不断调整优先级,内核会升高或降低进程的优先级(每次增加或降低5),判断标准是根据进程处于sleep状态的时间。

  IO Bound进程大部分时间在sleep状态,所以内核会调高它的优先级,CPU Bound进程会被内核惩罚降低优先级。因此,如果一个系统上即运行IO Bound进程,又运行CPU Bound进程,会发现,IO Bound进程的性能不会下降,而CPU Bound进程性能会不断下降。

  经验总结:

  1、对于每一个CPU来说运行队列不要超过2,例如,如果是双核CPU就不要超过4;

  2、如果CPU在满负荷运行,应该符合下列分布,

  a)User Time:65%~70%

  b)System Time:30%~35%

  c)Idle:0%~5%

  3、对于上下文切换要结合CPU使用率来看,如果CPU使用满足上述分布,大量的上下文切换也是可以接受的。

最新文章

  1. jQuery倒计时插件
  2. (转)jQuery源码解读 -- jQuery v1.10.2
  3. Oracle实例和Oracle数据库(Oracle体系结构)
  4. css 层叠样式表
  5. css 字间距离_css 字体字符间距设置
  6. Android aidl 打入jar解决方法
  7. java.lang.NoClassDefFoundError的原因及解决
  8. 汇编语言中PTR的含义(转载)
  9. [ An Ac a Day ^_^ ] hdu 1662 Trees on the level 数据结构 二叉树
  10. eclipse通过maven构建web项目步骤说明
  11. sscanf()用法
  12. 网络1711班 C语言第七次作业批改总结
  13. chrome开发者工具实现整站截屏
  14. poj1164 The Castle
  15. 【bioinfo】生物信息学——代码遇见生物学的地方
  16. Docker入门与实践
  17. scrapy基础二
  18. Git应用—02各种冲突场景处理(转载)
  19. 【BZOJ3622】已经没有什么好害怕的了
  20. JAVA中equals方法与hashCode方法学习

热门文章

  1. weblogic 12c重置console密码
  2. 格雷码C++实现
  3. Lua学习笔记1,基本数据类型
  4. linux-git shell colors
  5. php上传文件出现500错误
  6. lr设置监控本地和远程windows系统资源
  7. 028——VUE中事件修饰符once
  8. 008PHP基础知识——运算符(一)
  9. wxpython的简单的应用
  10. CSS3径向渐变linear-gradient