私が書いている単純なプログラムの 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
分解能のある測定値を提供します。私はそれを使用することに反対する意見を見つけました。
推奨事項はありますか?ありがとう。