首页 > 其他分享 >上下文切换

上下文切换

时间:2024-05-03 09:55:39浏览次数:18  
标签:自愿 中断 切换 进程 上下文 CPU

CPU上下文切换可分为进程上下文切换、线程上下文切换和中断上下文切换。

怎么查看系统上下文切换情况

vmstat 5
  • cs(context switch):每秒上下文切换次数。
  • in(interrupt): 每秒中断次数。
  • r(Running or Runnable): 就绪队列长度,也就是正在运行和等待CPU的进程数。
  • b(Blocked): 处于不可中断睡眠状态的进程数。

查看进程上下文切换情况

#每5s输出一组数据
# 每隔5秒输出1组数据
$ pidstat -w 5
Linux 4.15.0 (ubuntu)  09/23/18  _x86_64_  (2 CPU)

08:18:26      UID       PID   cswch/s nvcswch/s  Command
08:18:31        0         1      0.20      0.00  systemd
08:18:31        0         8      5.40      0.00  rcu_sched
...
pidstat -w -u 1
pidstat -wt 1

系统的就绪队列过长,也就是正在运行和等待CPU的进程数过多,会导致大量的上下文切换,而上下文切换会导致系统CPU占用率升高。

自愿上下文切换和非自愿上下文切换

  • 自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说,IO、内存等系统资源不足时,就会发生自愿上下文切换。

  • 非自愿上下文切换,则是指进程由于时间片已等到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢CPU时,就容易发生非自愿上下文切换。

每次上下文切换多少次才算正常呢?

这个数值取决于系统本身的CPU性能。在我看来,如果系统的上下文切换次数比较稳定,那么从数百到一万以内,都应该算是正常的。但当上下文切换超过一万次,或者切换次数出现数量级增长时,就很可能出现了性能问题。

中断

watch -d cat /proc/interrupts

观察一段时间,可以发现,变化速度最快的是重调度中断(RES),这个中断类型表示,唤醒空间状态的CPU来调度新的任务运行。这是多处理器系统(SMP)中,调度器用来分散任务到不同CPU的机制,通常也被称为处理器间中断(IPI)。

小结

  • 自愿上下文切换变多了,说明进程都在等待资源,有可能发生了IO等其他问题。
  • 非自愿上下文切换变多了,说明进程都在被强制调度,也就是都在争抢CPU,说明CPU的确成了瓶颈。
  • 中断次数变多了,说明CPU被中断处理程序占用,可通过/proc/interrupts文件来分析具体的中断类型。

练习

# 以10个线程运行5分钟的基准测试,模拟多线程切换的问题
$ sysbench --threads=10 --max-time=300 threads run
vmstat 1
ps -ef|grep sysbench
pidstat -wt -p pid 1 5
watch -d cat /proc/interrupts

标签:自愿,中断,切换,进程,上下文,CPU
From: https://www.cnblogs.com/lixiaomeng/p/18170951

相关文章

  • db.create_all() 报错上下文?flask_sqlalchemy创建数据库找不到上下文?
    问题报错:RuntimeError:Workingoutsideofapplicationcontext.Thistypicallymeansthatyouattemptedtousefunctionalitythatneededthecurrentapplication.Tosolvethis,setupanapplicationcontextwithapp.app_context().Seethedocumentationform......
  • Clock Switch,芯片时钟切换的毛刺是什么,如何消除
    背景芯片运行过程中需要时钟切换时,要考虑到是否会产生glitch,小小的glitch有可能导致电路运行的错误。所以时钟切换时需要特别的处理。直接使用MUX进行时钟切换或者采用如下电路结构进行时钟切换:assignoutclock=(clk1&select)|(~select&clk0);或assignoutclock=......
  • Windows下从JDK1.8切换安装JDK11不生效
    Windows下安装JDK11是没问题的试了好几遍心态有点崩,试着把path的%JAVA_HOME%\bin移到最上层然后Java-version就可以了可能是配置好JDK1.8之后它会自动生成一个环境变量,此环境变量优先级较高导致在切换到JDK11后系统会先读取到JDK1.8生成环境变量而不会读取到JDK11的环......
  • WPF多语言支持:简单灵活的动态切换,让你的程序支持多国语言
     概述:本示例演示了在WPF应用程序中实现多语言支持的详细步骤。通过资源字典和数据绑定,以及使用语言管理器类,应用程序能够在运行时动态切换语言。这种方法使得多语言支持更加灵活,便于维护,同时提供清晰的代码结构。在WPF中实现多语言的一种常见方法是使用资源字典和数据绑定。......
  • Linux图形化界面怎么进入?CentOS 7图形界面切换
    CentOS 7默认只安装命令行界面。要切换到图形界面,需要先检查系统是否安装图形界面,在终端输入以下命令:systemctlget-default若是返回结果是“multi-user.target”表示系统没有安装图形界面;若是返回结果是“graphical.target“表示系统安装了图形界面。 另外如果你的Cent......
  • 当前上下文中不存在名称“InitializeComponent”
    使用VS(VisualStudio)编写C#.NET的WPF、Winform程序时,经常会遇到“当前上下文不存在initializecomponent”的提示,网上有很多种可能,我遇到的是如下解决办法( 怀疑是批量替换文件,或者修改文件名导致。):点击项目,删除如下内容: 或者注释掉:......
  • Smart IME 智能切换中文与英文输入法 - vscode插件推荐
    SmartIME智能切换中文与英文输入法-vscode插件推荐IDEA插件SmartInputVSCode插件SmartIME插件SmartIME本文是针对vscode插件,正常安装SmartIME,就自动安装另外2个插件了SmartIME需要安装IMEandCursor与HyperScopes插件。缺点vscode下,只能是中文......
  • 爬虫自动化之drissionpage实现随时切换代理ip
    爬虫自动化之drissionpage实现随时切换代理iphttps://blog.csdn.net/qq_32334103/article/details/126133862下载SwitchyOmega地址:https://github.com/FelisCatus/SwitchyOmega/releases  importplatformfromDrissionPageimportChromiumPage,ChromiumOptions......
  • CUDA和CUDNN版本切换
    0背景在用不同框架做深度学习时,难免会遇到需要不同版本的cuda和cudnn版本的情况,如果把原来版本的卸载掉重新安装新版本,则会影响其它框架的使用,最好的方法是在主机上安装多个版本的cuda和cudnn,需要用到哪种就切换到哪种,这样就免去了重复卸载安装的工作。cuda:由NVIDIA推出的通用......
  • Linux:VMware切换"仅主机模式"并配置静态IP
    配置网络编辑器点击“编辑”->“虚拟网络编辑器”没有仅主机模式的话,可以通过“添加网络”进行新增网络配置。更改虚拟机网路模式右键“创建的虚拟就”->“设置”登录虚拟机配置静态IP切换目录到“/etc/sysconfig/network-scripts/”修改“if-ens33”文件TYPE=Ethern......