read_ahead

Igor Sysoev is at rambler-co.ru
Tue Sep 29 15:09:35 MSD 2009


On Tue, Sep 29, 2009 at 02:35:54PM +0400, Михаил Монашёв wrote:

> Здравствуйте, Игорь.
> 
> Игорь, а поясни пожалуйста что даёт aio sendfile? Ниже ты описал
> алгоритм работы, а зачем он нужен не понятно.

Он нужен, когда весь контент не помещается в память. aio sendfile
позволяет воркеру не блокироваться на диске при использовани sendfile.
Вместо этого воркер может принять другое соединение и, если данные
для него уже закэшированны в VM, то отдать их из кэша.

В идеале, если файлов не много, но они большие, то вся информация о
vnode'ах уже будет в памяти, и воркеры не будут блокироваться на
открытии файлов. Если же файлов много, то воркеры будут блокироваться
на открытии.

Кстати, вчера в 9-CURRENT добавили fcntl(O_READAHEAD), так что со
временем read_ahead можно будет использовать без патчей.

> IS> aio sendfile в nginx'е использует флаг SF_NODISKIO и sendfile() не
> IS> блокируется на диске, а сообщает об отсутствии данных в памяти,
> IS> после чего nginx инициирует асинхронную подгрузку данных, читая
> IS> только один байт. При этом ядро FreeBSD подгружает в память первые
> IS> 128K файла, однако при последующих чтениях файл подгружается частями
> IS> только по 16K.


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list