Per CPU cpu-statistics under SMP

John Baldwin jhb at freebsd.org
Tue Apr 18 22:39:49 UTC 2006


On Tuesday 18 April 2006 18:15, Marco van Tol wrote:
> On Mon, Apr 17, 2006 at 01:48:25PM +0000, Marco van Tol wrote:
> > On Mon, Apr 17, 2006 at 09:04:58AM -0400, John Baldwin wrote:
> 
> [...]
> 
> > > I actually did it differently though to try and make it less confusing.
> > > I've added a kern.pcpu_time sysctl which is an array of 0..mp_maxid
> > > cp_time[] arrays (so (mp_maxid + 1) * CPUSTATES longs) which is just the
> > > per-CPU data.  Userland can sum them up if it wants a composite total.
> > > Userland would first do a sysctl with a NULL buffer to get the required
> > > size (since it can vary with the number of CPUs in the system), malloc()
> > > a buffer, and then use the malloc'd buffer to make the requests.  You
> > > should only have to do the malloc() at process start since FreeBSD doesn't
> > > currently allow for more CPUs to be added at runtime.  You can try out
> > > the patch at http://www.FreeBSD.org/~jhb/patches/cp_time.patch
> > 
> > Great thanks!
> > 
> > I will try to apply the patch, and try to modify gkrellm to support it.
> > I'll drop them (gkrellm developers) a note that I'm doing this, as it would
> > be a waist of effort if somebody else has been doing preliminary work that
> > I'd be doing again. :)
> > 
> > I'll keep you up-to-date.
> 
> I'm trying to apply the patch. Tried it to both todays current and todays
> RELENG_6, but both have failing hunks in sys/kern/kern_clock.c.
> The rest succeeds.
> 
> I can do two things:
> - Try to manually patch it against todays current.
> - re-checkout todays RELENG_6, and download the relevant files from the
>   cvsweb interface from the date you posted the patch from that days
>   CURRENT.  Then try to apply the patch.
> 
> For the latter it may break the kernelbuild, but I'm very tempted to try
> that one ahead of the manual patching attempt. ;)
> 
> I'll keep you posted on how far I'm getting with this.  Guess I should have
> gone straight to current the day you posted the patch.  Sorry.

Ah, hmm.  On 6.x we don't have per-thread stat ticks yet, which is
probably why it is failing.  It also isn't safe to move sched_lock
down either on 6.x.  You can still apply the rest of the patch by
hand, just leave the 'mtx_lock_spin(&sched_lock)' where it is and
change all the 'cp_time[FOO]++' to 'PCPU_LAZY_INC(cp_time[FOO])'.

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-hackers mailing list