Poor read() performance, and I can't profile it

Kris Kennaway kris at FreeBSD.org
Fri Jun 6 01:25:54 UTC 2008


Kirk Strauser wrote:
> Kris Kennaway wrote:
> 
>> No, if it's reading in 16 byte units it will explain the terrible 
>> performance.
> 
> No, it's actually doing 4096-byte reads.  That was just an example of 
> what I meant.

I don't understand what you meant by "It's also doing a lot of lseek()s 
to what is likely the current position anyway (example: seek to 0x00, 
read 16 bytes, seek to 0x10, etc.)." then.  Please show a typical part 
of the ktrace output.

Kris

 >  Since I wrote that, though, I wrote a program to do
> 1,000,000 seeks to position 0, and it ran immeasurably fast.  I'm 
> guessing that lseek() is optimized to not do anything if you ask it to 
> move to the position you're already at.
> 
> Any other thoughts?  There definitely aren't any setbuf() calls, and no 
> matter what it still takes 100 times more kernel overhead on Linux than 
> FreeBSD.  Speaking of which, I think my next experiment will be to try 
> the Linux binaries on FreeBSD and see if it behaves similarly.



More information about the freebsd-questions mailing list