私はプロセスに関する情報を読み取ろうとします。/プロセス/htopとtopと同じです。
htop や top の「CPU%」値は該当プロセスの stat ファイルにある utime と stime 値を合計し、一定時間が経過するとその値を繰り返し、その差を経過時間で割って計算したものと見られる。精度は通常10ミリ秒(getconf CLK_TCKが100を返す)のように見えるため、3桁の精度を得るには少なくとも1秒待つ必要があるようです。
ただし、htopとtopは「CPU%」値を使用してプロセスを即座に表示します。
彼らはどのようなトリックを使ったのでしょうか、それとも私がここで間違いを犯していますか?
私の現在の(C ++)実装は私の主張をサポートしています:
// acquire initial
std::this_thread::sleep_for(measuringPeriod);
// acquire final
static const long CLK_TCK = sysconf(_SC_CLK_TCK);
long unsigned int initialTime = initial.utime + initial.stime;
long unsigned int finalTime = final.utime + final.stime;
long unsigned int time = finalTime - initialTime;
double measuringTime = (double)(std::chrono::duration_cast
<std::chrono::milliseconds>(measuringPeriod)
.count()) / 1000.0; // in seconds
double cpuLoad = (double)time * 100.0 / (double)CLK_TCK
/ measuringTime; // in percent