CPU上下文切换以及相关指标的理解
前言
上下文切换这个词一直不理解,看了无数遍就忘了无数遍,知道看到《操作系统导论》这本书,终于有了略微的理解。这也证明了我的方向是没错的,一直认为做运维还是得理解底层的知识,不理解很多东西只是搬运工而已,比如监控做了无数遍,但是具体的监控指标理解吗,这个监控指标如何衡量系统的性能。
官方理解
1)操作系统要做的就是为当前正在执行的进程保存一些寄存器的值,并为即将执行的进程恢复一些寄存器的值,这样一来,操作系统就可以确保最后执行从陷阱返回指令时,不是返回到之前运行的进程而是继续执行另一个进程。
2)现在linux是基于抢占式,CPU给每个任务一定的服务时间,当时间片轮转的时候,需要把当前的状态保存下来,同时加载下一个任务,这个过程叫做上下文切换。时间片轮转的方式,使得多个任务利用一个CPU执行成为可能,但是保存现场和加载现场,也带来了性能消耗。
相关知识
1)虚拟化
为了虚拟化CPU,操作系统需要以某种方式让许多任务共享物理CPU,在他们看起来像是同时运行。基本的思路:运行一个进程一段时间,然后运行另一个进程,如此轮换,通过以这种方式时分共享CPU,实现了虚拟化。
2)时钟中断
时钟中断的目的是让CPU重新获取CPU的控制权,然后停止当前的进程,运行另一个进程。
因此,停止当前进程运行另一个进程时,需要保留当前进程的相关信息,并读取接下来将要运行的进程的相关信息,这样系统才知道需要运行哪一个进程,这种保存当前进程信息,以及读取下一个进程的相关信息叫做上下文切换。
自己理解
1)通俗易懂的讲法:每秒钟进程的切换次数
2)单位:ksps(千次每秒)
3)指标类型:性能指标
4)zabbix上的监控项:system.cpu.switches 每秒进程切换次数
相关监控项: system.cpu.intr 每秒时钟中断次数
时间中断的目的是为了进行进程切换,因此这两个监控线一般放在一起,时钟中断就是为了进程切换,但是每一次时钟中断不一定会切换进程
测试系统的上下文
1)工具lmbench
wget http://www.bitmover.com/lmbench/lmbench3.tar.gz tar -zxvf lmbench3.tar.gz cd src/ make results
2)可能会报错:
gmake[1]: Entering directory `/lmbeanch/lmbench3/src' gmake[1]: *** No rule to make target `../SCCS/s.ChangeSet', needed by `bk.ver'. Stop. gmake[1]: Leaving directory `/lmbeanch/lmbench3/src' make: *** [lmbench] Error 2
3)解决办法:
把src/Makefile文件的第231行的$O/lmbench : ../scripts/lmbench bk.ver 的 bk.ver 去掉为$O/lmbench : ../scripts/lmbench
4)使用
下篇博文专门总结。
版权声明:本文为lemon-le原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。