mp4 streaming tuning

Андрей Василишин a.vasilishin at kpi.ua
Sun Dec 16 20:23:56 UTC 2012


16.12.2012 22:07, Oleg Palij пишет:
> Добрый день!
>
> nginx/1.2.3 стримит видео, упираемся в 1.5 Гб/c (две 1Гб сетевухи в bond) и nginx начинает с задержкой в начале (несколько секунд, иногда до минуты) отдавать файлы, при этом iowait 20-30%, si ~ 20%.
> Популярные файлы лежат на ssd, остальное на hdd.

Где это на УЖД надо стримить 2 Гбит/с видео? :)

> В основном видео по 100-200Мб, часть файлов отдается 206ми максимум по 1Мб.
> По дискам затыка вроде нет, т.к. в пики `dd if=file.mp4` начинает показывать содержимое файлов практически сразу.
>
> worker_processes 4;
> events {
>     worker_connections 1024;
>     use epoll;
> }
>
> http {
>     sendfile on;

- sendfile on;
+ sendfile off;

сендфайл лучше включать только для ссд, хотя оосоого выигрыша по 
сравнению с просто output_buffers 128к я не заметил
>     tcp_nopush on;
>     tcp_nodelay on;
> }
>
> server {
>     location /video/ {
>        root /;
>        try_files /mnt/ssd$uri /mnt/hdd$uri;
>        mp4;
>        open_file_cache off;

Почему off?

>        limit_rate_after 3m;
>        limit_rate 80k;
>     }
> }
>
> На сервере 4 физических процессора, имеет смысл поднимать кол-во worker_processes?
>

в случае с sendfile on; - имеет, особенно если sendfile_max_chunk  не 
установлен.

> Имеет-ли смысл включать AIO? linux 2.6.38 SMP x86_64
>

имеет для для хдд


> видел, что Игорь давал такой пример (http://forum.nginx.org/read.php?2,22085,216640):
>> output_buffers 2 1m;
>> aio on;
>> directio 1m;
> Что в этом случае будет происходить с 206ми меньшими 1Мб? Чтение будет блокирующимся и на это можно забить? Или надо все таки ставить directio 512?
>

что такое 206е?
directio 1m; - означает, что O_DIRECT будет применяться только к файлам 
размером от 1м, в документации это описано кстати.

> Еще Игорь писал, что:
>> На 16G можно обслуживать где-то до 6000 соединений.
> С чем это связано и можно-ли на это как-то повлиять? Хотя у нас сейчас около 3000 established, просто на будущее интересно.
>

банальная арифметика, умножаем буфер на количество конектов.

> Или может упираемся в сетевухи? Cетевые прерывания распределены по ядрам равномерно. И когда стояла одна сетевуха - она на 1Гб стримила нормально.
> 00:19.0 Ethernet controller: Intel Corporation 82578DM Gigabit Network Connection (rev 05)
> 04:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection
>

нет, сетевые нормальные, правда 82578DM  не работал, но уверен что она 
не хуже 82574L

> В какую сторону еще стоит посмотреть?
>

МБ аутсорсинг? http://nginx.com/support.html
Ну, или документацию начать по-немного читать, смотреть примеры.

-- 
WBR, Andrey Vasilishin CDIG1-UANIC, CDIG1-RIPE



Подробная информация о списке рассылки nginx-ru