前言

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

官方理解

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[]: Entering directory `/lmbeanch/lmbench3/src'
gmake[]: *** No rule to make target `../SCCS/s.ChangeSet', needed by `bk.ver'. Stop.
gmake[]: Leaving directory `/lmbeanch/lmbench3/src'
make: *** [lmbench] Error

3)解决办法:

把src/Makefile文件的第231行的$O/lmbench : ../scripts/lmbench  bk.ver  的 bk.ver 去掉为$O/lmbench : ../scripts/lmbench

4)使用

下篇博文专门总结。

最新文章

  1. c#操作MangoDB 之MangoDB CSharp Driver驱动详解
  2. linux-dns服务器搭建
  3. ADO.NET 完整的修改和删除
  4. Eclipse Python配置
  5. fcitx-rime添加五笔/五笔拼音
  6. HDU4496_D-City(并查集删边/逆向)
  7. MYSQL 的 3 类数据类型
  8. U3D navmesh寻路简单示范
  9. hdu4126(最小生成树+dfs)
  10. flume+kafka+storm单机部署
  11. [error]configure: error: You need a C++ compiler for C++ support.
  12. HDFS的上传与下载(put & get)
  13. VGG19模型训练+读取
  14. Nginx 如何通过连接池处理网络请求
  15. 「HNOI2016」最小公倍数 解题报告
  16. JDBC工具类
  17. String的实例化与static final修饰符
  18. 开发工具 -- Eclipse快捷键
  19. 使用Git上传代码到Github仓库
  20. sudo 和环境变量

热门文章

  1. mac OS 安装淘宝npm镜像
  2. 使用Xamarin开发即时通信系统 -- 基础篇(大量图文讲解 step by step,附源码下载)...
  3. Linux下进程的创建(system(); fork(); exec*())
  4. PHP版DES算法加密数据(3DES)另附openssl_encrypt版本
  5. 网课应该这么刷(油猴Tampermonkey脚本自动刷课)
  6. [CodeForces-259C] Little Elephant and Bits
  7. Face The Right Way 开关(POJ3276)
  8. CGI (通用网关接口)
  9. ztree根据参数动态控制是否显示复选框/单选框(静态JSON数据)
  10. Blazor入门:ASP.NET Core Razor 组件