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>