我想使用GNU coreutil top的公式来计算CPU使用率百分比。但是top使用了一些half_total,用于计算百分比,它会将0.5添加到百分比中。
在top的utils.c中(位于源代码中的3.8 beta1版本中,在行号459处),以下行(减去注释)是:
*out++ = (int)((*diffs++ * 1000 + half_total) / total_change);
这相当于: ( (*diffs++ * 1000) / total_change ) + 1/2 因此,它总是返回一个数字,即“10倍的百分比加0.5”。因此,如果百分比为x,则它将返回10x+0.5。
有人能解释一下这个平均数是如何计算的吗?或者至少可以提供一些帮助的指针吗?
PS: 为什么我们不能只使用
Top的源代码位于:- http://downloads.sourceforge.net/unixtop/top-3.8beta1.tar.gz?modtime=1210117842&big_mirror=0
在top的utils.c中(位于源代码中的3.8 beta1版本中,在行号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