feature request: sendfile management

Andrei Nigmatulin andrei.nigmatulin at gmail.com
Thu Oct 25 19:13:29 MSD 2007


On Thursday 25 October 2007 18:49, Alex Vorona wrote:
> Andrei Nigmatulin пишет:
> > On Thursday 25 October 2007 18:13, Alex Vorona wrote:
> >> MZ пишет:
> >> простым #ifdef тут наврядли обойтись получится. На одном и том же файле
> >> в течение одного запроса sendfile()'ы  могут и блокироваться и не
> >> блокироваться, например в зависимости от загрузки дисков и/или от
> >> скорости канала к клиенту. Можно конечно упростить задачу, и, как только
> >> sendfile() заблокировался первый раз - продолжать отдавать файл через
> >> read/write. Насколько эта схема будет эффективной - вопрос второй.
> >>
> >> Какие ещё могут быть варианты ухода nginx от блокировки на диске,
> >> забывая про AIO?
> >
> > Например, отдельный поток в котором выполняются все блокирующиеся
> > операции. И уведомление о готовности основного потока через
> > pipe/socketpair.
>
> соотвественно каждый воркер должен стать многопоточным. Как с
> многопоточностью обстоят дела во FreeBSD ? И чем тогда ситуация с N
> двухпоточными воркерами будет отличаться от одного многопоточного воркера?

Тормозов со стороны жесткого диска на практике не избежать и воркер всегда 
будет блокироваться как минимум на open и stat. Но можно избежать тормозов в 
сетевом io для тех соединений, которые обрабатываются в том же воркере. Это 
возможно если один поток всегда будет выполнять заведомо неблокирующиеся 
операции плюс все сетевое io, а второй - все блокирующиеся.


-- 
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take


More information about the nginx-ru mailing list