广告

Centos系统上下文切换的检查思路

2023-11-22

1.什么是上下文切换(Context Switch)?

上下文切换,有时也称做进程切换或任务切换,是指CPU从一个进程或线程切换到另一个进程或线程。

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

当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称 为该进程的上下文。当内核需要切换到另一个进程时,它需要保存当前进程的 所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够必得到切换时的状态执行下去。在LINUX中,当前进程上下文均保存在进程的任务数据结 构中。在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程。但同时会保留所有需要用到的资源,以便中继服务结束时能恢复被中断进程 的执行。

 

2.上下文切换的消耗?

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

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

上下文切换通常是计算密集型的。也就是说,它需要相当可观的处理器时间,在每秒几十上百次的切换中,每次切换都需要纳秒量级的时间。所以,上下文切换对系统来说意味着消耗大量的 CPU 时间,事实上,可能是操作系统中时间消耗最大的操作。

3.如何检查上下文切换是否频繁?

(1)确认CPU使用率

确认CPU使用率

CPU是否处于空闲状态。

(2)vmstat 1

CPU是否处于空闲状态。

从vmstat的输出可以看到,io项的block_in和block_out是否频繁,system项的每秒中断数(in)和每秒的上下文切换(cs)是否频繁。

(3)

pidstat -w 1

每个进程对应的cswch(自愿上下文切换)和nvcswch(非自愿上下文切换)是否频繁


从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时间

硬件中断

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。本站原创内容未经允许不得转载,或转载时需注明出处!

上一篇:Windows 2003系统如何取消登入时按Ctrl Alt Del

下一篇:如何解决windows10系统右键没有新建文本文档的问题

这条帮助是否解决了您的问题?已解决未解决

提交成功!非常感谢您的反馈,我们会继续努力做到更好!很抱歉未能解决您的疑问。我们已收到您的反馈意见,同时会及时作出反馈处理!

立即注册91VPS账号,免费体验多款产品
立即注册
联系我们
全国咨询热线:
0712-5319406
QQ客服:
800193021
91VPS微信客服

扫码联系微信客服