CPU-上下文切换,运行队列和使用率
来源:互联网 发布:淘宝违规没扣分有事吗 编辑:程序博客网 时间:2024/05/16 07:41
引用 :http://blog.itpub.net/24435147/viewspace-694469/
关于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来说运行队列不要超过3,例如,如果是双核CPU就不要超过6;
2. 如果CPU在满负荷运行,应该符合下列分布,
a) User Time:65%~70%
b) System Time:30%~35%
c) Idle:0%~5%
3. 对于上下文切换要结合CPU使用率来看,如果CPU使用满足上述分布,大量的上下文切换也是可以接受的。
http://blog.csdn.net/lmy4710/article/details/41863927
- CPU-上下文切换,运行队列和使用率
- CPU-上下文切换,运行队列和使用率
- CPU-上下文切换,运行队列和使用率
- 操作系统CPU上下文切换
- 操作系统 CPU上下文切换
- Linux CPU 上下文切换
- 操作系统CPU上下文切换
- CPU上下文切换的次数和时间(context switch)
- linux收集memory使用率和cpu使用率
- 获取内存和CPU使用率
- Linux如何查看CPU信息,Linux查看CPU个数和核心数,Linux查看CPU使用率和运行位数
- Linux下内存使用率、CPU使用率、以及运行原理
- Linux下内存使用率、CPU使用率、以及运行原理-转
- 提高运行Caffe时的CPU使用率
- 上下文切换和锁
- 进程和上下文切换
- oracle运行系统比较慢,cpu使用率高的检查和紧急处理
- oracle运行系统比较慢,cpu使用率高的检查和紧急处理
- Android混淆从入门到精通
- Eureka 源码解析 —— 注册表 InstanceRegistry 类关系
- 计算机网络技术基础
- 五款最佳VMware vSphere免费管理工具
- ClassLoader 简单总结
- CPU-上下文切换,运行队列和使用率
- OpenVirteX体系结构
- jna
- win7下mysql(10038)问题解决方法
- [搞笑动图]编译错误,括号不匹配
- linux centOS 安装apache+php+mysql及安装discuz
- Espresso检测不到Intent,Recorded intents:[]
- 导入新的maven项目时,目录结构变化,而且build path显示不正常。
- 各种开关的教程---凯利讯半导体