cpu_sup
is part of the os_mon
application and all
configuration parameters are defined in the reference documentation for the os_mon
application.
cpu_sup
is a process which supervises the CPU load in
the operating system. The load is obtained via the Solaris kernel
statistics library, kstat
. The same underlying mechanism
is used by many other well known UNIX programs, such as rup
,
top
and xload
.
The Solaris kernel continuously maintains a large number of
statistics, of which the current load values are just
a few. Whenever an Erlang process requests a load measurement,
cpu_sup
just reads the latest statistical values.
The Solaris kernel load values are proportional to how long
time a runnable UNIX process has to spend in the run queue before
it is scheduled. Accordingly, higher values mean more system load. The
returned value divided by 256 produces the figure displayed by
rup
and top
. What is displayed as
2.00 in rup
, is displayed as as load up to the second mark in xload
.
For example, rup
displays a load of 128 as 0.50, and
512 as 2.00.
If the user wants to view load values as percentages of machine capacity, then this way of measuring presents a problem, because the load values are not restricted to a fixed interval. In this case, the following simple mathematical transformation can produce the load value as a percentage:
PercentLoad = 100 * (1 - D/(D + Load))
D
determines which load value should be associated
with which percentage. Choosing D
= 50 means that 128 is 60%
load, 256 is 80%, 512 is 90%, and so on.
Another way of measuring system load is to divide the number of busy CPU cycles by the total number of CPU cycles. This method is used by some systems, including Windows NT for example, and it produces values in the 0-100 range immediately. However, this method hides the fact that a machine can be more or less saturated.
A server which receives just enough requests to never become idle would score 100% with this measurement method. If the server receives 50% more requests, it would still score 100%. With the measurement method used in this module, the load would increase from 80% to 87% when calculated with the percentage formula shown previously.
UnixProcesses = integer()
Returns the number of UNIX processes running on this machine. This is a crude way of measuring the system load, but it may be of interest in some cases.
SystemLoad = integer()
Returns the average system load in the last 60 seconds, as
described above. 0 represents no load, 256 represents the load
reported as 1.00 by rup
.
SystemLoad = integer()
Returns the average system load from the last 300 seconds, as
described above. 0 represents no load, 256 represents the load
reported as 1.00 by rup
.
SystemLoad = integer()
Returns the average system load from the last 900 seconds, as
described above. 0 represents no load, 256 represents the load
reported as 1.00 by rup
.