CPU上下文切换以及相关Zabbix监控指标的理解(转)

前言

上下文切换这个词一直不理解,看了无数遍就忘了无数遍,知道看到《操作系统导论》这本书,终于有了略微的理解。这也证明了我的方向是没错的,一直认为做运维还是得理解底层的知识,不理解很多东西只是搬运工而已,比如监控做了无数遍,但是具体的监控指标理解吗,这个监控指标如何衡量系统的性能。

官方理解

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)使用

下篇博文专门总结。

猜你喜欢

转载自blog.csdn.net/ccpit2b2c/article/details/109326979