由多线程而涉及到的top命令使用与物理cpu的概念

来源:互联网 发布:bluehost域名绑定主机 编辑:程序博客网 时间:2024/06/12 20:36

前面我转过一篇关于用户级线程与内核级线程的三种模型,链接如下:
http://blog.csdn.net/baidu_24256693/article/details/43446763
那么问题来了,在linux系统下到底属于那种模型了?下面先看一段多线程的测试代码

#include<pthread.h>void tf(void *arg){        int j;        while(1)        {                j++;        }}int main(){        int i;        pthread_t tid1,tid2,tid3,tid4;        pthread_create(&tid1,NULL,tf,NULL);        pthread_create(&tid2,NULL,tf,NULL);        pthread_create(&tid3,NULL,tf,NULL);        while(1)        {                i++;        }        return 0;}

这四个线程均执行

while(1){  i++}

执行while会无线循环下去,下面我们用top命令来分析一下cpu的使用情况
执行top命令,然后按下1键就可一看到如下情况:
图9
可见四个线程每一个线程都是在一个cpu核上并行执行的,因为每一个核都由a.out程序占据了接近100%的cpu,所以我们可以看出linux上使用的是第二种模型即一个用户级线程和一个内核级线程一一对应。
为了看懂top的内容,下面补充讲解一下逻辑cpu和他top的用法:
物理cpu
实际插槽中cpu的个数,物理cpu可以数 /proc/cpuinfo中不重复的physical id有几个
例如执行命令#cat /proc/cpuinfo |grep “physical id”|sort |uniq|wc -l
图11
如图说明我的机器上只有一个物理cpu
cpu核
一般情况下,一颗cpu可以有多核,在/proc/cpuinfo中可以查看核的数量
执行如下命令:#cat /proc/cpuinfo |grep “cores”|uniq
图13
逻辑cpu
逻辑cpu数量=物理cpu数量xcpu核的数量x cpu cores x 2(如果支持并开启ht即因特尔超线程技术)
执行如下命令#cat /proc/cpuinfo |grep “processor”|wc -l
图12
综合上面三个图可知我的机器上有一个物理cpu,2个cpu核,4个逻辑cpu,说明我的机器上是开了intel超线程技术的。
当我们 cat /proc/cpuinfo 时、具有相同core id的CPU是同一个core的超线程,具有相同physical id的CPU是同一个CPU封装的线程或核心

下面简单的讲解一下top命令的使用
lxy
第一行:
15:30:11 当前系统时间
5:02 系统已经运行了5小时02分钟(在这期间没有重启过)
2 users 当前有2个用户登录系统
load average: 0.20, 0.23 ,0.23 load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第三行:
Tasks 任务(进程),系统现在共有198个进程,其中处于运行中的有1个,195个在休眠(sleep),stoped状态的有1个,zombie状态(僵尸)的有1个。

第四行:
cpu状态
5.1% us 用户空间占用CPU的百分比。
1.9% sy 内核空间占用CPU的百分比。
0.0% ni 改变过优先级的进程占用CPU的百分比
93% id 空闲CPU百分比0.0% wa IO等待占用CPU的百分比
0.0% hi 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si 软中断(Software Interrupts)占用CPU的百分比
0.0%st 流逝的时间(steal time)网上说是运行虚拟机时,执行其他任务的时间百分比,不太清楚

第五行:
内存状态
3877584k total 物理内存总量(约为4GB)
1744368k used 使用中的内存总量(约为1.75GB)
2133216k free 空闲内存总量(约为2.1G)
250276k buffers 缓存的内存量 (约为251M)

第六行:
swap交换分区
0k total 交换区总量
0k used 使用的交换区总量
00k free 空闲交换区总量
928272k cached 缓冲的交换区总量(928M)

第八行以下:
各进程(任务)的状态监控PID 进程id
USER 进程所有者
PR 进程优先级
NI nice值。负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RESRES 进程使用的、未被换出的物理内存大小,单位kb。
RES=CODE+DATASHR 共享内存大小,单位kbS 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比TIME+ 进程使用的CPU时间总计,单位1/100秒COMMAND 进程名称(命令名/命令行)

多核cpu监控
在top基本视图中,按键盘数字1,可监控每个逻辑CPU的状况:
这里写图片描述

敲击键盘b(打开/关闭加亮效果)
这里写图片描述
我们发现进程pid为5611的top进程和pid为5549的firefox进程被加亮了,top进程和firefox就是视图显示的运行态(runing)的那个进程,可以通过敲击y键关闭或打开运行态进程的加亮效果

0 0