Index | Thread | Search

From:
enh <enh@google.com>
Subject:
Re: BUFSIZ-related pessimization in fvwrite.c
To:
OpenBSD Tech <tech@openbsd.org>
Date:
Fri, 26 Apr 2024 13:56:59 -0700

Download raw body.

Thread
[-netbsd since they took the Apple patch as-is]

openbsd: thoughts?

On Fri, Mar 29, 2024 at 2:57 PM enh <enh@google.com> wrote:
>
> (if anyone knows the equivalent freebsd list, please add them --- this
> code is the same between all three bsds.)
>
> Apple patched their copy of the FreeBSD fvwrite.c to change BUFSIZ to
> INT_MAX to massively improve the performance of large unbuffered
> writes[1], and patched the buffered case to use the largest multiple
> of the buffer size to massively improve the performance of large
> buffered writes:
>
> https://github.com/apple-oss-distributions/Libc/commit/c5a3293354e22262702a3add5b2dfc9bb0b93b85#diff-3b844a19cfb0aab1a23f7fbc457d3bce7453513730c489a72f66ff89d6557ff3
>
> i've tested similar changes to openbsd's fvwrite.c with great results.
>
> is it a _requirement_ that buffered writes _only_ happen in multiples
> of the buffer size? that seems unlikely to me (a) because of short
> writes and (b) musl just does a writev() of what's in the buffer and
> what it was just given in case of a larger-than-buffer write and (c)
> we already changed the openbsd fread() to read directly into the
> caller's buffer regardless of size, so the equivalent behavior on the
> _write_ side seems reasonable to me?
>
> ____
> 1. BUFSIZ is only 1024 bytes on the three BSDs and Android/iOS. glibc uses 8KiB.