C中的CPU使用率(以百分比表示)

时间:2014-05-21 19:08:38

标签: c ubuntu lua

如何使用C?

将CPU使用率作为百分比

我有这样的功能:

static int cpu_usage (lua_State *L) {
    clock_t clock_now      = clock();
    double  cpu_percentage = ((double) (clock_now - program_start)) / get_cpus() / CLOCKS_PER_SEC;

    lua_pushnumber(L,cpu_percentage);
    return 1;
}

“program_start”是我在程序启动时使用的clock_t。

另一次尝试:

static int cpu_usage(lua_State *L) {
    struct rusage ru;
    getrusage(RUSAGE_SELF, &ru);

    lua_pushnumber(L,ru.ru_utime.tv_sec);
    return 1;
}

有没有办法测量CPU?如果我不时地调用这个函数它会让我不断增加时间......但这不是我想要的。

PS:我正在使用Ubuntu。

谢谢! =)

1 个答案:

答案 0 :(得分:1)

您的功能应该按预期工作。来自clock

  

clock()函数应返回实现对进程使用的处理器时间的最佳近似值,因为实现定义时代的开始仅与进程调用有关。

这意味着,它返回此进程的CPU时间。


如果要计算相对于挂钟时间的CPU时间,则必须对gettimeofday执行相同操作。节目开始时节省时间

struct timeval wall_start;
gettimeofday(&wall_start, NULL);

以及何时想要计算百分比

struct timeval wall_now;
gettimeofday(&wall_now, NULL);

现在你可以计算挂钟时间的差异了,你得到了

double start = wall_start.tv_sec + wall_start.tv_usec / 1000000;
double stop = wall_now.tv_sec + wall_now.tv_usec / 1000000;
double wall_time = stop - start;
double cpu_time = ...;
double percentage = cpu_time / wall_time;