cpu_sup
cpu_sup
模块
cpu_sup
模块摘要
CPU负载与CPU利用率管理程序
描述
cpu_sup
是一个监督CPU负载和CPU利用率的过程。它是OS_Mon应用程序的一部分,请参阅os_mon(6)
。可用于Unix,但CPU利用率值(util/0,1
)仅适用于Solaris,Linux和FreeBSD。
加载值与可运行的Unix进程在计划之前必须在运行队列中花费多长时间成比例。 因此,较高的值意味着更多的系统负载。 返回的值除以256会产生rup和top显示的数字。 在rup中显示为2.00的内容显示为xload中第二个标记的负载。
例如,rup
显示128个负载为0.50,512个为2.00。
如果用户想要将负载值视为机器容量的百分比,那么这种测量方式会出现问题,因为负载值不限于固定的时间间隔。在这种情况下,下面的简单数学转换可以产生百分比的负载值:
PercentLoad = 100 * (1 - D/(D + Load))
D
确定哪个负载值应与哪个百分比相关联。选择D
= 50意味着128是60%负载,256是80%,512是90%等等。
测量系统负载的另一种方式是将忙CPU周期数除以CPU周期总数。这会立即生成0-100范围内的值。但是,这种方法隐藏了机器可能或多或少饱和的事实。因此,对于此度量,CPU利用率是比系统负载更好的名称。
接收足够请求永不会变为空闲的服务器将获得100%的CPU利用率。如果服务器收到50%的请求,它仍然会获得100%的分数。当系统负载用前面显示的百分比公式计算时,负载将从80%增加到87%。
avg1/0
,avg5/0
和avg15/0
功能可以用于检索系统的负载值,并且util/0
和util/1
功能可以用于检索CPU利用率值。
在Linux上运行时,cpu_sup会假定/ proc文件系统存在并可由cpu_sup访问。 如果不是,cpu_sup将会终止。
输出
nprocs() -> UnixProcesses | {error, Reason}
类型
返回在此机器上运行的UNIX进程数。这是一种粗略的测量系统负载的方法,但在某些情况下可能会引起兴趣。
如果cpu_sup
不可用,则返回0 。
avg1() -> SystemLoad | {error, Reason}
类型
如上所述,返回最后一分钟的平均系统负载。0表示没有负载,256表示负载报告为1.00 rup
。
如果cpu_sup
不可用,则返回0 。
avg5() -> SystemLoad | {error, Reason}
类型
如上所述,返回最近五分钟的平均系统负载。0表示没有负载,256表示负载报告为1.00 rup
。
如果cpu_sup
不可用,则返回0 。
avg15() -> SystemLoad | {error, Reason}
类型
如上所述,返回最近15分钟内的平均系统负载。0表示没有负载,256表示负载报告为1.00 rup
。
返回0如果cpu_sup
是不可用的。
util() -> CpuUtil | {error, Reason}
类型
返回上次调用后的cpu利用率。util/0
或util/1
通过呼叫过程。
注
进程util/0
或util/1
进程的第一次调用的返回值在大多数系统上是系统启动后的CPU利用率,但不能保证,因此该值应视为垃圾。这也适用于重新启动后的第一个呼叫cpu_sup
。
CPU利用率定义为所有CPU处于繁忙处理器状态(见util/1
下文)的CPU周期平均百分比总和。
如果cpu_sup
不可用,则返回0 。
util(Opts) -> UtilSpec | {error, Reason}
类型
返回自上次调用进程util/0
或util/1
由调用进程调用之后的CPU使用率,详细信息请参见util/0
。
注
进程util/0
或util/1
进程的第一次调用的返回值在大多数系统上是系统启动后的CPU利用率,但不能保证,因此该值应视为垃圾。这也适用于重新启动后的第一个呼叫cpu_sup
。
目前公认的备选方案:
detailed
返回的UtilDesc
(s)将更加详细。
per_cpu
每个CPU将单独指定(假设这些信息可以从操作系统中检索),即UtilDesc
每个CPU将返回一个列表。
描述UtilDesc = {Cpus, Busy, NonBusy, Misc}
:
Cpus
如果给出detailed
和/或per_cpu
选项,则为CPU编号或CPU编号列表。
如果不是,则这是all
表示UtilDesc
包含有关所有CPU的信息的原子。
Busy
如果detailed
给出选项,这是一个{State, Share}
元组列表,其中每个元组都包含有关处理器状态的信息,该状态已被确定为繁忙的处理器状态(请参见下文)。atom State
是状态的名称,float Share
表示自从上次调用util/0
or 之后,在此状态中花费的CPU周期的百分比util/1
。
如果不是,则这是所有被标识为繁忙状态的CPU周期的百分比份额总和。
如果per_cpu
没有给出,则所呈现的值是所有CPU的平均值。
NonBusy
与Busy
处理器状态类似,但处理器状态已被识别为非忙(见下文)。
Misc
目前未使用;保留供将来使用。
目前,这些处理器状态被标识为繁忙:
user
在用户模式下执行代码。
nice_user
在低优先级(好)用户模式下执行代码。此状态目前仅在Linux上确定。
kernel
在内核模式下执行代码。
目前,这些处理器状态被标识为非繁忙状态:
wait
等候。此状态目前仅在Solaris上确定。
idle
空闲状态。
注
识别出的处理器状态在不同的操作系统上可能不同,并且可能cpu_sup
在同一操作系统上的不同版本之间发生变化。不过,在所有繁忙和所有非繁忙处理器状态中花费的CPU周期的百分比总和总是将总计为100%。
如果cpu_sup
不可用,则返回{all,0,0,[]}
。
另见
os_mon(3)