On Tue, Apr 24, 2007 at 07:27:50PM +0400, Александр Ворона wrote:
> Igor Sysoev пишет:
> >On Tue, Apr 24, 2007 at 06:38:51PM +0400, Александр Ворона wrote:
> >
> >>Пытаюсь разшевелить lkml'щиков http://lkml.org/lkml/2007/4/23/289, но
> >>особо много не добился. Проскочила разве что идея про новый системный
> >>вызов splice(2.6.17+)
> >
> >Похоже, пока воркер блокируется в ядре на чтении с диска, tcp'шный стэк
> >на 1G успевает передать и получить ack'и на предыдущую порцию, поэтому,
> >когда чтение завершается, буфер опять свободный и всё повторяется снова.
> >
>
> да - а неблокирующихся read'ов я пока не видел. Надо будет посмотреть
> что за зверь spllice.
> Кстати, а как неблокирующееся чтение при sendfile реализовано во FreBSD?
Никак. Во FreeBSD sendfile так же блокируется на чтении. Но не знаю, можно
ли там достичь такого же эффекта при скачивании по 1G.
Есть ещё флаг SF_NODISKIO:
The flags argument has one possible value: SF_NODISKIO. This flag causes
any sendfile() call which would block on disk I/O to instead return
EBUSY. Busy servers may benefit by transferring requests that would
block to a separate I/O worker thread.
но на практике, кроме академического flash'а, я не видел его применения.
--
Игорь Сысоев
http://sysoev.ru