Re: Отдача больших файлов

2014-01-14 Пенетрантность Anton Sayetsky
14 января 2014 г., 11:28 пользователь Anton Yuzhaninov
cit...@citrin.ru написал:
 1. Собрать ядро с увеличенным до 1 Мб MAXPHYS

 options MAXPHYS=(1024*1024)
Поискал - как-то мало информации по этому поводу. А та, что есть - в
основном очень старая. Впрочем, внимания всё равно стоит. Интересно,
почему это не default, если действительно помогает.

 2. Подобрать оптимальное значение для
 sysct kern.ipc.sendfile.readahead
Хм...
root@jnb:~# uname -srm
FreeBSD 9.2-RELEASE-p2 amd64
root@jnb:~# sysctl -a | grep sendfile | wc -l
   0
root@jnb:~#

jason@pxe:~$ uname -srm
FreeBSD 9.1-RELEASE-p4 amd64
jason@pxe:~$ sysctl -a | grep sendfile | wc -l
   0
jason@pxe:~$

jason@jason-freebsd:~$ uname -srm
FreeBSD 8.3-RELEASE-p4 amd64
jason@jason-freebsd:~$ sysctl -a | grep sendfile | wc -l
   0
jason@jason-freebsd:~$
На последних двух системах установлен nginx со включенным sendfile.
При каких условиях должен появиться данный OID?
А вот это есть:
jason@jnb:~$ sysctl vfs.read_max vfs.zfs.zfetch.array_rd_sz
vfs.read_max: 32
vfs.zfs.zfetch.array_rd_sz: 1048576
ЕМНИП для UFS (ext2fs, vfat, etc) - это кол-во кластеров, а для ZFS,
видимо - кол-во байт.

 измеряется в блоках по MAXBSIZE (по умолчанию 64к)
 больше MAXPHYS/MAXBSIZE ставить смысла нет.
 т. е. при MAXPHYS 1 Мб можно попробовать kern.ipc.sendfile.readahead=16
Таки да, для UFS это - кол-во кластеров.
jason@jnb:~$ man tuning | col -b | grep -A 10 read_max
 The vfs.read_max sysctl governs VFS read-ahead and is expressed as the
 number of blocks to pre-read if the heuristics algorithm decides that the
 reads are issued sequentially.  It is used by the UFS, ext2fs and msdosfs
 file systems.  With the default UFS block size of 16 KiB, a setting of 32
 will allow speculatively reading up to 512 KiB.  This setting may be
 increased to get around disk I/O latencies, especially where these laten‐
 cies are large such as in virtual machine emulated environments.  It may
 be tuned down in specific cases where the I/O load is such that read-
 ahead adversely affects performance or where system memory is really low.

 The vfs.ncsizefactor sysctl defines how large VFS namecache may grow.
jason@jnb:~$

 Ну и собственно в конфиге nginx - sendfile on;
Странно, ибо в ранее прочитанных мануалах (втч и в этой рассылке) для
отдачи с ZFS всегда рекомендовали sendfile выключать, НЯП для
избежания double-buffering.

 3. Про тюнинг ZFS написано много, в первую стоит посмотреть на размер ARC -
 по умолчанию ZFS пытается съесть почти всю память и запущенным приложениям
 остаётся мало, иногда аппетиты ZFS приходится ограничивать:
 vfs.zfs.arc_max=16G
Вот тут не соглашусь. Съест почти всю память абсолютно любая ФС,
имеющая кэш. Более того, любая такая ФС _обязана_ использовать всю
память, не занятую приложениями.
И проблема ранее была только в том, что ZFS слишком медленно
освобождала память, что вызывало использование свопа. В общем-то, если
бы данная проблема и существовала до сих пор - ничего страшного для
сервера с 128-256 Г памяти, на котором не запущено ничего, кроме
базовой системы, nginx, sshd и ntpd. ;)

 vfs.zfs.prefetch_disable=1 # это стоит проверять на тестах, но я несколько
 раз сталкивался с тем, что отключение ZFS prefetch ускоряет работу.
А тут соглашусь. При отключенном prefetch чтение становится по сути
однопоточным. Заметил это некоторое время назад случайно, во время
теста ZFS over GELI. При отключенном GELI жрёт одно ядро, при
включенном - больше одного.
Из этого можно сделать вывод, что при большом кол-ве независимых
операций отключение prefetch действительно может дать эффект:
теоретически один клиент получит чуть меньше, но все клиенты вместе -
больше.
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Отдача больших файлов

2014-01-14 Пенетрантность Anton Yuzhaninov

On 01/14/14 14:57, Anton Sayetsky wrote:

14 января 2014 г., 11:28 пользователь Anton Yuzhaninov
cit...@citrin.ru написал:

1. Собрать ядро с увеличенным до 1 Мб MAXPHYS

options MAXPHYS=(1024*1024)

Поискал - как-то мало информации по этому поводу. А та, что есть - в
основном очень старая. Впрочем, внимания всё равно стоит. Интересно,
почему это не default, если действительно помогает.


1. Есть небольшая вероятность, что существуют драйвера для SCSI/ATA-контроллеров 
неявно (т. е. из кода это не очевидно) предполагающие, что к ним не может придти 
запроса больше 128 Кб (текущий MAXPHYS). Но проблем в этом месте стоит ожидать 
разве что со старым и экзотическим железом.


