2009-02-16 18 views
6

Ich versuche, die Formel von GNU coreutil top zur Berechnung der CPU-Auslastung in Prozent zu verwenden. Aber oben verwendet einige half_total, um den Prozentsatz zu berechnen, der 0,5 zum Prozentsatz hinzufügt.Berechnung der CPU-Auslastung des oberen Befehls

In utils.c von Top source, die folgende Zeile (3.8 Beta1 ist es in Zeilennummer: 459): -

* out ++ = (int) ((* diffs ++ * 1000 + half_total)/total_change);

Dies führt zu: ((* diffs ++ * 1000)/total_change) + 1/2 So gibt es immer eine Zahl, die lautet: "10-mal der Prozentsatz, plus 0,5". Wenn der Prozentsatz also x ist, wird 10x + 0,5 zurückgegeben.

Kann jemand erklären, wie wird dieser Durchschnitt berechnet? oder wenigstens ein Zeiger, wo ich die Hilfe bekommen kann?

PS: Warum können wir nicht einfach (*diffs++/total_change) * 100 verwenden, um den erforderlichen Prozentsatz zu erhalten?

Top-Quellcode befindet sich unter: - http://downloads.sourceforge.net/unixtop/top-3.8beta1.tar.gz?modtime=1210117842&big_mirror=0

Antwort

6

Dies ist die Art und Weise ist zu tun für ganzzahlige Werte gerundet, da die Division den Bruchteil verwirft.

Wenn Sie die Hälfte des Divisors hinzufügen, entspricht dies einer Gleitkommadivision und einer Rundung, wenn der Bruchteil 0,5 oder größer ist.

+0

aber was ist mit dem "10x" Teil? – Sabya

+0

Da der Wert in Zehntel Prozent ist. – starblue