Расчет загрузки процессора верхней командой
Я пытаюсь использовать формулу GNU coreutil top для расчета загрузки процессора в процентах. Но top использует некоторый half_total, чтобы вычислить процент, который добавляет 0,5 к проценту.
В utils.c исходного кода top следующая строка (в 3.8beta1 это номер строки: 459): -
* out ++ = (int) ((* diffs ++ * 1000 + half_total) / total_change);
Это означает: ( (*diffs++ * 1000) / total_change) + 1/2. Таким образом, оно всегда дает число, равное: "10-кратный процент плюс 0,5". Так что если процент равен x, он вернется 10x+0.5.
Кто-нибудь может объяснить, как рассчитывается это среднее? или хоть какой-то указатель, где я могу получить помощь?
PS: почему мы не можем просто использовать (*diffs++/total_change) * 100
получить требуемый процент?
Исходный код Top находится по адресу: - http://downloads.sourceforge.net/unixtop/top-3.8beta1.tar.gz?modtime=1210117842&big_mirror=0
1 ответ
Это способ сделать округление для целочисленных значений, потому что деление отбрасывает дробную часть.
Когда вы добавляете половину делителя, это эквивалентно делению с плавающей запятой и округлению, если дробная часть равна 0,5 или больше.