700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > linux /proc/stat 计算线程cpu Linux下用/proc/stat文件来计算cpu的利用率(附源码)

linux /proc/stat 计算线程cpu Linux下用/proc/stat文件来计算cpu的利用率(附源码)

时间:2024-02-29 17:18:40

相关推荐

linux /proc/stat 计算线程cpu Linux下用/proc/stat文件来计算cpu的利用率(附源码)

总的Cpu使用率计算

计算方法:

1、采样两个足够短的时间间隔的Cpu快照,分别记作t1,t2,其中t1、t2的结构均为:

(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;

2、计算总的Cpu时间片totalCpuTime

a)把第一次的所有cpu使用情况求和,得到s1;

b)把第二次的所有cpu使用情况求和,得到s2;

c)s2 - s1得到这个时间间隔内的所有时间片,即totalCpuTime = j2 - j1 ;

3、计算空闲时间idle

idle对应第四列的数据,用第二次的idle - 第一次的idle即可

idle=第二次的idle - 第一次的idle

4、计算cpu使用率

pcpu =100* (total-idle)/total

5、同理可以用同样的方法求出其他进程和线程所占cpu资源

源码

#include

#include

#include

#define __DEBUG__ 1

#define CK_TIME 1

int main(int argc ,char *argv[])

{

FILE *fp;

char buf[128];

char cpu[5];

long int user,nice,sys,idle,iowait,irq,softirq;

long int all1,all2,idle1,idle2;

float usage;

while(1)

{

fp = fopen("/proc/stat","r");

if(fp == NULL)

{

perror("fopen:");

exit (0);

}

fgets(buf,sizeof(buf),fp);

#if __DEBUG__

printf("buf=%s",buf);

#endif

sscanf(buf,"%s%d%d%d%d%d%d%d",cpu,&user,&nice,&sys,&idle,&iowait,&irq,&softirq);

/*

#if __DEBUG__

printf("%s,%d,%d,%d,%d,%d,%d,%d\n",cpu,user,nice,sys,idle,iowait,irq,softirq);

#endif

*/

all1 = user+nice+sys+idle+iowait+irq+softirq;

idle1 = idle;

rewind(fp);

/*第二次取数据*/

sleep(CK_TIME);

memset(buf,0,sizeof(buf));

cpu[0] = '\0';

user=nice=sys=idle=iowait=irq=softirq=0;

fgets(buf,sizeof(buf),fp);

#if __DEBUG__

printf("buf=%s",buf);

#endif

sscanf(buf,"%s%d%d%d%d%d%d%d",cpu,&user,&nice,&sys,&idle,&iowait,&irq,&softirq);

/*

#if __DEBUG__

printf("%s,%d,%d,%d,%d,%d,%d,%d\n",cpu,user,nice,sys,idle,iowait,irq,softirq);

#endif

*/

all2 = user+nice+sys+idle+iowait+irq+softirq;

idle2 = idle;

usage = (float)(all2-all1-(idle2-idle1)) / (all2-all1)*100 ;

printf("all=%d\n",all2-all1);

printf("ilde=%d\n",all2-all1-(idle2-idle1));

printf("cpu use = %.2f\%\n",usage);

printf("=======================\n");

fclose(fp);

}

return 1;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。