2. Большой MAXPHYS может быть плох для систем с очень маленьким объемом памяти 
т. к. на эту константу завязаны размеры некоторых буферов в ядре. И для 32-х 
битных систем, т. к. резервируется KVA, которого на 32-х битных системах мало.


3. На популярных синтетических тестах прирост от увеличения MAXPHYS небольшой.

Подробнее об этом можно почитать в этом треде:
http://lists.freebsd.org/pipermail/freebsd-arch/2010-March/009974.html

Но для раздачи больших файлов эффект от увеличения MAXPHYS может быть вполне 
ощутимым:

http://mailman.nginx.org/pipermail/nginx-ru/2009-February/022197.html




2. Подобрать оптимальное значение для
sysct kern.ipc.sendfile.readahead

Хм...
root@jnb:~# uname -srm
FreeBSD 9.2-RELEASE-p2 amd64
root@jnb:~# sysctl -a | grep sendfile | wc -l
0
root@jnb:~#


:~ uname -srm
FreeBSD 10.0-PRERELEASE amd64
:~ sysctl -d kern.ipc.sendfile.readahead
kern.ipc.sendfile.readahead: Number of sendfile(2) read-ahead MAXBSIZE blocks

А MFC в 9-ку похоже не сделали...
Впрочем это не актуально учитывая что sendfile на ZFS не так полезен как на UFS.


А вот это есть:
jason@jnb:~$ sysctl vfs.read_max vfs.zfs.zfetch.array_rd_sz
vfs.read_max: 32
vfs.zfs.zfetch.array_rd_sz: 1048576
ЕМНИП для UFS (ext2fs, vfat, etc) - это кол-во кластеров, а для ZFS,
видимо - кол-во байт.


vfs.read_max нужен для обычного чтения файлов и да, его стоит увеличивать. Но 
влияет ли это на sendfile не знаю, надо смотреть. Вполне возможно что без его 
увеличения sendfile readahead работать не будет.


С ZFS работал мало и про vfs.zfs.zfetch.array_rd_sz ничего не скажу.

 для отдачи с ZFS всегда рекомендовали sendfile выключать, НЯП для
 избежания double-buffering.

Да, похоже что senfile на ZFS использовать не стоит.

Без sendfile можно попробовать
output_buffers 1 1M;
плюс можно попробовать aio и directio (вместе и по отдельности).

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Отдача больших файлов

2014-01-13 Пенетрантность Anton Sayetsky
Приветствую!

Собственно, планируется сабж в ближайшем будущем.
Размеры файлов - от 1 до 8-10 ГиБ, 400-500 сессий до 2-3 коннектов на
сессию, траф - 4-5 ГБит/сек. Последние два параметра в перспективе
могут вырасти ориентировочно до двух раз. Ось - FreeBSD, ФС - ZFS.
Есть ли общие рекомендации настройки nginx для подобных конфигураций?
Размер/кол-во буферов, метод отдачи файлов и т.п.
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Отдача больших файлов

2014-01-13 Пенетрантность Anton Sayetsky
13 января 2014 г., 23:36 пользователь Михаил Монашёв
postmas...@softsearch.ru написал:
 Вот тут об этом хорошо и подробно написано: http://goo.gl/Szvbiy
Очень остроумно. Кстати, Вы забыли указать в запросе ещё два слова - ОС и ФС.
Но боюсь, что меня больше интересует практический опыт людей,
присутствующих в данной рассылке, именно поэтому письмо и было
написано (что нисколько не отменяет поисковых запросов).
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re[2]: Отдача больших файлов

2014-01-13 Пенетрантность Михаил Монашёв
Здравствуйте, Anton.

 Вот тут об этом хорошо и подробно написано: http://goo.gl/Szvbiy

 Очень остроумно.

За 4 минуты 6 переходов, однако! :-)

 Кстати,  Вы  забыли  указать  в  запросе ещё два слова - ОС и ФС. Но
 боюсь,   что   меня   больше  интересует  практический  опыт  людей,
 присутствующих  в  данной  рассылке,  именно  поэтому  письмо и было
 написано (что нисколько не отменяет поисковых запросов).

А все, кто писал ранее, - теоретики, не стоящие Вашего внимания.

-- 
С уважением,
 Михаил  mailto:postmas...@softsearch.ru

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re[2]: Отдача больших файлов

2014-01-13 Пенетрантность Михаил Монашёв
Здравствуйте, Anton.

 Да, КС site: я вижу. Забыл уточнить, что интересует более новый опыт,
 нежели 2009-го года, коих результатов больше всего. ;)

Всё с точностью до наоборот. Раньше и зима была больше на зиму похожа.
И девки краше. Особенно в 2009-ом. А сейчас уже всё не то, что раньше.


-- 
С уважением,
 Михаил  mailto:postmas...@softsearch.ru

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Re[2]: Отдача больших файлов

2014-01-13 Пенетрантность Anton Sayetsky
13 января 2014 г., 23:46 пользователь Михаил Монашёв
postmas...@softsearch.ru написал:
 А все, кто писал ранее, - теоретики, не стоящие Вашего внимания.
За 5 лет разве ничего не изменилось ни во FreeBSD, ни в nginx?
Кстати, если по указанной ссылке добавить дату с 01.01.2013, то
релевантных результатов как-то и нет...

Впрочем, это лишь переливание из. Писать текст в строку поиска я умею
и так, а нового опыта (хотя бы за прошедший год) Вами не предложено.
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru