Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Mar 2002 12:03:52 -0500 (EST)
From:      Robert Watson <rwatson@freebsd.org>
To:        BOUWSMA Beery <freebsd-user@netscum.dyndns.dk>
Cc:        hackers@freebsd.org
Subject:   Re: Performance of FreeBSD vs NetBSD (was: Re: Performance of -current vs -stable)
Message-ID:  <Pine.NEB.3.96L.1020311120232.36022K-100000@fledge.watson.org>
In-Reply-To: <200203102005.g2AK5SN99334@beerswilling.netscum.dyndns.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
If you measure this using the 'time' command, what is the result?  In
particular, how do the %user and %system vary between FreeBSD and NetBSD?
This could point us at differences in the sound infrastructure, if the
extra CPU you're seeing is a result of increased kernel activity.  If it's
more user activity, maybe it's a library/memory/alignment/... issue.

Robert N M Watson             FreeBSD Core Team, TrustedBSD Project
robert@fledge.watson.org      NAI Labs, Safeport Network Services

On Sun, 10 Mar 2002, BOUWSMA Beery wrote:

> [replies sent directly to me may timeout and bounce, since I'm not
>  online as often as I should be, but I'll check the list archives]
> 
> 
> I wrote a while back, in an old freebsd-current list thread, in which it
> was determined that WITNESS was to be avoided in -current if one wanted
> decent performance...
> 
> > Hmmm, a few weeks ago I did some totally unscientific testing, noting
> > that -current was much slower than -stable, by playing an mp3 with an
> [...]
> > explain why FreeBSD's mpg123 takes ~60% CPU and NetBSD's ~30% (vs the
> > ~90+% usage by -current)...
> 
> > Oh, I'll try rebuilding -current Real Soon^W^W later today, without
> > WITNESS, and compare, just to stay on-topic for this list.
> 
> And so I did.  (build sans WITNESS, not stay on-topic)  The results
> were, well, interesting.
> 
> I built both a WITNESS and a WITNESSless kernel with more recent
> k0deZ, and in the case of playing an mp3 file with `mpg123', I
> saw practically no difference between the two, based on %cpu as
> shown by `top' (like I say, completely unscientific and inaccurate)
> 
> That's interesting, because the previous -current+WITNESS reported
> a sound-related lock order reversal and mpg123 took >90% cpu, while
> neither of the more recent kernels had this lock order reversal.
> 
> In fact, the %cpu needed by `mpg123' seemed identical between
> -current, both with and without WETNESS, and -stable.  Look:
> Stable
> CPU states: 52.7% user,  0.0% nice,  2.3% system,  5.8% interrupt, 39.2% idle
>   PID USERNAME PRI NICE  SIZE    RES STATE    TIME   WCPU    CPU COMMAND
>   272 beer      45   0   344M   908K RUN      3:10 56.10% 56.10% mpg123-O3
>   260 root      28   0  1440K  1176K RUN      0:04  0.24%  0.24% top
> Current+WITNESS
> CPU states: 51.9% user,  0.0% nice,  8.3% system, 12.4% interrupt, 27.4% idle
>   PID USERNAME PRI NICE   SIZE    RES STATE    TIME   WCPU    CPU COMMAND
>   305 beer     115    0   113M   960K RUN      2:06 55.91% 55.91% mpg123-O3
>    10 root     -16    0     0K    12K RUN      1:52 27.39% 27.39% idle
>    29 root     -60 -179     0K    12K WAIT     0:14  5.96%  5.96% irq5: sbc0
>    12 root     -48 -167     0K    12K WAIT     0:07  2.00%  2.00% swi6: tty:sio
>   313 root      97    0  1544K  1264K RUN      0:02  1.19%  1.17% top
> Current-without
> CPU states: 54.0% user,  0.0% nice,  6.8% system, 10.6% interrupt, 28.7% idle
>   PID USERNAME PRI NICE   SIZE    RES STATE    TIME   WCPU    CPU COMMAND
>   322 beer     117    0 97400K  1384K RUN      4:44 55.18% 55.18% mpg123-O3
>    10 root     -16    0     0K    12K RUN      5:38 26.95% 26.95% idle
>    29 root     -60 -179     0K    12K WAIT     0:35  6.01%  6.01% irq5: sbc0
>    12 root     -48 -167     0K    12K WAIT     0:19  2.83%  2.83% swi6: tty:sio
>   313 root      97    0  1544K  1252K RUN      0:16  1.07%  1.07% top
>  
> 
> In both -current and -stable, the audio is usually smooth but
> periodically has a hiccup or two and loops briefly.
> 
> 
> But the very same hardware, booted into NetBSD off the same disk,
> running a NetBSD-native binary of mpg123 on NetBSD-current shows this:
> CPU states: 38.1% user,  0.0% nice,  1.5% system,  1.0% interrupt, 59.4% idle
>   PID USERNAME PRI NICE   SIZE   RES STATE      TIME   WCPU    CPU COMMAND
>   229 beer      10    0   308K 3828K aud_wr     1:17 37.16% 37.16% mpg123
>   245 root      28    0   164K  860K CPU        0:00  0.89%  0.29% top
> 
> This machine can happily do a second task without it needing to be
> `nice'd and still exude clean audio.  Not possible with FreeBSD.
> 
> Just in case I had botched the optimizations for the FreeBSD versions
> of mpg123, I compiled them statically (I couldn't get the NetBSD
> version to run under FreeBSD tho), and ran those under NetBSD with
> the COMPAT_FREEBSD kernel option.  Under FreeBSD I saw no change
> in CPU needed, whilst surprisingly, the static FreeBSD binary run
> under NetBSD on the same hardware needed *less* cpu than before:
> 
> CPU states: 20.3% user,  0.0% nice,  1.0% system,  0.0% interrupt, 78.7% idle
>   PID USERNAME PRI NICE   SIZE   RES STATE      TIME   WCPU    CPU COMMAND
>   241 beer      36    0   512K 2020K RUN        0:24 21.71% 21.63% mpg123-stati
>   268 root      28    0   164K  860K CPU        0:00  0.74%  0.24% top
> 
> 
> I'm concerned.  I know this isn't at all scientific, but why would
> NetBSD require about 1/3 the CPU to run the same binary as either
> -stable or -current FreeBSD on the same hardware?  Can I be slowing
> my FreeBSD OSen by using a kernel option that I shouldn't, or is
> something else coming into play?
> 
> Another thing of note, with this hardware, under FreeBSD, it takes
> some seconds (ten or so) from the time I start mpg123 until it stops
> pegging the CPU and starts to play audio, while with NEtBSD, playing
> starts immediately with both binaries.  If that means anything.
> 
> 
> -stable:  ls: /etc/malloc.conf: No such file or directory
> -current:  /FreeBSD-CURRENT/etc/malloc.conf -> aj
> sound card:  sbc0: <ESS ES1868> at port 0x220-0x22f,0x388-0x38b,0x330-0x331 irq 5 drq 1,0 on isa0
>              pcm0: <ESS 18xx DSP> on sbc0
> cpu:  CPU: Pentium/P54C (75.00-MHz 586-class CPU)
>         Origin = "GenuineIntel"  Id = 0x524  Stepping = 4
>         Features=0x1bf<FPU,VME,DE,PSE,TSC,MSR,MCE,CX8>
>       real memory  = 75497472 (73728K bytes)
> (entire dmesg on request if of interest)
> 
> kernel config options used, if something is obviously a hog, -stable:
> 
> options 	INET			#InterNETworking
> options 	FFS			#Berkeley Fast Filesystem
> options 	FFS_ROOT		#FFS usable as root device [keep this!]
> options 	SOFTUPDATES		#Enable FFS soft updates support
> options 	MFS			#Memory Filesystem
> options 	PROCFS			#Process filesystem
> options 	COMPAT_43		#Compatible with BSD 4.3 [KEEP THIS!]
> options 	SCSI_DELAY=2000	#Delay (in ms) before probing SCSI
> options 	USERCONFIG		#boot -c editor
> options 	VISUAL_USERCONFIG	#visual boot -c editor
> options 	KTRACE			#ktrace(1) support
> options 	SYSVSHM			#SYSV-style shared memory
> options 	SYSVMSG			#SYSV-style message queues
> options 	SYSVSEM			#SYSV-style semaphores
> options 	P1003_1B		#Posix P1003_1B real-time extensions
> options 	_KPOSIX_PRIORITY_SCHEDULING
> options		ICMP_BANDLIM		#Rate limit bad replies
> options 	KBD_INSTALL_CDEV	# install a CDEV entry in /dev
> options 	ATA_STATIC_ID		#Static device numbering
> options		PQ_CACHESIZE=512	# color for 512k/16k cache
> options 	CPU_SUSP_HLT
> options 	USER_LDT		#allow user-level control of i386 ldt
> options 	SHMMAXPGS=10000	# max amount of shared memory pages (4k on i386)
> options 	SHMALL=8192	# max amount of shared memory (bytes)
> options 	SHMMIN=1	# min shared memory segment size (bytes)
> options 	SHMMNI=200	# max number of shared memory identifiers
> options 	SHMSEG=200	# max shared memory segments per process
> options 	SEMMAP=31	# amount of entries in semaphore map
> options 	SEMMNI=128	# number of semaphore identifiers in the system
> options 	SEMMNS=65536            	# number of semaphores in the system
> options 	SEMMNU=31	# number of undo structures in the system
> options 	SEMMSL=512	# max number of semaphores per id
> options 	SEMOPM=101	# max number of operations per semop call
> options 	SEMUME=11	# max number of undo entries per process
> options 	DDB
> options 	DDB_UNATTENDED
> options 	PERFMON
> options 	PPP_BSDCOMP		#PPP BSD-compress support
> options 	PPP_DEFLATE		#PPP zlib/deflate/gzip support
> options 	PPP_FILTER		#enable bpf filtering (needs bpf)
> options		RANDOM_IP_ID
> options 	ICMP_BANDLIM
> options 	NFS_NOSERVER		#Disable the NFS-server code.
> options		UFS_DIRHASH
> options 	EXT2FS
> options 	CAM_MAX_HIGHPOWER=2
> options 	MSGBUF_SIZE=40960
> options 	PPS_SYNC
> options 	MAXCONS=12		# number of virtual consoles
> options 	SC_DISABLE_REBOOT	# disable reboot key sequence
> options 	SC_HISTORY_SIZE=500	# number of history buffer lines
> options 	SC_NORM_ATTR="(FG_YELLOW|BG_BLACK)"
> options 	SC_NORM_REV_ATTR="(FG_BLACK|BG_GREEN)"
> options 	SC_KERNEL_CONS_ATTR="(FG_RED|BG_BLACK)"
> options 	SC_KERNEL_CONS_REV_ATTR="(FG_BLACK|BG_RED)"
> options 	CLK_USE_I8254_CALIBRATION
> options 	CLK_USE_TSC_CALIBRATION
> options 	NMBCLUSTERS=4096
> 
> (I post this in case something is glaringly obvious, before I start
> to randomly disable half these options to see if things change)
> 
> Rest of kernel config skipped here, but can be posted if of interest
> 
>  
> I haven't paid much attention to CPU usage of mpg123 on a 500MHz
> machine with both OSen, but it's in the low single digits, and is
> not as blindingly obvious as with this slow machine.
> 
> I've done a `buildworld' on this 75MHz machine for FreeBSD-current
> and -stable is in progress, so I think I'll try a NetBSD build too
> and see how elapsed time (many many hours) compares, not that that
> is a reliable indicator of speed and efficiency either.
> 
> 
> 
> confused,
> barry bouwsma
>  
> 
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-hackers" in the body of the message
> 


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1020311120232.36022K-100000>