《liNUX学习:CentOS系统 上下文切换的检查思路》要点:@H_403_2@
本文介绍了liNUX学习:CentOS系统 上下文切换的检查思路,希望对您有用。如果有疑问,可以联系我们。
上下文切换,有时也称做进程切换或任务切换,是指cpu从一个进程或线程切换到另一个进程或线程.
*** 作系统可以同时运行多个进程,然而一颗cpu同时只能执行一项任务, *** 作系统利用时间片轮转的方式,让用户感觉这些任务正在同时进行. cpu给每个任务都服务一定的时间,然后把当前任务的状态保留下来,在加载下一任务的状态后,继续服务下一任务.任务的状态保留及再加载,这段过程就叫做上下文切换.
2.上下文切换的消耗?当一个进程在执行时,cpu的所有寄存器中的值、进程的状态以及堆栈中的内容被称 为该进程的上下文.当内核需要切换到另一个进程时,它需要保留当前进程的 所有状态,即保留当前进程的上下文,以便在再次执行该进程时,能够必得到切换时的状态执行下去.在liNUX中,当前进程上下文均保留在进程的任务数据结 构中.在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程.但同时会保留所有需要用到的资源,以便中继服务结束时能恢复被中断进程 的执行.
直接消耗包含: cpu寄存器需要保存和加载,系统调度器的代码需要执行,TLB实例需要重新加载,cpu 的pipeline需要刷掉.
间接消耗:多核的cache之间得共享数据,间接消耗对于法式的影响要看线程工作区 *** 作数据的大小.
上下文切换通常是计算密集型的.也就是说,它必要相当可观的处理器时间,在每秒几十上百次的切换中,每次切换都必要纳秒量级的时间.所以,上下文切换对系统来说意味着消耗大量的 cpu 时间,事实上,可能是 *** 作系统中时间消耗最大的 *** 作.
3.如何检查上下文切换是否频繁?(1)确认cpu使用率
cpu是否处于空闲状态.
(2)vmstat 1
从vmstat的输出可以看到,io项的block_in和block_out是否频繁,system项的每秒中断数(in)和每秒的上下文切换(cs)是否频繁.
(3)pIDstat -w 1
从pIDstat上可以看到,每个进程对应的cswch(自愿上下文切换)和nvcswch(非自愿上下文切换)是否频繁.
cswch/s: 每秒任务主动(自愿的)切换上下文的次数,当某一任务处于阻塞等待时,将主动让出本身的cpu资源.
nvcswch/s: 每秒任务被动(不自愿的)切换上下文的次数,cpu分配给某一任务的时间片已经用完,因此将强迫该进程让出cpu的执行权.
(4)/proc/stat
/proc/stat包括了cpu的活动信息,上下文切换就是其中一项,以ctxt开头,它表示系统开机到目前为止的上下文切换总数.
cat /proc/stat | grep ctxt && sleep 30 && cat /proc/stat | grep ctxt
通过上面的命令,可以计算出每秒上下文切换次数=两者差值/30
通过以上命令即可以定位那个进程上下文切换频繁.
4.造成上下文切换频繁的原因?当前执行任务的时间片用完之后,系统cpu正常调剂下一个任务当前执行任务碰到IO阻塞,调剂器将挂起此任务,继续下一任务多个任务抢占锁资源,当前任务没有抢到,被调剂器挂起,继续下一任务用户代码挂起当前任务,让出cpu时间硬件中断本文永久更新链接地址@H_403_2@:
学习更多liNUX教程,请查看站内专栏,如果有liNUX疑问,可以加QQ交流《liNUX学习:CentOS系统 上下文切换的检查思路》。
总结以上是内存溢出为你收集整理的LINUX学习:CentOS系统 上下文切换的检查思路全部内容,希望文章能够帮你解决LINUX学习:CentOS系统 上下文切换的检查思路所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)