Why is not more FreeBSD software written in C++?
Don Dugger
dugger at hotlz.com
Mon Apr 24 02:28:07 UTC 2006
For fun I run the tests on a SUN box I have here it's an old Sparc
200MHz Running Solaris 8.
and I used the gcc 3.4.2 compiler.
----------
time ./test_putchar >/dev/null
real 0m0.45s
user 0m0.44s
sys 0m0.01s
time ./test_write >/dev/null
real 0m0.66s
user 0m0.38s
sys 0m0.28s
time ./test_iostream >/dev/null
real 0m3.28s
user 0m3.12s
sys 0m0.04s
time ./test_string >/dev/null
real 0m1.50s
user 0m1.48s
sys 0m0.02s
----------
Don 8)
Benjamin Lutz wrote:
> Hello Dan,
>
> On Sunday 23 April 2006 17:25, Dan Strick wrote:
>
>> My results show something quite different. Even though the buffer
>> size used by Benjamin's write() test (61 bytes) is much larger than
>> the one I used (only 24 bytes), the write() test to /dev/null still
>> takes about 4 times longer than the putchar() test. As one might
>> expect, the write() test spends most of its time in the kernel doing
>> all those write() system calls. The putchar() test (i.e. stdio)
>> is probably using a 1K byte buffer.
>>
>
> Your results are intriguing. I ran the tests again on a FreeBSD-6 machine (A
> Sempron 3000+), and I see the same thing, test_putchar runs faster and with
> much lower cpu load than test_write.
>
> I'm not sure what to make of this. I would have said that the reason that
> write() is faster is because there's much fewer kernel calls necessary. I'm
> beginning to think though that FreeBSD's write(2) implementation is not as
> good as it could be. My Linux Mac Mini using a notebook HD actually runs
> test_write 10% faster than the FreeBSD Sempron 3000+ using proper SATA disks.
>
> Or maybe Linux just cheats by doing some smart delaying/caching.
>
> Thinking about it some more, I think you're right with your assumption that
> test_putchar is faster because stdio does some internal buffering. I ran
> ktrace on test_putchar (the version with 500'000 lines), and it calls write()
> 4562 times on said FreeBSD system, each time with 0x1000 as last argument, ie
> it uses 4KB buffers. To confirm that buffering to be the reason, I increased
> the size of each line from 61 bytes to 16001 bytes, at which point the
> write() version showed a clear performance advantage on FreeBSD as well.
>
> I had not thought about this possibility when I made my original statement.
> Given that, it makes sense that putchar is quite fast.
>
> It still puzzles me though why the Mini (it's only a 1.25GHz G4!) beats the
> Sempron though.
>
>
>> I stand by my suggestion that using putchar() might not be slower.
>> On my system it was much faster.
>>
>
> Ok, I accept that then. If we think of a case where buffering must not happen,
> and thus a putchar() must be followed by a fflush(), would you agree that
> just using write() is faster?
>
> Cheers
> Benjamin
>
More information about the freebsd-chat
mailing list