svn commit: r358152 - head/bin/sh
Pedro Giffuni
pfg at FreeBSD.org
Sat Feb 22 19:14:55 UTC 2020
For the record ...
On 21/02/2020 22:31, Kyle Evans wrote:
> On Fri, Feb 21, 2020 at 3:53 PM Li-Wen Hsu <lwhsu at freebsd.org> wrote:
>> On Sat, Feb 22, 2020 at 4:58 AM Antoine Brodin <antoine at freebsd.org> wrote:
>>> On Thu, Feb 20, 2020 at 4:01 AM Hiroki Sato <hrs at freebsd.org> wrote:
>>>> Author: hrs
>>>> Date: Thu Feb 20 03:01:27 2020
>>>> New Revision: 358152
>>>> URL: https://svnweb.freebsd.org/changeset/base/358152
>>>>
>>>> Log:
>>>> Improve performance of "read" built-in command when using a seekable
>>>> fd.
>>>>
>>>> The read built-in command calls read(2) with a 1-byte buffer because
>>>> newline characters need to be detected even on a byte stream which
>>>> comes from a non-seekable file descriptor. Because of this, the
>>>> following script calls >6,000 read(2) to show a 6KiB file:
>>>>
>>>> while read IN; do echo "$IN"; done < /COPYRIGHT
>>>>
>>>> When the input byte stream is seekable, it is possible to read a data
>>>> block and then reposition the file pointer to where a newline
>>>> character found. This change adds a small buffer to do this and
>>>> reduces the number of read(2) calls.
>>>>
>>>> Theoretically, multiple built-in commands reading the same seekable
>>>> byte stream in a single pipe chain can share the buffer. However,
>>>> this change just makes a single invocation of the read built-in
>>>> allocate a buffer and deallocate it every time for simplicity.
>>>> Although this causes read(2) to read the same regions multiple times,
>>>> the performance penalty should be small compared to the reduction of
>>>> read(2) calls.
>>>>
>>>> Reviewed by: jilles
>>>> MFC after: 1 week
>>>> Differential Revision: https://reviews.freebsd.org/D23747
>>> This seems to be broken on at least i386.
>>> Please either fix or revert.
>>>
>>> Antoine (with hat: portmgr)
>> Could you provide more detail? I'm worried because I didn't see
>> related regression from the recent test results. We may need to add
>> more test against the breakage you mentioned.
>>
> This trivially failed with the example in the commit message; only the
> first line would be output. It also triggered a failure of
> functional_test:read2 in /usr/tests/bin/sh/builtins on i386 (and all
> of the other platforms with a 32-bit size_t), which would exit with a
> non-zero status code.
>
> I tested and deployed the fix suggested by cem@ as r358235 by just
> making residue an off_t,
This is an example case of why it is important to keep the i386 port
building and running. If we don't have a 32 bit port that is easy to
build and test many bugs like these can easily go through.
Cheers,
Pedro.
More information about the svn-src-all
mailing list