Subject: Re: profiling the kernel
To: Laine Stump <laine@morningstar.com>
From: Aaron Brown <abrown@eecs.harvard.edu>
List: current-users
Date: 04/05/1997 13:13:13
> Has anybody done any work profiling the kernel? Are tools available to
> do this?

I've done quite a bit, but not to address the particular problem you're
asking about.

To profile the kernel:

1) Build a profiling kernel:

	cd /sys/arch/<whatever>/conf
	config -p MYCONFIG
	cd ../compile/MYCONFIG.PROF
	make depend
	make
	<install profiling kernel and reboot>

2) To start profiling, as root run:

	kgmon -r -h		# this is probably unnecessary
	kgmon -b

3) Now run your application or whatever.

4) When you want to stop the profile, run (as root)

	kgmon -h
	kgmon -p

This produces a gmon.out file. Now you can use gprof to analyze the profile:

5) Run gprof:

	gprof /netbsd gmon.out > profile

6) Now go look at the "profile" file. "man gprof" for details on the format;
basically, you get a hierarchical call graph as well as a flat profile. To 
start out, the flat profile is the easiest to understand; search for "flat"
in the profile output.

Something similar should work under FreeBSD if they supply kernel profiling
tools; I know it works under BSDI.

--Aaron

> The reason I ask is that, in recent pissing contests here, we've seen
> FreeBSD to spend about 3/5 as much time in the kernel as NetBSD for a 15
> minute build of 1500 C files (something like 1:30 minutes vs
> 2:30). Total build times were 14:34 and 16:16 (user time was 12:10 and
> 12:22, the rest of the difference was in waiting for disk, I guess. I
> believe the machines are similarly configured (P6-200 w/256k cache, SCSI
> disk w/2940UW controller, 128MB RAM) and the cache was large enough on
> the NetBSD system that it kept disk accesses down below 100k/sec during
> most of the cc's (ie, all the .h's were coming from cache).
> 
> Anywho, I'd really like to see the NetBSD build time match the
> FreeBSD. If there is a "cookbook" for collecting kernel profile
> statistics, I'd be willing to follow it, collect data during several of
> these builds, and provide the results to people competent enough to do
> some hand-optimization in the kernel.
> 
> (By the way, all these timings were with NetBSD 1.2 release and FreeBSD
> 2.1.something (whatever was released as of December). Have there been
> any speed improvements in the kernel since 1.2?
>