我正在编写我正在编写的一个简单程序上分析 CPU 使用情况。我有不同的算法我想尝试,我也想知道对整个系统性能有什么影响。
目前,我正在使用 ualarm() 以 30Hz 执行一些指令;每 15 次中断(每 0.5 秒)我使用 getrusage() 记录 CPU 时间(以 u 秒为单位),因此我估计了该时间点 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
分辨率的读数。我发现反对使用它的意见。
有什么推荐吗?谢谢。