在我的程序中配置CPU使用的最佳选择?

时间:2013-10-15 14:47:17

标签: c++ c linux embedded

我正在编写一个简单程序的CPU使用情况。我有不同的算法我想尝试,我也想知道对整个系统性能有什么影响。

目前,我正在使用ualarm()以30Hz执行一些指令;每15个中断(每0.5秒)我用getrusage()(在useconds中)记录CPU时间,所以我估计了该时间点cpu消耗的总cpu时间。但是为了得到上下文,我还需要知道系统在该时间段内经过的总时间,因此我的程序可以使用%。

/* Main Loop */
while(1) 
{
    alarm = 0;

    /* Waiting Loop: */
    for(i=0; !alarm; i++){
    }

    count++;

    /* Do my things */

    /* Check if it's time to store cpu log: */
    if ((count%count_max) == 0)
    {
        getrusage(RUSAGE_SELF, &ru);
        store_cpulog(f,
                (int64_t) ru.ru_utime.tv_sec,
                (int64_t) ru.ru_utime.tv_usec,
                (int64_t) ru.ru_stime.tv_sec,
                (int64_t) ru.ru_stime.tv_usec);
    }


}

我有不同的选择,但我不知道哪一个会提供最准确的结果:

  1. 使用ualarm作为时间。目前它被编程为每0.5秒发出一次信号,因此我可以将这0.5秒作为CPU时间。使用起来似乎很明显,但这是最好的选择吗?

  2. 使用clock_gettime(CLOCK_MONOTONIC):它提供nanosec分辨率的读数。

  3. 使用gettimeofday():提供usec分辨率的读数。我发现了反对使用它的意见。

  4. 有什么建议吗?感谢。

2 个答案:

答案 0 :(得分:0)

可能的解决方案是使用系统函数time并且不要在程序中使用busy循环(如@Hasturkun说)。在控制台中呼叫:

time /path/to/my/program

并且在执行之后你会得到类似的东西:

real    0m1.465s
user    0m0.000s
sys     0m1.210s

如果对你来说足够了,不确定精确度。

答案 1 :(得分:0)

Callgrind可能是在linux下分析C / C ++代码的最佳应用程序。自豪地使用它:)