Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Dec 2003 10:12:19 +0200
From:      Ian Freislich <ianf@za.uu.net>
To:        Mathew Kanner <mat@cnd.mcgill.ca>
Cc:        freebsd-current@freebsd.org
Subject:   Re: Why are sound ioctl calls so slow? 
Message-ID:  <49687.1071043939@za.uu.net>
In-Reply-To: Your message of "Tue, 09 Dec 2003 14:25:57 EST." <20031209192557.GE11072@cnd.mcgill.ca> 
References:  <20031209192557.GE11072@cnd.mcgill.ca> 

next in thread | previous in thread | raw e-mail | index | archive | help
Mathew Kanner wrote:
> >   3224 mpg123   0.000748 CALL  ioctl(0x3,SNDCTL_DSP_SETFMT,0xbfbff834)
> >   3224 mpg123   0.026260 RET   ioctl 0
> > 
> > Can someone firstly tell me whether or not if it is reasonable to
> > expect the ioctl call to be any faster.  Perhaps my reasoning is
> > flawed, but I'd expect about 61000 instructions to be executed by
> > the CPU (133MHz) in 23ms at an average of 50 clock cycles per
> > instruction not taking cache misses into account.  I cannot concieve
> > of any reason why it should take 61000 instructions to write the
> > format, speed or stereo to the sound hardware.
> > 
> > Does each ioctl result in a context switch which means that the cpu
> > spends time on other processes for each ioctl call?  I'm not sure
> > that this is what happens because mpg123 uses 100% cpu for about
> > 10 seconds and then settles down to about 40% once it actually
> > starts decoding the mp3.
> 
> 	Ian,
> 	Sounds like you understand the problem, maybe you should
> investigate :)  

Hmm, I was hoping someone familiar with the sound stuff would be
able to say whether I was smoking my socks or not.  This is very
uncharted territory for me.  I'll try to have a look and see if I
can figure out what gives this week end.

> 	My first guess would be the device is rebuilding feeder/mixer
> chains every time mpg123 changes format.  I would run the test one
> more time, disabling vchans and rate conversion.
> 
> 	sysctl hw.snd.report_soft_formats=0 hw.snd.maxautovchans=0

That didn't make a (noticeable) difference:

  4090 mpg123   0.000603 CALL  ioctl(0x3,SNDCTL_DSP_STEREO,0xbfbff864)
  4090 mpg123   0.026047 RET   ioctl 0
  4090 mpg123   0.000582 CALL  ioctl(0x3,SNDCTL_DSP_SPEED,0xbfbff864)
  4090 mpg123   0.017735 RET   ioctl 0
  4090 mpg123   0.000414 CALL  ioctl(0x3,SNDCTL_DSP_SETFMT,0xbfbff864)
  4090 mpg123   0.026004 RET   ioctl 0

> 	I didn't notice which version of fbsd that you are using.

5.2-CURRENT (2003-10-21 00:00:00 GMT) and 4.9-STABLE.

Ian



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49687.1071043939>