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