htopはなぜそんなに早く始まりますか?

htopはなぜそんなに早く始まりますか?

私はプロセスに関する情報を読み取ろうとします。/プロセス/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

関連情報