###1、前言html
一、在perf监控进程的系统调用时,会出现大量swapper进程
二、官方描述该进程是当CPU上没有其余任务运行时,就会执行swapper。换句话说swapper意味着CPU啥事也没干,跑去休息去了
三、本文来观察一下swapper在cpu上的表现ubuntu
<br>api
###2、环境准备app
组件 | 版本 |
---|---|
OS | Ubuntu 16.04.4 LTS |
systemtap | version 4.2/0.165, commit release-4.1-41-g9cde541d4464 |
<br>工具
###3、准备脚本code
祭出咱们强有力的工具systemtap,这里须要注意的是,systemtap各版本之间有必定的差别,个人版本是在这里下载的:https://sourceware.org/systemtap/getinvolved.htmlhtm
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.htmlblog
脚本以下:进程
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并无运行任务get
###4、运行脚本
因为数据量太大,咱们筛选一部分:
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 ...
一、因为是4核的cpu,因此有4个swapper,swapper/n
二、swapper的进程号是0,在系统初始化时建立init进程,以后它就成了一个最低优先级的空闲任务
三、当swapper出如今左边的时候(即将离开cpu的进程),对应最后一个字段idle是1,这时候证实cpu上运行的swapper进程(CPU去闲散去了)
四、由此验证了,当cpu运行swapper进程的时候,实际上cpu是处于闲散的状态,并无任何真正的任务在上面运行,处于idle状态
<br>
至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...
原文出处:https://www.cnblogs.com/MrVolleyball/p/11606248.html