Fixed scaling of p_pctcpu. It was wrong by a factor of stathz/hz.
Until recently, this was half compensated for in at least ps and top by multiplying by 100/stathz to get a better wrong factor of 100/hz.
This commit is contained in:
parent
c13e5fb799
commit
e4d0e37b33
@ -36,7 +36,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)kern_synch.c 8.9 (Berkeley) 5/19/95
|
||||
* $Id: kern_synch.c,v 1.64 1998/10/25 19:57:23 bde Exp $
|
||||
* $Id: kern_synch.c,v 1.65 1998/10/25 20:11:36 bde Exp $
|
||||
*/
|
||||
|
||||
#include "opt_ktrace.h"
|
||||
@ -277,13 +277,13 @@ schedcpu(arg)
|
||||
* p_pctcpu is only for ps.
|
||||
*/
|
||||
#if (FSHIFT >= CCPU_SHIFT)
|
||||
p->p_pctcpu += (hz == 100)?
|
||||
p->p_pctcpu += (stathz == 100)?
|
||||
((fixpt_t) p->p_cpticks) << (FSHIFT - CCPU_SHIFT):
|
||||
100 * (((fixpt_t) p->p_cpticks)
|
||||
<< (FSHIFT - CCPU_SHIFT)) / hz;
|
||||
<< (FSHIFT - CCPU_SHIFT)) / stathz;
|
||||
#else
|
||||
p->p_pctcpu += ((FSCALE - ccpu) *
|
||||
(p->p_cpticks * FSCALE / hz)) >> FSHIFT;
|
||||
(p->p_cpticks * FSCALE / stathz)) >> FSHIFT;
|
||||
#endif
|
||||
p->p_cpticks = 0;
|
||||
newcpu = (u_int) decay_cpu(loadfac, p->p_estcpu) + p->p_nice;
|
||||
@ -293,7 +293,7 @@ schedcpu(arg)
|
||||
#define PPQ (128 / NQS) /* priorities per queue */
|
||||
if ((p != curproc) &&
|
||||
#ifdef SMP
|
||||
(u_char)p->p_oncpu == 0xff && /* idle */
|
||||
p->p_oncpu == 0xff && /* idle */
|
||||
#endif
|
||||
p->p_stat == SRUN &&
|
||||
(p->p_flag & P_INMEM) &&
|
||||
@ -635,7 +635,7 @@ mi_switch()
|
||||
|
||||
#ifdef SIMPLELOCK_DEBUG
|
||||
if (p->p_simple_locks)
|
||||
printf("sleep: holding simple lock\n");
|
||||
Debugger("sleep: holding simple lock\n");
|
||||
#endif
|
||||
/*
|
||||
* Compute the amount of time during which the current
|
||||
@ -651,9 +651,9 @@ mi_switch()
|
||||
*/
|
||||
if (p->p_stat != SZOMB && p->p_runtime > p->p_limit->p_cpulimit) {
|
||||
rlim = &p->p_rlimit[RLIMIT_CPU];
|
||||
if (p->p_runtime / (rlim_t)1000000 >= rlim->rlim_max) {
|
||||
if (p->p_runtime / 1000000 >= rlim->rlim_max)
|
||||
killproc(p, "exceeded maximum CPU limit");
|
||||
} else {
|
||||
else {
|
||||
psignal(p, SIGXCPU);
|
||||
if (rlim->rlim_cur < rlim->rlim_max) {
|
||||
/* XXX: we should make a private copy */
|
||||
|
Loading…
x
Reference in New Issue
Block a user