Context Switches上下文切换性能详解

1、什么是CPU上下文切换(Context Switches)?

操作系统可以同时运行多个进程, 然而一颗CPU同时只能执行一项任务,操作系统利用时间片轮转的方式,让用户感觉这些任务正在同时进行。 CPU给每个任务都服务一定的时间, 然后把当前任务的状态保存下来, 在加载下一任务的状态后, 继续服务下一任务。任务的状态保存及再加载, 这段过程就叫做上下文切换。

Context Switches 上下文切换,有时也被称为进程切换(process switch)或任务切换。是一个重要的性能指标。

时间片轮转的方式使多个任务在同一颗CPU上执行变成了可能, 但同时也带来了保存现场和加载现场的直接消耗。

CPU从一个线程切换到另外一个线程,需要保存当前任务的运行环境,恢复将要运行任务的运行环境,必然带来性能消耗。

 

2、如何获得上下文切换的次数?( 性能分析查看Context Switches的方法)

Linux中可以通过工具vmstat, dstat, pidstat来观察CS的切换情况。vmstat, dstat只能观察整个系统的切换情况,而pidstat可以更精确地观察某个进程的上下文切换情况。

windows中可以使用查看进程的神器processxp,进程列表中可以添加Context Switchs和Context Switchs Delta列,另外进程属性Threads标签页可查看线程对应的Context Switchs。

另windows中还可以使用“性能计数器”监控Context Switchs的变化趋势,方便性能分析。添加System\Context Switches/sec或Thread(_Total)\Context Switches/sec计数器即可。

示例如下:vmstat直接运行即可,在最后几列,有CPU的context switch次数。 这个是系统层面的,加入想看特定进程的情况,可以使用pidstat。

执行pidstat,将输出系统启动后所有活动进程的cpu统计信息:       ​  

2020年07月21日:pidstat获取信息时间点

PID: 进程pid

%usr: 进程在用户态运行所占cpu时间比率

%system: 进程在内核态运行所占cpu时间比率

%CPU: 进程运行所占cpu时间比率

CPU: 指示进程在哪个核运行

Command: 拉起进程对应的命令

备注:执行pidstat默认输出信息为系统启动后到执行时间点的统计信息,因而即使当前某进程的cpu占用率很高,输出中的值有可能仍为 0。

 

3、上下文切换的性能消耗

Context Switchs过高,导致CPU就像个搬运工一样,频繁在寄存器(CPU Register)和运行队列(run queue)之间奔波,系统更多的时间都花费在线程切换上,而不是花在真正做有用工作的线程上。

直接消耗包括: CPU寄存器需要保存和加载, 系统调度器的代码需要执行, TLB实例需要重新加载, CPU 的pipeline需要刷掉。

间接消耗:多核的cache之间得共享数据。间接消耗对于程序的影响要看线程工作区操作数据的大小。

 

Linux相比与其他操作系统(包括其他类 Unix 系统)有很多的优点,其中有一项就是,其上下文切换和模式切换的时间消耗非常少。

 

4、引起上下文切换的原因

对于我们经常使用的抢占式操作系统来说, 引起上下文切换的原因大概有以下几种:

1. 当前执行任务的时间片用完之后, 系统CPU正常调度下一个任务

2. 当前执行任务碰到IO阻塞, 调度器将挂起此任务, 继续下一任务

3. 多个任务抢占锁资源, 当前任务没有抢到,被调度器挂起, 继续下一任务

4. 用户代码挂起当前任务, 让出CPU时间

5. 硬件中断,(如键盘、鼠标、调试解调器、系统时钟)

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基本简介   Process Explorer让使用者能了解看不到的在后台执行的处理程序,能显示目前已经载入哪些模块,分别是正在被哪些程序使用着,还可显示这些程序所调用的 DLL进程,以及他们所打开的句柄。Process Explorer最大的特色就是可以中终任何进程,甚至包括系统的关键进程!   Process Explorer 的显示有两个子窗口所组成,窗口上方会显示出当前活跃的程序进程,包括它们的详细描述,窗口下方则会显示出通过资源管理器模式运行的应用程序的相关信息,以及它们所调用的DLL和打开的句柄,该版本可以运行在windows NT/2K/XP/2003系统平台 [编辑本段]Process Explorer的独特之处   1.显示被执行的映像文件的完整路径   2.显示进程安全令牌   3.加亮显示进程和线程列表中的变化   4.显示作业中的进程,以及作业的细节   5.显示运行。NET/WinFX应用的进程,以及与.NET相关的细节   6.显示进程和线程的启动时间   7.显示内存映射文件的完整列表   8.能够挂起一个进程   9.能够杀死一个线程 [编辑本段]Process Explorer的现状   由Sysinternals开发的一个高级的Windows系统和应用程序监视工具,目前已并入微软旗下。此版本的Process Explorer 不仅结合了Filemon(文件监视器)和Regmon(注册表监视器)两个工具的功能,还增加了多项重要的增强功能。包括稳定性和性能改进、强大的过滤选项、修正的进程树对话框(增加了进程存活时间图表)、可根据点击位置变换的右击菜单过滤条目、集成带源代码存储的堆栈跟踪对话框、更快的堆栈跟踪、可在 64位 Windows 上加载 32位 日志文件的能力、监视映像(DLL和内核模式驱动程序)加载、系统引导时记录所有操作等。   现在Process Explorer 11.21已并入Windows成为Microsoft Process Monitor 1.37。
上下文切换Context Switch)是指在操作系统中,当一个进程或线程被暂停执行,而另一个进程或线程被调度并开始执行时,系统需要保存当前进程或线程的上下文信息,并加载下一个进程或线程的上下文信息。这个过程被称为上下文切换上下文切换的目的是实现多任务并发执行,提高系统的资源利用率和响应性能。 在Windows系统中,可以使用性能计数器来监控上下文切换的变化趋势。可以添加System\Context Switches/sec或Thread(_Total)\Context Switches/sec计数器来进行性能分析。此外,还可以使用工具如Process Explorer来查看进程的上下文切换情况,可以添加Context SwitchesContext Switches Delta列来显示上下文切换的信息。进程的属性中的Threads标签页也可以查看线程对应的上下文切换情况。 在一些特定的代码中,也可以通过一些函数或指令来进行上下文切换。例如,在某些代码中可以使用fpsimd_thread_switch、tls_thread_switch、hw_breakpoint_thread_switchcontextidr_thread_switch等函数或指令来进行上下文切换,这些与硬件跟踪相关的操作可以实现特定的上下文切换功能。 #### 引用[.reference_title] - *1* *2* [Context Switches上下文切换性能详解](https://blog.csdn.net/u011391839/article/details/107493267)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [进程切换(context_switch)代码分析:基本逻辑](https://blog.csdn.net/zdy0_2004/article/details/54871189)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值