CPU上下文切换以及相关指标的理解
2024-09-02 18:47:04
前言
上下文切换这个词一直不理解,看了无数遍就忘了无数遍,知道看到《操作系统导论》这本书,终于有了略微的理解。这也证明了我的方向是没错的,一直认为做运维还是得理解底层的知识,不理解很多东西只是搬运工而已,比如监控做了无数遍,但是具体的监控指标理解吗,这个监控指标如何衡量系统的性能。
官方理解
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)使用
下篇博文专门总结。
最新文章
- c#操作MangoDB 之MangoDB CSharp Driver驱动详解
- linux-dns服务器搭建
- ADO.NET 完整的修改和删除
- Eclipse Python配置
- fcitx-rime添加五笔/五笔拼音
- HDU4496_D-City(并查集删边/逆向)
- MYSQL 的 3 类数据类型
- U3D navmesh寻路简单示范
- hdu4126(最小生成树+dfs)
- flume+kafka+storm单机部署
- [error]configure: error: You need a C++ compiler for C++ support.
- HDFS的上传与下载(put &; get)
- VGG19模型训练+读取
- Nginx 如何通过连接池处理网络请求
- 「HNOI2016」最小公倍数 解题报告
- JDBC工具类
- String的实例化与static final修饰符
- 开发工具 -- Eclipse快捷键
- 使用Git上传代码到Github仓库
- sudo 和环境变量
热门文章
- mac OS 安装淘宝npm镜像
- 使用Xamarin开发即时通信系统 -- 基础篇(大量图文讲解 step by step,附源码下载)...
- Linux下进程的创建(system(); fork(); exec*())
- PHP版DES算法加密数据(3DES)另附openssl_encrypt版本
- 网课应该这么刷(油猴Tampermonkey脚本自动刷课)
- [CodeForces-259C] Little Elephant and Bits
- Face The Right Way 开关(POJ3276)
- CGI (通用网关接口)
- ztree根据参数动态控制是否显示复选框/单选框(静态JSON数据)
- Blazor入门:ASP.NET Core Razor 组件