参考:http://www.blogjava.net/fjzag/articles/317773.html

基于目前正在开发的手机

proc伪文件系统

/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提交的。

/proc目录中有一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程在/proc下都对应一个以进程号为目录名的目录/proc/pid,它们是读取进程信息的接口。此外,在Linux 2.6.0-test6以上的版本中/proc/pid目录中有一个task目录,/proc/pid/task目录中也有一些以该进程所拥有的线程的线程号命名的目录/proc/pid/task/tid,它们是读取线程信息的接口。

proc/stat

该文件中的所有值都是系统启动至今的数据,不同内核版本时间单位可能不同

cat stat
cpu  69904 21104 138494 23477594 1232 0 317 0 0 0
cpu0 28792 2066 56307 2858036 131 0 125 0 0 0
cpu1 27146 1804 51688 2860147 84 0 15 0 0 0
cpu2 5561 1066 10786 2943586 87 0 105 0 0 0
cpu3 4716 642 7122 2951398 35 0 6 0 0 0
cpu4 2109 9525 8942 2952628 626 0 40 0 0 0
cpu5 916 2241 2465 2968654 145 0 10 0 0 0
cpu6 361 1950 682 2971229 62 0 8 0 0 0
cpu7 300 1808 501 2971912 60 0 6 0 0 0
intr 10805705 0 3500279 5996187 0 0 1 18 54 973 26755 0 0 115777 0 5 31482 0 0 0 0 77498 0 22550 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4610 0 0 0 0 0 0 0 0 0 0 0 0 27384 0 0 2965 2947 0 17 1 0 0 1 0 1 270 0 0 6 10 249 0 0 0 0 0 0 0
ctxt 7732037
btime 1325375998
processes 28877
procs_running 1
procs_blocked 0
softirq 5725677 1 2134789 0 0 0 0 74120 1979642 0 1537125

cpu  69904 21104 138494 23477594 1232 0 317 0 0 0

是CPU总的使用情况:

进程的nice,进程的nice值一般是-20~19,他影响的是cpu分配给进程的时间片

对nice值一个形象比喻,假设在一个CPU轮转中,有2个runnable的进程A和B,如果他们的nice值都为0,假设内核会给他们每人分配1k个cpu时间片。但是假设进程A的为0,但是B的值为-10,那么此时CPU可能分别给A和B分配1k和1.5k的时间片。故可以形象的理解为,nice的值影响了内核分配给进程的cpu时间片的多少,时间片越多的进程,其优先级越高

参数:                            解析

(jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间)类似time_in_stat里面的时间取的是10ms

user:69904                                处于用户态的运行时间,不包含nice值为负的进程

nice:21104                                nice值为负的进程所占用的CPU时间

system:138494                        核心态(内核态)的运行时间

idle:23477594                           除I/O等待时间以外的其他等待时间

iowait:1232                                IO等待时间(since 2.5.41之后加入)

irq:0                                              硬中断时间

softirq:317                                       软中断的时间

stealstolen:0                                which is the time spent in other operating systems when running in a virtualized environment(since 2.6.11)

guest:0                                              which is the time spent running a virtual  CPU  for  guest operating systems under the control of the Linux kernel(since 2.6.24)

至于这个结论,我不是很赞同啊

总的cpu时间totalCpuTime = user + nice + system + idle + iowait + irq + softirq + stealstolen  +  guest

下面是根据上面的内容计算出的cpu的使用率

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/time.h>#include "cpu_loading.h"static si get_argv(char *time_char)
{char *ch = time_char;si ret = 0;if( *ch == '0'){fprintf(stderr, "interval should not be zero\n");return INVALID_ARGV;}for(ch=time_char; *ch; ch++){if( *ch == '-' || !(*ch >= '0' || *ch <= '9')){fprintf(stderr, "please input the correct argv time(no negative)\n");return INVALID_ARGV;}ret = ret*10+(*ch-'0');}return ret;
}static s8 get_init_freq_count(const char *cpu_cur_path, u8 *size, ui *cpu_available_freq)
{FILE   *fp = NULL;fp = fopen(cpu_cur_path, "r");u8 i = 0;if(fp==NULL){fprintf(stderr, "failed opend file:", cpu_cur_path);return INVALID_ARGV;}// even freq   // odd countfor(i=0; i<MAX_AVALLABLE_FREQ; i=i+2){cpu_available_freq[i+1] = 0;if(fscanf(fp,"%d", cpu_available_freq+i)!=1)break;}*size = i;fclose(fp);return 0;
}static void debug_cpufreq_count(u8 cpu0_size,  ui *cpu0_available_freq,
u8 cpu4_size, ui *cpu4_available_freq)
{u8 i = 0;for(i=0;i<cpu0_size; i=i+2){printf("%d\t%d\n", cpu0_available_freq[i], cpu0_available_freq[i+1]);}printf("\n");for(i=0;i<cpu4_size; i=i+2){printf("%d\t%d\n", cpu4_available_freq[i], cpu4_available_freq[i+1]);}
}static s8 calculate_freq_percent(const u8 cpu_size,  ui *cpu_available_freq, ui total_count, char *file_path)
{u8 i = 0;FILE *fp = NULL;fp = fopen(file_path, "r");ui cur_cpu = 0;if(fp==NULL){fprintf(stderr, "", file_path);return FAILED_OPEN_FILE;}while(fscanf(fp,"%d", &cur_cpu)==1){for(i=0;i<cpu_size; i=i+2){if(cur_cpu==cpu_available_freq[i]){cpu_available_freq[i+1]++;break;}}}fclose(fp);return 0;
}static s8 statistic_cpu_stat(const char *stat_path, ui count)
{FILE *fp = NULL;FILE *fp_cpu = NULL;char cpu_stat[BUFFER_SIZE];char *result_stat;u8 i = 0;fp = fopen(stat_path, "r");if(fp==NULL){fprintf(stderr, "failed opend file:\n", stat_path);return INVALID_ARGV;}if(count%2==0){fp_cpu = fopen(START_STAT,"a");}else{fp_cpu = fopen(END_STAT,"a");}if(fp_cpu==NULL){fprintf(stderr, "failed opend file:\n");return INVALID_ARGV;}fgets(cpu_stat, BUFFER_SIZE, fp);while(fgets(cpu_stat, BUFFER_SIZE, fp)&&i<8){result_stat = cpu_stat+3;fprintf(fp_cpu, "%s", result_stat);i++;}fclose(fp);fclose(fp_cpu);return 0;
}static s8 store_cpu_freq(ui cur_freq, char *file_path)
{FILE *fp = NULL;fp = fopen(file_path, "a");if(fp==NULL){fprintf(stderr, "failed opend file:\n", file_path);return FAILED_OPEN_FILE;}fprintf(fp, "%d\n", cur_freq);fclose(fp);return 0;
}static ui get_store_cur_freq(const char *file_path, char *store_path)
{FILE   *fp = NULL;ui cur_cpu_freq = 0;fp = fopen(file_path, "r");if(fp==NULL){fprintf(stderr, "failed opend file:\n", file_path);return INVALID_ARGV;}fscanf(fp, "%d", &cur_cpu_freq);fclose(fp);store_cpu_freq(cur_cpu_freq, store_path);return 0;
}static void clear_envirment()
{remove(LITTLE_CORE);remove(BIG_CORE);remove(START_STAT);remove(END_STAT);
}
static s8 data_simpling(si accummulate_time, si interval, ui total_count)
{   struct timeval start, end;float timeuse = 0.0;ui    count = 0;u8 i = 0;gettimeofday(&start, NULL);while(count<total_count){get_store_cur_freq(CPU0_CUR_FREQ_PATH, LITTLE_CORE);get_store_cur_freq(CPU4_CUR_FREQ_PATH, BIG_CORE);statistic_cpu_stat(PROC_CPU_STAT, count);usleep(100000);count++;}gettimeofday(&end, NULL);timeuse = (1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec)/1000.0;printf("time_use is %.2f\n", timeuse);}static s8 compute_cpu_loading(char *start_file, char *end_file, float *pcpu_set)
{FILE *fp_start, *fp_end;ui start_buffer[BUFFER_SIZE], end_buffer[BUFFER_SIZE];memset(start_buffer, 0, BUFFER_SIZE);memset(end_buffer, 0, BUFFER_SIZE);u8 i = 0, cpu_id, j;const u8 cpu_consist = 11;uli  total_time = 0;ui   idle_time = 0, set = 0;float pcpu = 0.0;fp_start = fopen(start_file, "r");if(fp_start==NULL){fprintf(stderr, "failed opend file", start_file);return FAILED_OPEN_FILE;}fp_end = fopen(end_file, "r");if(fp_end==NULL){fprintf(stderr, "failed opend file", end_file);return FAILED_OPEN_FILE;}while(fscanf(fp_start, "%d", start_buffer+i)==1 &&fscanf(fp_end, "%d", end_buffer+i)==1){if(i==0){cpu_id = start_buffer[i];}ui minus = end_buffer[i]-start_buffer[i];total_time+=minus;if(i==4){idle_time = minus;//printf("%d\t%d\t%d\t%d\n", end_buffer[i], start_buffer[i], idle_time, total_time);}i++;if(i==cpu_consist){set++;pcpu = ((total_time-idle_time)*1.0/total_time);//printf("%d\t%f\n", cpu_id, pcpu);pcpu_set[cpu_id]+=pcpu;i=0;total_time = 0;memset(start_buffer, 0, BUFFER_SIZE);}}set/=8;for(i=0;i<=cpu_id; i++){pcpu_set[i] /=set;printf("cpu%d is %f\n", i, pcpu_set[i]);}fclose(fp_start);fclose(fp_end);return 0;
}int main(int argc, char *argv[])
{si   interval , accummulate_time = 0;ui   cpu0_freq , cpu4_freq = 0;ui    total_count = 0;u8     cpu0_size, cpu4_size, i , j ;ui     cpu0_available_freq[MAX_AVALLABLE_FREQ], cpu4_available_freq[MAX_AVALLABLE_FREQ];float pcpu_set[BUFFER_SIZE];// input argc less than 1if( argc < 1 ){fprintf(stderr, "you must input two argv");fprintf(stderr, "first: cal cpu loading tool \n");fprintf(stderr, "secn: interval time(default:100ms) \n");fprintf(stderr, "expl: ./data/cpu_loading 100\n");return INVALID_ARGV;}// input argc 1if(argc==1){interval = 100;accummulate_time = 60;// input argc 2}else if(argc==2){interval = get_argv(argv[1]);if(interval<0){return INVALID_ARGV;}accummulate_time = 60;// input argc 3}else{interval = get_argv(argv[1]);if(interval<0){return INVALID_ARGV;}accummulate_time = get_argv(argv[2]);if(accummulate_time<0){return INVALID_ARGV;}}printf("interval is %d\n", interval);printf("accummulate_time is %d\n", accummulate_time);get_init_freq_count(CPU0_AVAILABLE_FREQ_PATH, &cpu0_size, cpu0_available_freq);get_init_freq_count(CPU4_AVAILABLE_FREQ_PATH, &cpu4_size, cpu4_available_freq);// debug//debug_cpufreq_count(cpu0_size, cpu0_available_freq ,cpu4_size, cpu4_available_freq);total_count = (accummulate_time*1000)/interval;clear_envirment();// data cimplingdata_simpling(accummulate_time, interval, total_count);calculate_freq_percent(cpu0_size, cpu0_available_freq, total_count, LITTLE_CORE);calculate_freq_percent(cpu4_size, cpu4_available_freq, total_count, BIG_CORE);// debugdebug_cpufreq_count(cpu0_size, cpu0_available_freq ,cpu4_size, cpu4_available_freq);// compute pcpuxcompute_cpu_loading(START_STAT, END_STAT, pcpu_set);// show resultfor(i=0; i<cpu0_size; i=i+2){if(i==0)printf("\t");printf("%d\t", cpu0_available_freq[i]);if(i==cpu0_size-2)printf("\n");}for(i=0; i<cpu0_size; i=i+2){if(i==0)printf("little\t");printf("%.3f%\t", cpu0_available_freq[i+1]*1.0/total_count*100);if(i==cpu0_size-2)printf("\n");}for(i=0;i<4;i++){printf("cpu%d\t", i);for(j=0;j<cpu0_size;j=j+2){printf("%.3f%\t", (cpu0_available_freq[j+1]*1.0/total_count)*100*pcpu_set[i]);}printf("\n");}printf("\n");for(i=0; i<cpu4_size; i=i+2){if(i==0)printf("\t");printf("%d\t", cpu4_available_freq[i]);if(i==cpu4_size-2)printf("\n");}for(i=0; i<cpu4_size; i=i+2){if(i==0)printf("big\t");printf("%.3f%\t", cpu4_available_freq[i+1]*1.0/total_count*100);if(i==cpu4_size-2)printf("\n");}for(i=4;i<8;i++){printf("cpu%d\t", i);for(j=0;j<cpu4_size;j=j+2){printf("%.3f%\t", (cpu4_available_freq[j+1]*1.0/total_count)*100*pcpu_set[i]);}printf("\n");}return 0;
}

其中头文件的定义如下:

#define INVALID_ARGV     -1
#define FAILED_OPEN_FILE    -2
#define MAX_AVALLABLE_FREQ  40
#define BUFFER_SIZE         512#define CPU0_CUR_FREQ_PATH           "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"
#define CPU4_CUR_FREQ_PATH          "/sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq"
#define CPU0_AVAILABLE_FREQ_PATH    "/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies"
#define CPU4_AVAILABLE_FREQ_PATH    "/sys/devices/system/cpu/cpu4/cpufreq/scaling_available_frequencies"
#define PROC_CPU_STAT               "/proc/stat"
#define LITTLE_CORE                 "/sdcard/little_core"
#define BIG_CORE                    "/sdcard/big_core"
#define START_STAT                  "/sdcard/stat_start.txt"
#define END_STAT                    "/sdcard/stat_end.txt"typedef signed      int    si;
typedef signed      char   s8;
typedef unsigned    char   u8;
typedef unsigned    int    ui;
typedef unsigned long int  uli;

运行结果如下:

从另一个维度计算cpu_loading,简称

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/time.h>#include "cpu_loading.h"static void debug_cpufreq_count(u8 cpu0_size,  ui *cpu0_available_freq,
u8 cpu4_size, ui *cpu4_available_freq, ui total_count)
{u8 i = 0;for(i=0;i<cpu0_size; i=i+2){printf("%d\t%.2f%\n", cpu0_available_freq[i], cpu0_available_freq[i+1]*1.0/total_count*100);}printf("\n");for(i=0;i<cpu4_size; i=i+2){printf("%d\t%.2f%\n", cpu4_available_freq[i], cpu4_available_freq[i+1]*1.0/total_count*100);}
}static si get_argv(char *time_char)
{char *ch = time_char;si ret = 0;if( *ch == '0'){fprintf(stderr, "interval should not be zero\n");return INVALID_ARGV;}for(ch=time_char; *ch; ch++){if( *ch == '-' || !(*ch >= '0' || *ch <= '9')){fprintf(stderr, "please input the correct argv time(no negative)\n");return INVALID_ARGV;}ret = ret*10+(*ch-'0');}return ret;
}static s8 get_init_freq_count(const char *cpu_cur_path, u8 *size, ui *cpu_available_freq)
{FILE   *fp = NULL;fp = fopen(cpu_cur_path, "r");u8 i = 0;if(fp==NULL){fprintf(stderr, "failed opend file:", cpu_cur_path);return INVALID_ARGV;}// even freq   // odd countfor(i=0; i<MAX_AVALLABLE_FREQ; i=i+2){cpu_available_freq[i+1] = 0;if(fscanf(fp,"%d", cpu_available_freq+i)!=1)break;}*size = i;fclose(fp);return 0;
}static void clear_envirment()
{remove(LITTLE_CORE);remove(BIG_CORE);remove(START_STAT);remove(END_STAT);remove(PCPU_PATH);
}static s8 statistic_cpu_stat(const char *stat_path, ui count)
{FILE *fp = NULL;FILE *fp_cpu = NULL;char cpu_stat[BUFFER_SIZE];char *result_stat;u8 i = 0;fp = fopen(stat_path, "r");if(fp==NULL){fprintf(stderr, "failed opend file:\n", stat_path);return INVALID_ARGV;}if(count%2==0){fp_cpu = fopen(START_STAT,"a");}else{fp_cpu = fopen(END_STAT,"a");}if(fp_cpu==NULL){fprintf(stderr, "failed opend file:\n");return INVALID_ARGV;}// aband sum pcpu fgets(cpu_stat, BUFFER_SIZE, fp);while(fgets(cpu_stat, BUFFER_SIZE, fp)&&i<8){result_stat = cpu_stat+3;fprintf(fp_cpu, "%s", result_stat);i++;}fclose(fp);fclose(fp_cpu);return 0;
}static s8 store_cpu_freq(ui cur_freq, char *file_path)
{FILE *fp = NULL;fp = fopen(file_path, "a");if(fp==NULL){fprintf(stderr, "failed opend file:\n", file_path);return FAILED_OPEN_FILE;}fprintf(fp, "%d\n", cur_freq);fclose(fp);return 0;
}static ui get_store_cur_freq(const char *file_path, char *store_path)
{FILE   *fp = NULL;ui cur_cpu_freq = 0;fp = fopen(file_path, "r");if(fp==NULL){fprintf(stderr, "failed opend file:\n", file_path);return INVALID_ARGV;}fscanf(fp, "%d", &cur_cpu_freq);fclose(fp);store_cpu_freq(cur_cpu_freq, store_path);return 0;
}static s8 data_simpling(si accummulate_time, si interval, ui total_count)
{   struct timeval start, end;float timeuse = 0.0;ui    count = 0;u8 i = 0;gettimeofday(&start, NULL);while(count<total_count){get_store_cur_freq(CPU0_CUR_FREQ_PATH, LITTLE_CORE);get_store_cur_freq(CPU4_CUR_FREQ_PATH, BIG_CORE);statistic_cpu_stat(PROC_CPU_STAT, count);usleep(interval*1000);count++;}gettimeofday(&end, NULL);timeuse = (1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec)/1000.0;printf("time_use is %.2f\n", timeuse);}static s8 store_pcpu(u8 cpu_id,  float pcpu)
{FILE *fp = NULL;fp = fopen(PCPU_PATH, "a");if(fp==NULL){fprintf(stderr, "failed opend file:\n", PCPU_PATH);return FAILED_OPEN_FILE;}fprintf(fp, "%f\n",  pcpu);fclose(fp);return 0;
}static si compute_cpu_loading_freq(char *start_file, char *end_file, float *pcpu_set)
{FILE *fp_start, *fp_end;ui start_buffer[BUFFER_SIZE], end_buffer[BUFFER_SIZE];memset(start_buffer, 0, BUFFER_SIZE);memset(end_buffer, 0, BUFFER_SIZE);u8 i = 0, cpu_id, j;const u8 cpu_consist = 11;uli  total_time = 0;ui   idle_time = 0, set = 0;float pcpu = 0.0;fp_start = fopen(start_file, "r");if(fp_start==NULL){fprintf(stderr, "failed opend file", start_file);return FAILED_OPEN_FILE;}fp_end = fopen(end_file, "r");if(fp_end==NULL){fprintf(stderr, "failed opend file", end_file);return FAILED_OPEN_FILE;}while(fscanf(fp_start, "%d", start_buffer+i)==1 &&fscanf(fp_end, "%d", end_buffer+i)==1){if(i==0){cpu_id = start_buffer[i];}ui minus = end_buffer[i]-start_buffer[i];total_time+=minus;if(i==4){idle_time = minus;//printf("%d\t%d\t%d\t%d\n", end_buffer[i], start_buffer[i], idle_time, total_time);}i++;if(i==cpu_consist){set++;pcpu = ((total_time-idle_time)*1.0/total_time);store_pcpu(cpu_id, pcpu);pcpu_set[cpu_id]+=pcpu;i=0;total_time = 0;memset(start_buffer, 0, BUFFER_SIZE);}}set/=8;fclose(fp_start);fclose(fp_end);return set;
}static s8 calculate_freq_percent(const u8 cpu0_size,  ui *cpu0_available_freq,
ui total_count, const u8 cpu4_size,  ui *cpu4_available_freq, si set_group)
{u8 i = 0, k;ui j = 0;FILE *fp_cpu0 = NULL;FILE *fp_cpu4 = NULL;FILE *fp_stat = NULL;ui cpu0_cur_cpu, cpu4_cur_cpu;float pcpu[BUFFER_SIZE];float pcpu_per[MAX_AVALLABLE_FREQ][BUFFER_SIZE*10];ui   pcpu_per_count[MAX_AVALLABLE_FREQ][BUFFER_SIZE*10];fp_cpu0 = fopen(LITTLE_CORE, "r");if(fp_cpu0==NULL){fprintf(stderr, "", LITTLE_CORE);return FAILED_OPEN_FILE;}fp_cpu4 =fopen(BIG_CORE, "r");if(fp_cpu4==NULL){fprintf(stderr, "", BIG_CORE);return FAILED_OPEN_FILE;}fp_stat = fopen(PCPU_PATH, "r");if(fp_stat==NULL){fprintf(stderr, "", PCPU_PATH);return FAILED_OPEN_FILE;}while(fscanf(fp_cpu0,"%d", &cpu0_cur_cpu)==1&&fscanf(fp_cpu4,"%d", &cpu4_cur_cpu)==1){for(i=0;i<cpu0_size; i=i+2){if(cpu0_cur_cpu==cpu0_available_freq[i]){cpu0_available_freq[i+1]++;break;}}    for(i=0;i<cpu4_size; i=i+2){if(cpu4_cur_cpu==cpu4_available_freq[i]){cpu4_available_freq[i+1]++;break;}}if(j%2==1){i=0;while(fscanf(fp_stat, "%f", pcpu+i)==1){pcpu_per[i][cpu0_cur_cpu/1000]+=pcpu[i];pcpu_per_count[i][cpu0_cur_cpu/1000]++;//printf("%d\t%d\t%f\t%d\n", i, cpu0_cur_cpu, pcpu[i], pcpu_per_count[i][cpu0_cur_cpu/1000]);i++;if(i>3){break;}}while(fscanf(fp_stat, "%f", pcpu+i)==1){pcpu_per[i][cpu4_cur_cpu/1000]+=pcpu[i];pcpu_per_count[i][cpu4_cur_cpu/1000]++;//printf("%d\t%d\t%.2f\t%d\n", i, cpu4_cur_cpu, pcpu[i],pcpu_per_count[i][cpu4_cur_cpu/1000]);i++;if(i>7){break;}}}j++;}fclose(fp_cpu0);fclose(fp_stat);for(j=0;j<cpu0_size;j=j+2){if(j==0)printf("   \t");printf("%d\t", cpu0_available_freq[j]);if(j==cpu0_size-2)printf("\n");}for(i=0;i<4;i++){printf("%d\t", i);for(j=0;j<cpu0_size;j=j+2){if(pcpu_per_count[i][cpu0_available_freq[j]/1000]!=0){printf("%.2f%\t", pcpu_per[i][cpu0_available_freq[j]/1000]/(pcpu_per_count[i][cpu0_available_freq[j]/1000])*100);}else{printf("0.00%\t");}   }printf("\n");}printf("\n");for(j=0;j<cpu4_size;j=j+2){if(j==0)printf("   \t");printf("%d\t", cpu4_available_freq[j]);if(j==cpu4_size-2)printf("\n");}for(i=4;i<8;i++){printf("%d\t", i);for(j=0;j<cpu4_size;j=j+2){if(pcpu_per_count[i][cpu4_available_freq[j]/1000]!=0){printf("%.2f%\t", pcpu_per[i][cpu4_available_freq[j]/1000]/(pcpu_per_count[i][cpu4_available_freq[j]/1000])*100);}else{printf("0.00%\t");} }printf("\n");}return 0;
}int main(int argc, char *argv[])
{si   interval , accummulate_time = 0, set_group;ui   cpu0_freq , cpu4_freq = 0;ui     total_count = 0;u8     cpu0_size, cpu4_size, i , j ;ui     cpu0_available_freq[MAX_AVALLABLE_FREQ], cpu4_available_freq[MAX_AVALLABLE_FREQ];float pcpu_set[BUFFER_SIZE];// input argc less than 1if( argc < 1 ){fprintf(stderr, "you must input two argv");fprintf(stderr, "first: cal cpu loading tool \n");fprintf(stderr, "secn: interval time(default:100ms) \n");fprintf(stderr, "expl: ./data/cpu_loading 100\n");return INVALID_ARGV;}// input argc 1if(argc==1){interval = 100;accummulate_time = 60;// input argc 2}else if(argc==2){interval = get_argv(argv[1]);if(interval<0){return INVALID_ARGV;}accummulate_time = 60;// input argc 3}else{interval = get_argv(argv[1]);if(interval<0){return INVALID_ARGV;}accummulate_time = get_argv(argv[2]);if(accummulate_time<0){return INVALID_ARGV;}}printf("interval is %d\n", interval);printf("accummulate_time is %d\n", accummulate_time);get_init_freq_count(CPU0_AVAILABLE_FREQ_PATH, &cpu0_size, cpu0_available_freq);get_init_freq_count(CPU4_AVAILABLE_FREQ_PATH, &cpu4_size, cpu4_available_freq);// debug//debug_cpufreq_count(cpu0_size, cpu0_available_freq ,cpu4_size, cpu4_available_freq);total_count = (accummulate_time*1000)/interval;clear_envirment();// data cimplingdata_simpling(accummulate_time, interval, total_count);set_group = compute_cpu_loading_freq(START_STAT, END_STAT, pcpu_set);calculate_freq_percent(cpu0_size, cpu0_available_freq, total_count, cpu4_size,cpu4_available_freq, set_group);return 0;
}
#define INVALID_ARGV     -1
#define FAILED_OPEN_FILE    -2
#define MAX_AVALLABLE_FREQ  40
#define BUFFER_SIZE         512#define CPU0_CUR_FREQ_PATH           "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"
#define CPU4_CUR_FREQ_PATH          "/sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq"
#define CPU0_AVAILABLE_FREQ_PATH    "/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies"
#define CPU4_AVAILABLE_FREQ_PATH    "/sys/devices/system/cpu/cpu4/cpufreq/scaling_available_frequencies"
#define PROC_CPU_STAT               "/proc/stat"
#define LITTLE_CORE                 "/sdcard/little_core"
#define BIG_CORE                    "/sdcard/big_core"
#define START_STAT                  "/sdcard/stat_start.txt"
#define END_STAT                    "/sdcard/stat_end.txt"
#define PCPU_PATH                   "/sdcard/stat_result.txt"typedef signed       int    si;
typedef signed      char   s8;
typedef unsigned    char   u8;
typedef unsigned    int    ui;
typedef unsigned long int  uli;

计算结果如下:

interval is 100
accummulate_time is 20
time_use is 20596.07
        768000  884000  1000000 1100000 1200000
0       41.64%  45.50%  45.19%  54.13%  52.41%
1       28.25%  28.78%  28.97%  24.77%  42.26%
2       23.41%  24.57%  16.36%  27.08%  46.81%
3       22.34%  15.81%  29.40%  20.00%  20.95%

768000  1050000 1225000 1400000 1500000 1570000
4       1.07%   5.82%   26.26%  10.00%  20.00%  40.00%
5       0.03%   4.00%   0.00%   0.00%   0.00%   0.00%
6       0.03%   0.00%   0.00%   0.00%   0.00%   0.00%
7       0.00%   0.00%   0.00%   0.00%   0.00%   0.00%

io从

【cpu_loading】/proc/stat统计cpu的使用率相关推荐

  1. 一个用了统计CPU 内存 硬盘 使用率的shell脚本

    一个用了统计CPU 内存 硬盘 使用率的shell脚本 一个统计 CPU 内存 硬盘 使用率的shell脚本,供大家学习参考 代码如下: #!/bin/bash #This script is use ...

  2. Linux | Centos下几种CPU查看使用率的常用命令

    文章目录 一.top 1.1 常用参数 二.free 三.vmstat 3.1 常用参数 3.2 获取信息 四.mpstat 4.1 安装 4.2 获取信息 一.top top命令是Linux下常用的 ...

  3. c# 获取进程cpu的使用率 简单试验

    1.概要 想了解程序的效率,和运行的风险,准备观察一个CPU和内存的占用率. 2.代码 using System; using System.Diagnostics; using System.Thr ...

  4. 迅为RK3568开发板Linux_NVR_SDK系统开发-查看NPU/GPU/CPU频率使用率

    iTOP-RK3568 开发板烧写 Linux_NVR_SDK 镜像,在串口终端输入以下命 令查看 NPU/GPU/CPU 频率使用率. 1 输入以下命令挂载 debug,只有挂载 debug 才可以 ...

  5. Linux环境下用Java获取CPU的使用率

    在Java编程过程中希望知道CPU的使用率,以便决定是否加载任务.首先用google搜了一下,Windows环境可以用JNI通过API函数 getProcessCPUTime()来得到,并有人给出了源 ...

  6. Perf工具统计CPU性能

    文章目录 Perf 性能检测工具 perf --help Ubuntu20.04安装Perf工具 记录一段时间内系统/进程的性能事件 常用参数 例子 读取生成的数据文件,并显示分析数据 常用参数 例子 ...

  7. 关于STM32的CPU的使用率~裸机不带系统

    1. 如果你不跑操作系统,CPU肯定一直都是100%使用的,哪怕你里面是延时等待,CPU也是一直在执行空语句nop,因为STM32里面是有一个CPU. 2.对于stm32总是百分百.只是有多少时间空闲 ...

  8. linux rhel unix centos FreeBSD 查看CPU核数使用率 系统 位 内存大小 硬盘 HBA光纤卡号 常用命令

    一:使用CentOS常用命令查看cpu more /proc/cpuinfo | grep "model name"   grep "model name" / ...

  9. java 获取系统信息及CPU的使用率

    原文:http://kakaluyi.javaeye.com/blog/211492 最近做个项目,就是要取得cpu占有率等等的系统信息,一开始以为要用动态链接库了,但后来发现可以像下面这样做,不去调 ...

最新文章

  1. Linux上常用的安全技术iptables与squid代理服务器
  2. Windows Server 2016虚拟机克隆后修改安全标识SID
  3. 服务器管理安全(上)
  4. DevOps落地成不成,关键不在持续集成?
  5. Hadoop---集群安装
  6. 通过SiteMapDataSource动态获取SiteMap文件进行权限设置
  7. python合并两个数据框_python-3.x - 如何使用匹配索引合并两个数据框? - SO中文参考 - www.soinside.com...
  8. flinkTime与Window入门详解
  9. 访问网站403错误解决方法(apache)
  10. 用VirtualBox创建虚拟机
  11. 浅谈IPv6网络安全问题及解决对策
  12. java提取图片中的文字内容_java 提取图片中的文字,手写文字
  13. 《谋圣鬼谷子》曝片花 徐麒雯饰演“姮娥”
  14. 【专题3:电子工程师 之 上位机】 之 【47.使用QT Opengl显示YUV图像】
  15. 我的世界java1.16.3村庄种子,我的世界2020年最新版村庄种子
  16. ubuntu20安装gcc_Ubuntu:软件常用安装方法(附WPS安装)
  17. Matlab滤波器设计示例
  18. MySQL数据库教程之七:MySQL编程基础
  19. 十三届蓝桥青少组省赛Python-20220423
  20. 宁夏事业单位计算机类面试题,2019年宁夏事业单位面试试题:经典问题解析

热门文章

  1. 前端基础之《Bootstrap(2)—全局CSS样式_栅格系统》
  2. 【MATLAB】【公式验证】傅里叶级数
  3. LeetCode 5687.执行乘法运算的最大分数
  4. python打印文件到字符串_如果字符串在文本文件中,如何签入Python并打印行?
  5. 超敏小鼠瘦素ELISA试剂盒标曲示意图(附文献)
  6. Kafka Consumer Rebalance详解
  7. 数据结构——关于链表的题目
  8. 微信小程序关联公众号:official-account组件的使用
  9. 余压控制系统如何选用压力传感器
  10. jQuery插件 -- Form表单插件jquery.form.js