Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Jul 2013 11:41:43 -0700
From:      Scott Long <scottl@samsco.org>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        Adrian Chadd <adrian@freebsd.org>, freebsd-current <freebsd-current@freebsd.org>
Subject:   Re: hacking - aio_sendfile()
Message-ID:  <648164F3-17CC-4629-8890-296FF3E642F8@samsco.org>
In-Reply-To: <20130711095615.GM91021@kib.kiev.ua>
References:  <CAJ-Vmo=icr6bda%2BWMNUarc3WbdqJ%2BMdauX6kByxxdTx8oSovBg@mail.gmail.com> <20130711061753.GK91021@kib.kiev.ua> <CAJ-VmomFcZv6_uhpy6ShBzL21=Fqw7_y2xE2oYGod2T=Z5Qgpg@mail.gmail.com> <20130711093630.GL91021@kib.kiev.ua> <CAJ-Vmo=ic_KuaaE2avvbX3JE=R25nuRyyAQpEmFrZRp7T9y9qg@mail.gmail.com> <20130711095615.GM91021@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help

On Jul 11, 2013, at 2:56 AM, Konstantin Belousov <kostikbel@gmail.com> =
wrote:

> On Thu, Jul 11, 2013 at 02:39:00AM -0700, Adrian Chadd wrote:
>> On 11 July 2013 02:36, Konstantin Belousov <kostikbel@gmail.com> =
wrote:
>>=20
>>> No, it is not disk I/O which is problematic there. It is socket I/O
>>> e.g. wait for the socket buffers lomark in the kern_sendfile() which
>>> causes unbounded sleep. Look for the sbwait() call, both in the
>>> kern_sendfile() itself, and in the pru_send methods of the =
protocols,
>>> e.g. in sosend_generic(). The wait scope controlled by the other =
side of
>>> connection and allow it to completely block the aio subsystem.
>>>=20
>>> Disk I/O is supposed to finish in the finite time.
>>=20
>> Even if the destination socket is marked as NONBLOCK?
>=20
> You mean, would a sleep for the socket buffer space cause aio thread
> block is the socket is put in nonblocking mode ?  Or something else ?
>=20
> No, it would not block the thread. But I cannot consider the
> aio_sendfile(2) implementation useful if it requires non-blocking
> socket. Also, what about other thread changing the socket to blocking
> mode while sendfile is in flight ?

Just as with other aspects of sendfile, it's up to the caller to protect =
this kind
of state.  Objecting to aio_sendfile() simply for the reason you state =
is absurd
and against the design goals of sendfile.

Scott




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?648164F3-17CC-4629-8890-296FF3E642F8>