Por que o htop começa tão rápido?

0

Eu tentei ler informações sobre processos de / proc / como htop e top fazer.

Parece que o valor para "CPU%" em htop ou top é calculado pela soma dos valores utime e stime no arquivo stat de um processo, repetindo depois de um certo tempo e dividindo a diferença pelo tempo passado . Como a precisão geralmente parece ser de 10 ms (getconf CLK_TCK retorna 100), imagino que você tenha que esperar pelo menos um segundo para obter uma precisão de três dígitos.

No entanto, htop e top mostram seus processos com os valores "CPU%" imediatamente.

Eles usam algum tipo de truque ou estou cometendo um erro aqui?

Minha implementação atual (C ++) que faz backup da minha reivindicação é semelhante a esta:

// 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
    
por lug_wrench 11.05.2018 / 19:14

0 respostas