Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Jul 2001 09:04:34 -0700 (PDT)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Ian Dowse <iedowse@maths.tcd.ie>
Cc:        freebsd-current@FreeBSD.org
Subject:   RE: Load average synchronisation and phantom loads
Message-ID:  <XFMail.010717090434.jhb@FreeBSD.org>
In-Reply-To: <200107152319.aa46183@salmon.maths.tcd.ie>

next in thread | previous in thread | raw e-mail | index | archive | help

On 15-Jul-01 Ian Dowse wrote:
> 
> There are a few PRs and a number of messages in the mailing list
> archives that describe a problem where the load average occasionally
> remains at 1.0 or greater even though top(1) reports that the CPU
> is nearly 100% idle. The PRs I could find in a quick search are
> kern/21155, kern/23448 and kern/27334.
> 
> The most probable cause for this effect is a synchonisation between
> the load measurement and processes that periodically run for short
> amounts of time. The load average is based on samples of the number
> of running processes taken at exact 5-second intervals. If some
> other process regularly runs with a period that divides into 5
> seconds, that process may always be seen as running even though it
> may only run for a tiny fraction of the available CPU time.
> 
> A very likely candidate process is bufdaemon; it sleeps for 1 second
> at a time, so if it happens to get scheduled in the same tick as
> the load measurement and before the load measurement, it will always
> be seen as running.
> 
> The patch below causes the samples of running processes to be
> somewhat randomised; instead of being taken every 5 seconds, the
> gap now varies in the range 4 to 6 seconds, so that synchronisation
> should no longer occur. Would there be any objections to my committing
> this?

> 
> Two comments on the patch:
> - This patch removes the SSLEEP case in loadav(), because in the
>   existing code, p->p_slptime has always just been incremented in
>   schedcpu() so this case never made a difference. To keep the same
>   load average behaviour when loadav() is called at different times,
>   this case needs to be removed.
> 
> - The load average calculation now has really nothing to do with
>   the VM system, so it could be moved elsewhere. I've just left
>   it in vm_meter.c because that's where it's always been.

sys/kern/kern_synch.c perhaps?  Might be best to do that as a separate commit
however.

-- 

John Baldwin <jhb@FreeBSD.org> -- http://www.FreeBSD.org/~jhb/
PGP Key: http://www.baldwin.cx/~john/pgpkey.asc
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.010717090434.jhb>