对同一个 CPU 来说,中断处理比进程拥有更高的优先级,所以中断上下文切换不会与进程上下文切换同时发生 。并且,由于中断会打断正常进程的调度和执行,所以大部分中断处理程序都短小精悍,以便可以尽快完成 。
上下文切换的消耗保存上下文
和恢复上下文
的过程并不是免费的,需要内核在 CPU 上运行才能完成
。据测试,每次上下文切换都需要几十纳秒到数微妙的 CPU 时间 。特别是在进程上下文切换
次数较多的情况下,很容易导致 CPU 将大量时间消耗在寄存器、内核栈、虚拟内存等资源的保存和恢复上,从而大大缩短了真正运行进程的时间 。
Linux相比与其他操作系统(包括其他类 Unix 系统)有很多的优点,其中有一项就是,其上下文切换和模式切换的时间消耗非常少 。Linux 通过 TLB 来管理虚拟内存到物理内存的映射关系
。当虚拟内存更新后,TLB 也需要刷新,内存的访问也会随之变慢 。特别是多处理器系统上,缓存是被多个处理器共享的,刷新缓存不仅会影响当前处理器的进程,还会影响共享缓存的其它处理器的进程 。所以过多的上下文切换对系统来说意味着会消耗大量的 CPU 时间 。
根据Tsuna的测试报告,每次上下文切换都需要几十纳秒到数微妙的CPU时间,这个时间还是相当可观的 。不管是哪种场景导致的上下文切换,你都应该知道:
- CPU上下文切换,是保证Linux系统正常工作的核心功能,一般情况下不需要开发人员特别关注 。
- 但过多的上下文切换,会把CPU时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,从而缩短进程真正运行的时间,耗费大量的 CPU,甚至严重降低系统的整体性能 。
vmstat 5
(每隔5s输出一组数据)文章插图
该命令输出信息中,各个字段以及含义:procs:procs 中有 r 和 b 列,它报告进程统计信息 。在上面的输出中,在运行队列(r)中有两个进程在等待 CPU 并有零个休眠进程(b) 。通常,它不应该超过处理器(或核心)的数量,如果你发现异常,最好使用 top 命令进一步地排除故障 。
- r:等待运行的进程数 。
- b:休眠状态下的进程数 。
- swpd:使用的虚拟内存量 。
- free:空闲内存量 。
- buff:用作缓冲区的内存量 。
- cache:用作高速缓存的内存量 。
- inact:非活动内存的数量 。
- active:活动内存量 。
经验总结扩展阅读
- docker搭建yapi接口文档系统、Idea中上传接口、在线调用
- 为什么受凉就会感冒
- 多一半的字是什么
- 中信信用卡申请条件是什么
- 关于广西大学中加国际学院
- 中国高山茶都有哪些茶
- 与中国陆地相邻的国家有几个,最大的是
- 2023年中伏多少天结束
- 中伏为什么有10天20天?三伏天怎么算的
- 杜丽娘是哪部文学作品中人物形象