ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



On 01/14/14 14:57, Anton Sayetsky wrote:
14 января 2014 г., 11:28 пользователь Anton Yuzhaninov
<citrin@xxxxxxxxx> написал:
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@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.