Welcome! Log In Create A New Profile

Advanced

Re: read_ahead

September 29, 2009 08:06AM
On Tue, Sep 29, 2009 at 03:38:24PM +0400, Михаил Монашёв wrote:

> Здравствуйте, Игорь.
>
> >> Игорь, а поясни пожалуйста что даёт aio sendfile? Ниже ты описал
> >> алгоритм работы, а зачем он нужен не понятно.
>
> IS> Он нужен, когда весь контент не помещается в память. aio sendfile
> IS> позволяет воркеру не блокироваться на диске при использовани sendfile.
> IS> Вместо этого воркер может принять другое соединение и, если данные
> IS> для него уже закэшированны в VM, то отдать их из кэша.
>
> А в каких случаях лучше делать aio on, а в каких aio sendfile? Я вот
> сейчас дополз до того, чтобы попробовать aio на рабочей машине и если
> всё получится, оставлю его вместо 1000 воркеров.

aio sendfile включает в себя aio on. То есть, если содержимое файла
нужно прочитать для SSI/gzip/charset/etc, то aio sendfile разрешает
чтение файла с помощью aio, даже если файл не будет отдавать sendfile'ом.

На мой взгляд, aio sendfile + read_ahead имеет смысл использовать всегда -
это самая лучшая комбинация. Без read_ahead aio sendfile неэффективен
для файлов больше 128K.

> IS> В идеале, если файлов не много, но они большие, то вся информация о
> IS> vnode'ах уже будет в памяти, и воркеры не будут блокироваться на
> IS> открытии файлов. Если же файлов много, то воркеры будут блокироваться
> IS> на открытии.
>
> У меня как раз файлов очень много, но вроде бы большинство влезает в
> память:
>
> kern.maxvnodes: 2000000
> vfs.numvnodes: 1167098
>
> Видимо сейчас блокировки возникают из-за открытия редких файлов,
> которые почему-то не попали в кэш vnode-ов...

Возможно.

> Эх, жаль никак не получается ограничиться одним воркером... :-)

Есть идея, всё блокирующееся делать отдельным трэдом, но это не скоро.

> Кстати, нормально ли делать vfs.aio.max_aio_procs: 256 ? Или ядро
> может не потянуть столько ядерных тредов?

Нет, с нитями, я думаю, проблем не будет, но, мне кажется, 32 достаточно.

> Мог бы ты описать вкратце, как работает AIO во FreeBSD. Там каждый
> ядерный тред имеет свою очередь файлов на чтение и по очереди их
> читает? По sysctl -d vfs.aio можно лишь догадываться о том как там всё
> работает...

Насколько я понимаю, все процессы берут запросы из одной общей очереди,
размер которой vfs.aio.max_aio_queue. Текущее число необработанных
запросов в vfs.aio.num_queue_count.


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

read_ahead

Igor Sysoev September 14, 2009 10:18AM

Re: read_ahead

Михаил Монашёв September 14, 2009 04:20PM

Re: read_ahead

Igor Sysoev September 15, 2009 02:06AM

Re: read_ahead

Михаил Монашёв September 29, 2009 06:40AM

Re[2]: read_ahead

Denis F. Latypoff September 29, 2009 07:00AM

Re[3]: read_ahead

Михаил Монашёв September 29, 2009 07:22AM

Re: read_ahead

Igor Sysoev September 29, 2009 07:30AM

Re: read_ahead

Igor Sysoev September 29, 2009 07:20AM

Re[2]: read_ahead

Михаил Монашёв September 29, 2009 07:48AM

Re: read_ahead

Igor Sysoev September 29, 2009 08:06AM

Re[2]: read_ahead

Михаил Монашёв September 29, 2009 08:58AM

Re: read_ahead

Maxim Dounin September 29, 2009 07:32AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 146
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 500 on July 15, 2024
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready