首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分析多核处理器的所有内核?

如何分析多核处理器的所有内核?
EN

Stack Overflow用户
提问于 2015-03-23 16:29:24
回答 2查看 275关注 0票数 0

我想要分析系统中所有内核占用的百分比,并在大约100毫秒的间隔后将结果保存在文件中。例如,如果我有8个核心,我想知道每个核心有多忙。如果分析器给出一个合计,比如620%,或者只给出每个单独处理器的百分比,比如core1的89%,核心2的82%等等,对我来说没问题。哪个分析器能够给出这样的统计数据,又是如何给出的?

EN

回答 2

Stack Overflow用户

发布于 2015-03-23 18:19:14

您可以读取文件/proc/stat并获取行"cpu0","cpu1",...以作进一步分析。有关各个列的说明,请参阅http://www.linuxhowtos.org/System/procstat.htm

您确实需要获取两次读数才能获得某个时间间隔之间的利用率。这些值是自系统启动以来的总量,而不是瞬时使用率。

票数 1
EN

Stack Overflow用户

发布于 2015-03-23 18:27:04

这是从/proc/stat读取值的一个示例。它将检索程序开始和结束时的CPU统计信息,并测量消耗的利用率。

代码语言:javascript
复制
#include <stdio.h>

typedef struct {
    unsigned long long user;
    unsigned long long nice;
    unsigned long long sys;
    unsigned long long idle;
} cpu_stats;

int read_cpu_stats( cpu_stats *stats ) {

  unsigned int cpu;
  cpu_stats stat;
  char line[1024];
  FILE *f = popen( "cat /proc/stat | grep cpu[0-9]", "r" );

  if( f == NULL )
      return 1;

  do {

      if( fgets( line, sizeof(line), f ) == NULL )
        break;

     sscanf( line + 3, "%u %llu %llu %llu %llu\n", &cpu, &stat.user, &stat.nice, &stat.sys, &stat.idle );
     stats[cpu] = stat;

  } while( !feof(f) && !ferror(f) );

  pclose(f);
  return 0;
}

float get_util( cpu_stats stat1, cpu_stats stat2 ) {

    unsigned long long util1 = stat1.user + stat1.nice + stat1.sys;
    unsigned long long util2 = stat2.user + stat2.nice + stat2.sys;

    return (float)(util2 - util1) / ( (util2 + stat2.idle) - (util1 + stat1.idle) );
}

/* assuming at most 4 cpus in the system */
#define N_CPUS 4

int main() {

  unsigned int i;
  cpu_stats stats1[N_CPUS];
  cpu_stats stats2[N_CPUS];

  read_cpu_stats( stats1 );

  /* do something */
  usleep( 5000 * 1000 );

  read_cpu_stats( stats2 );

  for( i = 0; i < N_CPUS; i++ )
    printf( "cpu %u: %f\n", i, get_util( stats1[i], stats2[i] ) );

  return 0;
}

这基本上将收集两次对read_cpu_stats的调用之间花费的空闲和繁忙周期数,并计算繁忙周期与每个CPU的总周期数之间的比率。

如果您想连续测量利用率,只需将其封装到一个循环中即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29205886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档