深入理解perf报告中的swapper进程
一、前言
1、在perf监控进程的系统调用时,会出现大量swapper进程
2、官方描述该进程是当CPU上没有其他任务运行时,就会执行swapper。换句话说swapper意味着CPU啥事也没干,跑去休息去了
3、本文来观察一下swapper在cpu上的表现

二、环境准备
| 组件 | 版本 |
|---|---|
| OS | Ubuntu 16.04.4 LTS |
| systemtap | version 4.2/0.165, commit release-4.1-41-g9cde541d4464 |
三、准备脚本
祭出我们强有力的工具systemtap,这里需要注意的是,systemtap各版本之间有一定的差异,我的版本是在这里下载的:https://sourceware.org/systemtap/getinvolved.html
root@wilson-ubuntu:/opt/stap# stap -V
Systemtap translator/driver (version 4.2/0.165, commit release-4.1-41-g9cde541d4464)
Copyright (C) 2005-2019 Red Hat, Inc. and others
This is free software; see the source for copying conditions.
tested kernel versions: 2.6.18 ... 5.1-rc2
enabled features: PYTHON3 NLS
确定好版本之后,编写一个脚本,主要用到probe::scheduler.cpu_off,https://sourceware.org/systemtap/tapsets/API-scheduler-cpu-off.html
脚本如下:
probe scheduler.cpu_off
{
printf("%20s (%5d) %5s %20s (%5d) , is idle:%d \n ", task_execname(task_prev),task_pid(task_prev),"==>",task_execname(task_next),task_pid(task_next),idle)
}
脚本非常简单,scheduler.cpu_off主要描述了进程离开CPU的状态:
task_prev:即将离开CPU的进程
task_next:即将进入CPU的进程
idle:cpu是否处于空闲,这个变量就是我们关注的重点,如果idle为1,那就证明CPU并没有运行任务
四、运行脚本
由于数据量太大,我们筛选一部分:
root@wilson-ubuntu:/opt/stap# stap switch.stp
...
swapper/0 ( 0) ==> stapio (29159) , is idle:1
stapio (29159) ==> swapper/0 ( 0) , is idle:0
swapper/0 ( 0) ==> rcu_sched ( 7) , is idle:1
rcu_sched ( 7) ==> swapper/0 ( 0) , is idle:0
swapper/2 ( 0) ==> irq/31-iwlwifi ( 542) , is idle:1
irq/31-iwlwifi ( 542) ==> swapper/2 ( 0) , is idle:0
swapper/2 ( 0) ==> irq/31-iwlwifi ( 542) , is idle:1
irq/31-iwlwifi ( 542) ==> swapper/2 ( 0) , is idle:0
swapper/2 ( 0) ==> irq/31-iwlwifi ( 542) , is idle:1
irq/31-iwlwifi ( 542) ==> swapper/2 ( 0) , is idle:0
swapper/2 ( 0) ==> irq/31-iwlwifi ( 542) , is idle:1
irq/31-iwlwifi ( 542) ==> swapper/2 ( 0) , is idle:0
swapper/0 ( 0) ==> rcu_sched ( 7) , is idle:1
rcu_sched ( 7) ==> swapper/0 ( 0) , is idle:0
swapper/2 ( 0) ==> irq/31-iwlwifi ( 542) , is idle:1
irq/31-iwlwifi ( 542) ==> swapper/2 ( 0) , is idle:0
swapper/2 ( 0) ==> irq/31-iwlwifi ( 542) , is idle:1
irq/31-iwlwifi ( 542) ==> swapper/2 ( 0) , is idle:0
swapper/0 ( 0) ==> rcu_sched ( 7) , is idle:1
swapper/1 ( 0) ==> stapio (29159) , is idle:1
...
1、由于是4核的cpu,所以有4个swapper,swapper/n
2、swapper的进程号是0,在系统初始化时创建init进程,之后它就成了一个最低优先级的空闲任务
3、当swapper出现在左边的时候(即将离开cpu的进程),对应最后一个字段idle是1,这时候证明cpu上运行的swapper进程(CPU去闲散去了)
4、由此验证了,当cpu运行swapper进程的时候,实际上cpu是处于闲散的状态,并没有任何真正的任务在上面运行,处于idle状态
至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...
深入理解perf报告中的swapper进程的更多相关文章
- AWR报告中Parse CPU to Parse Elapsd%的理解
AWR报告中Parse CPU to Parse Elapsd%的理解 原文自:http://dbua.iteye.com/blog/827243 Parse CPU to Parse Ela ...
- TFS在项目中DevOps落地进程(下)
紧接上篇 TFS在项目中Devops落地进程(上) 再接着说TFS相关之前先插入一个番外篇,虽然跟TFS关系不大但跟DevOps关系很大,觉得有必要在此乱入一下. 番外篇--监控之Applicatio ...
- 【转载】理解C语言中的关键字extern
原文:理解C语言中的关键字extern 最近写了一段C程序,编译时出现变量重复定义的错误,自己查看没发现错误.使用Google发现,自己对extern理解不透彻,我搜到了这篇文章,写得不错.我拙劣的翻 ...
- Oracle Statspack报告中各项指标含义详解~~学习性能必看!!!
Oracle Statspack报告中各项指标含义详解~~学习性能必看!!! Data Buffer Hit Ratio#<#90# 数据块在数据缓冲区中的命中率,通常应该在90%以上,否则考虑 ...
- 深入理解Java虚拟机--中
深入理解Java虚拟机--中 第6章 类文件结构 6.2 无关性的基石 无关性的基石:有许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码(ByteCode),从而 ...
- 转载 CSDN 谈谈我对证券公司一些部门的理解(前、中、后台)
谈谈我对证券公司一些部门的理解(前.中.后台) 2018年02月08日 15:11:07 unirong 阅读数:2165 文中对各大部门的分析都是从作者多年经历总结出来的有感之谈,尤其是前台的6 ...
- 理解 docker 容器中的 uid 和 gid
默认情况下,容器中的进程以 root 用户权限运行,并且这个 root 用户和宿主机中的 root 是同一个用户.听起来是不是很可怕,因为这就意味着一旦容器中的进程有了适当的机会,它就可以控制宿主机上 ...
- 第八周--Linux中进程调度与进程切换的过程
[潘恒 原创作品转载请注明出处 <Linux内核分析>MOOC课程 "http://mooc.study.163.com/course/USTC 1000029000 " ...
- Linux中的轻量级进程
在Linux中,轻量级进程可以是进程,也可以是线程.我们所说的线程,在Linux中,其实是轻量级进程之间共享代码段,文件描述符,信号处理,全局变量时: 如果不共享,就是我们所说的进程. 进程是资源管理 ...
随机推荐
- Spring框架入门之Spring4.0新特性——泛型注入
Spring框架入门之Spring4.0新特性——泛型注入 一.为了更加快捷的开发,为了更少的配置,特别是针对 Web 环境的开发,从 Spring 4.0 之后,Spring 引入了 泛型依赖注入. ...
- 【CocosBuilder】学习笔记目录
从2019年8月底开始学习CocosBuilder. CocosBuilder 学习笔记(1) CCBReader 解析.ccbi文件流程 CocosBuilder 学习笔记(2) .ccbi 文 ...
- 从零开始搭建Java开发环境第四篇:精选IDEA中十大提高开发效率的插件!
Lombok 知名的插件,无需再写那么多冗余的get/set代码 JRebel 热部署插件 alibaba java coding guide 阿里巴巴代码规范插件,自动检查代码规范问题 [在这里插入 ...
- 朋友聚会,下馆子要到哪家饭馆?——单样本T检验帮你找到答案
聚会时,五花八门的饭馆让人眼花缭乱,应该到哪家店吃呢?除了美味的食物,良好的服务态度也是好饭馆的必备品质,如何判断一家饭馆的服务态度如何?此时可以用单样本T检验来找答案~ 让顾客对A饭馆的服务态度 ...
- JAVA解除tomcat 对浏览器特别字符 | () {} [] 的限制
1.打开tomcat本机地址打开conf文件夹(一定要关闭Tomcat启动在修改) 2.记事本打开或者编辑软件打开(我这里推荐的编辑软件是以下如图) 打开进去加入这两行代码 3打开server.xml ...
- Codeforces 735D Taxes(简单数论)
题目链接 http://codeforces.com/problemset/problem/735/D 题意:一个人的收入为n他要交的税是n的最大除数,他为了少缴税将n分成k个数n1,n2,n2... ...
- Linux音频编程(一)ALSA介绍
Linux下的音频编程中有OSS和ALSA,本篇文章将对ALSA进行相关介绍.ALSA提供一系列基于命令行的工具集,比如混音器(mixer),音频文件播放器(aplay),以及控制特定声卡特定属性的工 ...
- poj 2352 & Ural 1028 数星星 题解
一道水题,由于x坐标递增y坐标也递增于是前缀和统计即可,用树状数组实现. #include<bits/stdc++.h> using namespace std; const int ma ...
- adb 端口冲突
第一种方法:可以设置另一个端口 第二种方法: http://blog.csdn.net/hwl1314/article/details/52538023 Android studio 5037端口被占 ...
- Linux开机启动过程(个人理解)
简述Linux启动过程 1)BIOS开机自检 2)MBR引导 3)启动引导程序菜单(GRUB) 4)加载内核 5)加载虚拟文件系统加载函数模块 6)启动系统进程 /sbin/init --->/ ...