cpu usage in 7.0

Jeff Roberson jroberson at chesapeake.net
Sun Feb 24 22:46:11 UTC 2008

On Sun, 24 Feb 2008, Ivan Voras wrote:

> Kris Kennaway wrote:
>> Hugo Silva wrote:
>>> Kris Kennaway wrote:
>>>> Barney Cordoba wrote:
>>>>> I have a dual core system running 7.0 and I can't get
>>>>> top to show more than 100% usage no matter how I
>>>>> hammer it. My MAC shows over 100% often, but its not
>>>>> clear if top is averaging the 2 cpus or just not going
>>>>> over 100, or just showing 1 of the cpus.
>>>> 100% in FreeBSD means "all of your CPUs are completely active".  It is 
>>>> hard to exceed this amount :-)
>>> You should see my production mysql going over 458% on service startup, on 
>>> a quad core server :-)
>> That is a multithreaded process using multiple CPUs, not the total CPU 
>> statistics (first line of top(1)).
> So how does a multithreaded process get 458% CPU on a quad-core machine? :) 
> (Really, I want to know; I thought thread CPU accounting was fixed in 7.x. 
> Unless I'm mistaken, 4 CPU-intensive threads in a single process should 
> account as 4 CPU-intensive single-thread processes; i.e. each could only take 
> up to 100% of a core/CPU, accounting for NCPU*100% total).

It is possible for the sum of all threads in the system to exceed 100% 
cpu.  This is because the decay function is not precise.  15% over is a 
bit more than I would expect but I suppose it's possible.  We also inhert 
pcpu information from the parent on fork/thread creation so the child 
isn't created with a priority as if it had been idle.  So for a moment the 
utilization is duplicated.

Penalizing the child for an expensive parent is an important optimization 
that prevents batch jobs from overwhelming the system under load.


More information about the freebsd-current mailing list