我正在编写一个简单程序的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);
}
}
我有不同的选择,但我不知道哪一个会提供最准确的结果:
使用ualarm
作为时间。目前它被编程为每0.5秒发出一次信号,因此我可以将这0.5秒作为CPU时间。使用起来似乎很明显,但这是最好的选择吗?
使用clock_gettime(CLOCK_MONOTONIC)
:它提供nanosec
分辨率的读数。
使用gettimeofday()
:提供usec
分辨率的读数。我发现了反对使用它的意见。
有什么建议吗?感谢。