top: limit task cpu % based on total number of threads
Everyone has either accepted this potential distortion or patched top to eliminate it. Now, the time has come to regain some consistency when calculating that %CPU. We'll now limit such values to: 100.0 * total threads. And, it took way too long to address this little flaw. (now that we know a '.' + 2 spaces is squeezed to one) (everything's perfectly justified, but it's just luck) Reference(s): http://www.freelists.org/post/procps/top-regression-reports http://www.freelists.org/post/procps/top-regression-reports,1 Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
parent
27c2ef1e6d
commit
ced5009f75
12
top/top.1
12
top/top.1
@ -454,9 +454,15 @@ Such fields can, however, be scaled differently via the 'e' \*(CI.
|
|||||||
1.\fB %CPU \*(Em \*(PU Usage \fR
|
1.\fB %CPU \*(Em \*(PU Usage \fR
|
||||||
The task's share of the elapsed \*(PU time since the last screen update,
|
The task's share of the elapsed \*(PU time since the last screen update,
|
||||||
expressed as a percentage of total \*(PU time.
|
expressed as a percentage of total \*(PU time.
|
||||||
In a true SMP environment, if 'Irix mode' is \*F, \*(We will operate
|
|
||||||
in 'Solaris mode' where a task's \*(Pu usage will be divided by the total
|
In a true SMP environment, if a process is multi-threaded and \*(We is
|
||||||
number of \*(PUs.
|
\fInot\fR operating in Threads mode, amounts greater than 100% may be
|
||||||
|
reported.
|
||||||
|
You toggle Threads mode with the 'H' \*(CI.
|
||||||
|
|
||||||
|
Also for multi-processor environments, if 'Irix mode' is \*F, \*(We
|
||||||
|
will operate in 'Solaris mode' where a task's \*(Pu usage will be
|
||||||
|
divided by the total number of \*(PUs.
|
||||||
You toggle 'Irix/Solaris' modes with the 'I' \*(CI.
|
You toggle 'Irix/Solaris' modes with the 'I' \*(CI.
|
||||||
|
|
||||||
.TP 4
|
.TP 4
|
||||||
|
@ -4631,6 +4631,9 @@ static const char *task_show (const WIN_t *q, const proc_t *p) {
|
|||||||
break;
|
break;
|
||||||
case P_CPU:
|
case P_CPU:
|
||||||
{ float u = (float)p->pcpu * Frame_etscale;
|
{ float u = (float)p->pcpu * Frame_etscale;
|
||||||
|
/* process can't use more %cpu than number of threads it has
|
||||||
|
( thanks Jaromir Capik <jcapik@redhat.com> ) */
|
||||||
|
if (u > 100.0 * p->nlwp) u = 100.0 * p->nlwp;
|
||||||
if (u > Cpu_pmax) u = Cpu_pmax;
|
if (u > Cpu_pmax) u = Cpu_pmax;
|
||||||
cp = scale_pcnt(u, W, Jn);
|
cp = scale_pcnt(u, W, Jn);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user