feature request: sendfile management
Alex Vorona
voron at amhost.net
Thu Oct 25 18:13:18 MSD 2007
MZ пишет:
> В пн, 22/10/2007 в 10:11 +0400, Igor Sysoev пишет:
>
>> On Mon, Oct 22, 2007 at 09:41:23AM +0400, Andrey N. Oktyabrski wrote:
>>
>>
>>> MZ wrote:
>>>
>>>> man sendfile:
>>>> 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.
>>>>
>>>> может стоит использовать эту фишку ?
>>>> если EBUSY, то отдавать самому без sendfile, а иначе пусть ядро отдает ?
>>>>
>>> ano at shrek:~> uname -sr
>>> SunOS 5.10
>>> ano at shrek:~> man sendfile
>>> ...
>>> ssize_t sendfile(int out_fd, int in_fd, off_t *off, size_t len);
>>> ...
>>> Где тут "The flags argument"?
>>>
> ман от FreeBSD
>
>> sendfile - это вообще не стандратная вещь. Для Линуксе, например,
>> пришлось сделать специальную обработку 2G+ файлов для sendfile32().
>>
> Я понимаю.
> Но тормозит ведь! Может и для фри #ifdef поставить ? Я бы и сам сделал,
> но не занимаюсь плотно С - могу накосячить.
>
>
простым #ifdef тут наврядли обойтись получится. На одном и том же файле
в течение одного запроса sendfile()'ы могут и блокироваться и не
блокироваться, например в зависимости от загрузки дисков и/или от
скорости канала к клиенту. Можно конечно упростить задачу, и, как только
sendfile() заблокировался первый раз - продолжать отдавать файл через
read/write. Насколько эта схема будет эффективной - вопрос второй.
Какие ещё могут быть варианты ухода nginx от блокировки на диске,
забывая про AIO?
More information about the nginx-ru
mailing list