前言
我们知道现在操作系统,都是多进程和多线程,那么会有一个操作系统帮助我们去切换进程和线程,这个是要消耗cpu资源的,那么就来了解一下cpu资源消耗情况。
正文
一般是下面几个场景切换:
进程上下文切换
(相关资料图)
线程上下文切换
中断上下文切换
在了解进程切换的时候,需要了解另外一个东西,进程的运行环境,进程的运行环境分为内核空间和用户空间。
linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,分布对应着上图中的,cpu 特权等级ring0 和 ring3。
进程既可以在用户态空间运行,又可以在内核空间中运行,进程在用户空间运行时,被称为进程的用户态,而陷入内核空间的时候,被称为进程的内核态。
举个例子,我们需要进行读取文件。
首先需要调用open 打开文件
然后调用read 读取文件内容
并调用write 将内容写到标志输出
然后close。
那么这个时候cpu的上下文切换是怎么样的呢?
cpu 寄存器里原来用户态的指令位置(寄存器),先保存起来。为了执行内核态代码,cpu 寄存器需要更新为内核态指令的新位置。然后就跑到了内核态执行内核任务了。
而系统调用后,cpu 寄存器需要恢复到原来保存的用户态,然后再切换到用户空间,继续运行进程。
一次系统调用,那么需要两次cpu切换。
系统调用过程中,并不会涉及到虚拟内存等进程用户态的资源,也不会切换进程,这和进程切换不一致。
也就是说系统调用是同一个进程,发生了cpu 上下文切换(也叫特权模式切换),而进程切换,是进程进行了切换。
那么进程的上下文切换是怎么样的呢?
首先进程是由内核来管理和调度的,进程的切换只能发生在内核态。所以,进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间资源,还包含了内核堆栈、寄存器等内核空间的状态。
因此进程的上下文就比系统调用多了一步,在保存当前进程的内核状态和cpu寄存器之前,需要把该进程的虚拟内存,栈等保留下来;而加载下一进程的内核态后,还需要刷新进程的虚拟内存和用户栈。
这些现在不需要过于了解,在我后面介绍操作系统系列的时候,会详细描述。
只需要知道其复杂高于系统调用即可,其步骤多了保存用户空间资源的描述等。
那么讲完了进程的上下文切换,那么讲一下线程的上下文切换。
我们知道线程才是cpu 运行的最小单位,其实进程切换就是两个线程来自不同的进程,那么两个线程来自同一进程呢?这时候的cpu 操作是怎么样的呢?
有一个很关键的知识需要了解: 线程是调度的基本单位,而进程则是资源拥有的基本单位。说白了,内核的任务调度的对象是线程;而进程提供给线程虚拟内存,全局变量等资源。
这个时候就明白了,如果线程来自同一个进程,那么就不需要切换虚拟内存,只需要切换线程的私有数据、寄存器等不共享的数据。
那么还有一类场景是中断上下文切换。
为了快速响应硬件的事件,中断处理会打断进程的正常调度和执行,转而调用中断处理程序,响应设备时间。
而在打断其他进程时,就需要将进程状态保存下来,这样在中断结束后,进程依然可以从原来的状态恢复。
跟进程上下文不同,中断上下文切换并不涉及到进程的用户态。所以即便中断过程打断一个正处于用户态的进程,也不需要保留和恢复进程的虚拟内存、全局变量等用户态资源。
中断上下文,其实只包含内核态中断服务执行必须的状体,包括cpu 寄存器、内核堆栈、硬件中断参数等。
对同一个cpu来说,中断处理比进程拥有更高的优先级,所以中断上下文切换并不会与进程上下文切换同时发生。
同样道理,由于中断会打断正常进程的调度和执行,所以大部分中断处理程序短小精悍,以便可能快的执行结束。
另外,跟进程上下文切换一样,中断上下文切换也需要消耗cpu,切换次数过多也会导致消耗大量的cpu,甚至英雄降低系统的整体性能。
所以,你发现中断次数过多时,就需要注意去排查它是否会给你的系统带来严重的性能影响。
实验
我们知道除了线程需要调用cpu外,上下文还可能导致cpu高,那么怎么确定是不是上下文切换导致cpu高呢?
那么我们怎么来定位呢?
cs (context switch) 每秒上下文切换的次数
in (interrupt) 则是每秒中断的次数
r (running or runnable) 是就绪队列的长度,也就是正在运行和等待cpu的进程数。
b (blocked) 则是处于不可中断睡眠的进程数。
上图中可以看到cs 上下文切换了大概1.4k左右,in 中断大概接近 1k,r 是0, b 是0.
那么如何我们想知道到底是哪个进程中断次数比较多呢?
cswch 表示每秒资源上下文切换的次数 (voluntary context switchs)
另外一个是nvcswch (none voluntary context switchs) 的次数
那么什么是自愿,什么是非自愿呢?
自愿救赎指系统无法获取所需资源,导致上下文切换。比如i/o、内存等系统资源不足时,就会发生资源上下文切换。
而非自愿切换,则是进程由于时间片等原因,被系统强制调度进而发生的上下文切换。比如大量进程都在争抢cpu时,就容易发生非资源上下文切换。
那么上下文切换多次次数算是正常呢?
使用sysbench 模拟线程直接的切换:
sysbench --thread=10 --max-time=300 threads run
然后vmstat 进行切换。
可以看到 cs 非常高,in 相对少,说明线程或者进程直接的切换,而不是系统中断发生的。
r 列非常高,远超cpu 内核2个。
然后us 和 sy,分别是33 和67,说明内核占用比较大。
虽然in 比较少,但是上升也很快,说明系统中断也是有一部分。
那么到底是哪个进程导致的呢?
通过:
pidstat -w -u 1
可以看到sysbench cpu 190%。
那么是sysbench 的问题。
那么问题就来了,这里不管自愿还是非自愿的上下文切换次数,远远达不到我们看到的十几万次数。
这是为什么呢? 因为这是进程的切换次数,如果这个进程一直捕获的cpu,那么哪有什么机会去获得进程切换的机会?
那么需要这样查看:
pidstat -wt 1
那么现在上下文切换的次数找到了,那么看下系统中断的原因。
查看cpu 中断的原因:
watch -d cat /proc/interrupts
可以看到res 变化很大,res 是重调度中断,这个中断类型表示,唤醒空闲状态cpu来调度新的任务运行。
调度器用来分散任务到不同cpu的机制,通常也被称为处理器间中断。
所以中断升高还是因为任务的调度问题,跟前面一致。
那么问题来了,多少cpu 上下文切换算是正常呢? 一般是1w以内。
自愿切换变多了,说明进程在等待资源,那么是io问题
非自愿切换变多了,那么就是进程被强制调度,也就是在争抢cpu,说明cpu到达瓶颈了。
中断次数变多了,说明cpu被中断处理程序占用,还需要通过查看/proc/interrupts 文件查看。
结
后面两节实战一些例子。
关键词:
(责任编辑:黄俊飞)推荐内容
- linux 性能自我学习 ———— cpu
- 贝达药业闪崩背后|每日快讯
- 喇叭网罩蚀刻工艺 喇叭网罩
- 世界今热点:罚款431.33万!徽商银行存在
- 飞碟说恋爱大师(飞碟说)|时快讯
- Homebase 预测银行假期过后将迎来强劲的夏季
- PPT | 镁电池:潜力无限的下一代高性能
- 【警方视点】冰城公安:安全宣讲进校园
- 开票“一点没”,你是不是又没抢到票?
- 天天热议:满族的传统节日是什么(关于满
- 宣讲进基层“党音”入民心-世界看热讯
- 为农户送上金融“及时雨” 兴业银行深圳
- 热熔胶可以粘什么?(热熔胶可以粘什么材
- 58如何退款(58团购怎么退款) 环球精选
- 存钱“最安全”的4家银行,永远不会倒闭
- 礼器碑(关于礼器碑介绍)
- 张良点金:晚间黄金1951之上看涨不变,镑
- 减持计划引发股价大幅波动 傲农生物澄清
- 倪鑫:我国高度重视儿童的心理健康 全球
- 天天微速讯:内马尔辱华处理结果(内马尔
- 焦点!桓仁县气象局发布大风蓝色预警【Ⅳ
- 希望做“有用”的化学 她带领团队破解了
- ST澄星(600078)5月31日主力资金净卖出9
- 无声的舞者_关于无声的舞者介绍 精彩看点
- 全球热文:中关村论坛发布20项重大科技成
- 国泰君安助力比亚迪汽金成功发行市场最大
- 世界球精选!鸿海正在与英伟达合作进行自
- 焦点精选!餐饮市场加快恢复向好 小吃消
- 秦朝时刘邦当过亭长,在当时是多大的官,
- 环球热推荐:jsp文件怎么打开_jsp文件打
- 平乐郭氏正骨传人郭马珑的医者初心
- 世界观点:诺如病毒是什么原因引起的_诺
- 天天快消息!300mbps是多少兆网速(300mb
- 世界看热讯:库里告别迈尔斯:永远感激你
- 『微变化里看孙吴』孙吴县第九届“爱心助
- 新特电气(301120):5月30日北向资金增
- 蒙古国促进经济多元化发展 焦点热文
- soso丸轻姿养有副作用吗(soso丸)
- JFrog发布《2023全球软件制品应用报告》|
- 【天天聚看点】绝经后少量出血是什么原因
- 阳历2月29是什么星座_2月29日是什么星座
- 世界快讯:上市一年后,茅台冰淇淋带来了
- 看中一个店面房,先是交了一个定金没有签
- 世界短讯!民富国际(08511.HK)拟“2供1”
- 每日速讯:预告:上海市政府周三举行新闻
- 药师解药 | 关注健康,始于足下! 全
- 新消息丨搜狐网
- 大合同要泡汤了!凯尔特人锋线大将的表现
- 乐森大黄蜂G1测评:情怀与科技碰撞出的火
- 银川-香港定期航班正式复航
- 毛方园:大胆做科研 对自己不设限 当前
- 京东商城商城创建时间_京东商城商城-全球
- 中南城投所持中南建设0.89%股份遭二次公
- 天天简讯:40名玉树青少年即将开启北京之
- 环球短讯!远洋集团荣获“H股2023房企综
- 天天速读:数字人民币乘车码5月31日落地
- 世界头条:中简科技(300777.SZ):ZT7碳纤
- 印度储备银行将向数字化转型|每日信息
- 环球实时:背后灵游戏(背后灵)
- 2023成都高新区公办幼儿园补录公告汇总(
- 焦点!桓仁县气象局发布大风蓝色预警【Ⅳ
- 希望做“有用”的化学 她带领团队破解了
- ST澄星(600078)5月31日主力资金净卖出9
- 无声的舞者_关于无声的舞者介绍 精彩看点
- 全球热文:中关村论坛发布20项重大科技成
- 国泰君安助力比亚迪汽金成功发行市场最大
- 世界球精选!鸿海正在与英伟达合作进行自
- 焦点精选!餐饮市场加快恢复向好 小吃消
- 秦朝时刘邦当过亭长,在当时是多大的官,
- 环球热推荐:jsp文件怎么打开_jsp文件打
- 平乐郭氏正骨传人郭马珑的医者初心
- 世界观点:诺如病毒是什么原因引起的_诺
- 天天快消息!300mbps是多少兆网速(300mb
- 世界看热讯:库里告别迈尔斯:永远感激你
- 『微变化里看孙吴』孙吴县第九届“爱心助
- 新特电气(301120):5月30日北向资金增
- 蒙古国促进经济多元化发展 焦点热文
- soso丸轻姿养有副作用吗(soso丸)
- JFrog发布《2023全球软件制品应用报告》|
- 【天天聚看点】绝经后少量出血是什么原因
- 阳历2月29是什么星座_2月29日是什么星座
- 世界快讯:上市一年后,茅台冰淇淋带来了
- 看中一个店面房,先是交了一个定金没有签
- 世界短讯!民富国际(08511.HK)拟“2供1”
- 每日速讯:预告:上海市政府周三举行新闻
- 药师解药 | 关注健康,始于足下! 全
- 新消息丨搜狐网
- 大合同要泡汤了!凯尔特人锋线大将的表现
- 乐森大黄蜂G1测评:情怀与科技碰撞出的火
- 银川-香港定期航班正式复航
- 毛方园:大胆做科研 对自己不设限 当前
- 京东商城商城创建时间_京东商城商城-全球
- 中南城投所持中南建设0.89%股份遭二次公
- 天天简讯:40名玉树青少年即将开启北京之
- 环球短讯!远洋集团荣获“H股2023房企综
- 天天速读:数字人民币乘车码5月31日落地
- 世界头条:中简科技(300777.SZ):ZT7碳纤
- 印度储备银行将向数字化转型|每日信息
- 环球实时:背后灵游戏(背后灵)
- 2023成都高新区公办幼儿园补录公告汇总(
- 河南遭遇10年来最严重“烂场雨”,省财政
- 《铁甲小宝》高清鲨鱼辣椒来了!最帅的反
- 高温预警升级!东莞出现今年首例热射病!
- 天天热门:浏阳皇龙峡漂流在哪里?怎么去?
- 全新皇冠Sedan内饰实拍首曝 今秋日本上
- 魔角侦探5:失声谜案_关于魔角侦探5:失
- 铝焊粉401与201的区别_铝焊粉 全球今亮点
- 孙杨(朱志根)-微速讯
- 表面是精致美人,实则是馒头脸、歪鼻子,
- 天山好物“飞”进港城 “润疆情”新疆
- 2018年最佳MacBook Air折扣机型售价850
- 因编制虚假业务资料等 太平人寿济宁中支
- 潜山市气象局发布雷电黄色预警【III级/较
- 世博如意金条价格今天多少一克(2023年05
- 济南市长清区教育系统公开招聘报名时间+
- 环球速递!四川宜宾:15支高校队伍角逐“
- 算了,不过是又一部没人看的国产片。
- 今日要闻!朗玛信息:发布医疗健康人工智
- 全球快资讯:“白发姑苏”传承焕新——二
- 时讯:科创盛事 多方共享——2023中关村