Date: Sun, 24 May 2009 08:46:35 +0100 From: Matthew Seaman <m.seaman@infracaninophile.co.uk> To: yuri@rawbw.com Cc: freebsd-questions@freebsd.org Subject: Re: How can this 'top' command output make sense? Load over 7 and total CPU use ~5% Message-ID: <4A18FB5B.4080902@infracaninophile.co.uk> In-Reply-To: <4A18BEC8.5060506@rawbw.com> References: <4A18BEC8.5060506@rawbw.com>
next in thread | previous in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig60019553DCB3B46DA915EC58
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable
Yuri wrote:
> Look below: load over 7 and no processes take much CPU.
>=20
> Yuri
>=20
> 7.2-PRERELEASE, 32-bit on i7-920.
>=20
>=20
>=20
> ------------------------------------------------------------
> last pid: 93192; load averages: 7.68, 6.27, =20
> 4.61 =
=20
> up 2+03:11:29 20:25:24
> 204 processes: 9 running, 193 sleeping, 1 stopped, 1 zombie
> CPU: 5.3% user, 0.0% nice, 0.0% system, 0.0% interrupt, 94.7% idle
> Mem: 867M Active, 1684M Inact, 279M Wired, 65M Cache, 112M Buf, 92M Fre=
e
> Swap: 16G Total, 142M Used, 16G Free
>=20
> PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMM=
AND
> 60032 yuri 1 46 0 285M 183M select 0 41:15 0.59% Xor=
g
> 60400 yuri 1 4 0 12576K 9144K kqread 4 29:44 0.00%=20
> wineserver
> 92982 yuri 1 44 0 53012K 16800K CPU3 3 18:50 0.00%=20
> kdeinit4
> 92986 yuri 1 44 0 53012K 16800K CPU7 7 18:48 0.00%=20
> kdeinit4
> 92988 yuri 1 107 0 53012K 16840K CPU6 6 17:22 0.00%=20
> kdeinit4
> 60104 yuri 1 44 0 132M 45860K select 0 16:58 0.00% kwi=
n
> 92984 yuri 1 117 0 53012K 16800K RUN 5 14:56 0.00%=20
> kdeinit4
> 60096 yuri 1 44 0 89732K 30040K select 4 10:10 0.00% kde=
d4
> 93141 yuri 1 53 0 53012K 16800K CPU5 5 3:52 0.00%=20
> kdeinit4
> 93139 yuri 1 44 0 53012K 16800K CPU1 1 3:30 0.00%=20
> kdeinit4
> 60174 yuri 1 44 0 3168K 1400K select 0 1:28 0.00%=20
> ksysguardd
> 450 root 1 4 0 3128K 800K select 4 0:44 0.00% dhcl=
ient
> 1131 messagebus 1 4 0 3344K 1384K select 4 0:40 0.00%=20
> dbus-daemon
Sure. This is not an uncommon occurrence really. The load average is
the number of processes in the queue for a CPU time slice averaged over
5, 10 or 15 minutes. For multi-core systems the LA is scaled by the numb=
er
of cores so a LA of 1.0 means all cores have active processes pretty much=
continually.
Now, you might think that an active process will take the CPU utilisation=
to 100%, but that is not necessarily so. Some numerical applications can=
do that, but purely CPU bound processes are relatively uncommon in everyd=
ay
usage. In actuality what happens is that the processor will need to retr=
ieve
data from somewhere to operate on. There's a hierarchy of data stores of=
various speeds (latency, rather than bandwidth):
L1 Cache > L2 Cache > L3 Cache > Main RAM > Disk > Network
Where the L1 Cache is accessible in a few clock ticks (nanoseconds), Main=
=20
RAM can take microseconds to access, disk can take milliseconds to access=
,
and Network can take 10 -- 1000s of milliseconds.
Or in other words, about 9 orders of magnitude difference. So when the d=
ata
you need to process is too big to fit in the fastest caches, or when it c=
omes
from a particularly slow location or when you have a lot of active proces=
ses
causing context switches, then the CPU core will be making frequent IO re=
quests
and spending time waiting for them to be fulfilled. =20
Now, for sources like disks and network where the retrieval is much slowe=
r than
the typical timescale of events on the CPU the process will yield the CPU=
to
something else and only get a new timeslice once the IO request has been
fulfilled. For an access to main RAM however that form of yielding is le=
ss
likely. Consequently the CPU can end up waiting for 100s of clock cycles=
until
it gets some bytes to process. In the mean time, other processes are als=
o sitting
in the queue wanting CPU time slices -- hence the high LA with low CPU ut=
ilization.
Scheduling CPU timeslices to make maximum use of available resources is t=
he
difference between a really performant OS and a disaster. A good schedul=
er
is the critical central piece of code around which the rest of an OS can =
be constructed. Combine that with the complexity of having multiple core=
s, and
that threads of execution sometimes have to be moved to different cores, =
and
on other occasions sometimes need to stick to the same core in order to m=
ake
best use of resources and you will start to appreciate quite how hard it =
is to
write a good scheduler. Unsurprisingly, the design of such things is a m=
atter
of fairly impassioned debate amongst the rarified circle of people capabl=
e of
writing them. That sort of argument was the genesis of the FreeBSD / Dra=
gonflyBSD
fork a few years back. You can rest assured though that FreeBSD certainl=
y does
have one of the very best schedulers currently available and it is specif=
ically
targeted at getting the best out of the sort of multicore CPUs available =
nowadays.
Cheers,
Matthew
--=20
Dr Matthew J Seaman MA, D.Phil. 7 Priory Courtyard
Flat 3
PGP: http://www.infracaninophile.co.uk/pgpkey Ramsgate
Kent, CT11 9PW
--------------enig60019553DCB3B46DA915EC58
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.11 (FreeBSD)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEAREIAAYFAkoY+2EACgkQ8Mjk52CukIyPVQCgibP3ynO+kof6DtZjrOxUfhkR
CnoAn2g7ePoFI6VTHrYIe3MhFS3UXtNU
=fh2l
-----END PGP SIGNATURE-----
--------------enig60019553DCB3B46DA915EC58--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A18FB5B.4080902>
