Re: Why is not more FreeBSD software written in C++?
--nextPart1686217.LuTWpC3WUS
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
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=20
Sempron 3000+), and I see the same thing, test_putchar runs faster and with=
=20
much lower cpu load than test_write.
I'm not sure what to make of this. I would have said that the reason that=20
write() is faster is because there's much fewer kernel calls necessary. I'm=
=20
beginning to think though that FreeBSD's write(2) implementation is not as=
=20
good as it could be. My Linux Mac Mini using a notebook HD actually runs=20
test_write 10% faster than the FreeBSD Sempron 3000+ using proper SATA disk=
s.
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=
=20
test_putchar is faster because stdio does some internal buffering. I ran=20
ktrace on test_putchar (the version with 500'000 lines), and it calls write=
()=20
4562 times on said FreeBSD system, each time with 0x1000 as last argument, =
ie=20
it uses 4KB buffers. To confirm that buffering to be the reason, I increase=
d=20
the size of each line from 61 bytes to 16001 bytes, at which point the=20
write() version showed a clear performance advantage on FreeBSD as well.
I had not thought about this possibility when I made my original statement.=
=20
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=
=20
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 happ=
en,=20
and thus a putchar() must be followed by a fflush(), would you agree that=20
just using write() is faster?
Cheers
Benjamin
--nextPart1686217.LuTWpC3WUS
Content-Type: application/pgp-signature
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
iD8DBQBES+RggShs4qbRdeQRAuKiAKCMMKlSqyVQ4iPWjl57tC1P09Pd0gCfZnHv
ZD3ubC1zpcJp1RevrflvVXE=
=nQTd
-----END PGP SIGNATURE-----
--nextPart1686217.LuTWpC3WUS--
討論串 (同標題文章)
完整討論串 (本文為第 43 之 45 篇):