
나는 프로세스에 대한 정보를 읽으려고 노력합니다./프로세스/htop 및 top과 같습니다.
htop이나 top의 "CPU%" 값은 해당 프로세스의 stat 파일에 있는 utime과 stime 값을 합산하고, 일정 시간이 지나면 그 값을 반복하고, 그 차이를 경과 시간으로 나누어 계산한 것으로 보인다. 정확도는 보통 10밀리초(getconf CLK_TCK가 100을 반환함) 정도로 보이기 때문에 세 자릿수 정확도를 얻으려면 최소한 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