Оптимизация Flussonic Media Server и операционной системы¶
В этом разделе будут приведены некоторые часто встречающиеся проблемы и возможности детальной настройки ОС и Flussonic Media Server для больших нагрузок.
Настройка UDP захвата¶
Flussonic автоматически меняет некоторые настройки сети, чтобы оптимизировать захват UDP источников, включая WebRTC и мультикаст. Чтобы отключить эту функцию, вы можете задать переменную окружения DO_NOT_DO_NET_TUNING и выполнить эти настройки вручную:
Чтобы передать переменную окружения DO_NOT_DO_NET_TUNING в Flussonic, выполните команду:
systemctl edit flussonic
В открывшийся файл добавьте строки:
[Service]
Environment="DO_NOT_DO_NET_TUNING=true"
Сохраните изменения.
Далее вам нужно увеличить размер памяти под UDP буферы:
sysctl -w net.core.rmem_max=1048576
sysctl -w net.core.rmem_default=1048576
sysctl -w net.ipv4.udp_mem="8388608 12582912 16777216"
Эти настройки будут работать до перезагрузки.
Чтобы сохранить эти параметры навсегда, нужно отредактировать файл /etc/sysctl.conf
.
В самый конец файла добавить:
net.core.rmem_max = 1048576
net.core.rmem_default=1048576
net.ipv4.udp_mem = 8388608 12582912 16777216
Чтобы применить изменения из файла, нужно выполнить команду:
sudo sysctl -p
Работа с большим количеством памяти¶
При наличии более 60 гигабайт памяти рекомендуется зарезервировать 10 гигабайт под Linux:
sysctl vm.min_free_kbytes=10240000
Настройка TCP/IP стека¶
Если вы используете Flussonic Media Server для вещания более чем на 3-4 Гбит/с для вас могут стать ощутимыми тонкости настройки TCP стека в Linux.
Во-первых, требуется увеличить количество доступной памяти для буферов соединений:
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_wmem="4096 4194394 16777216"
sysctl -w net.ipv4.tcp_congestion_control=htcp
sysctl -w net.ipv4.tcp_slow_start_after_idle=0
Эти настройки будут работать до перезагрузки. Чтобы сохранить эти параметры навсегда, нужно отредактировать файл /etc/sysctl.conf, в самый конец файла вставить:
net.core.wmem_max = 16777216
net.ipv4.tcp_wmem = 4096 4194394 16777216
Чтобы применить изменения из файла, нужно выполнить команду sudo sysctl -p
.
Так же надо поменять настройки сетевого интерфейса: ifconfig eth0 txqueuelen 10000
.
Обязательно надо проверить версию драйвера сетевой карты. Желательно использовать самую свежую версию. Выяснить версию драйвера и firmware можно так:
ethtool -i eth2
driver: ixgbe
version: 3.15.1
firmware-version: 0x61c10001
bus-info: 0000:04:00.0
Warning
При обновлении файла firmware в каталоге /lib/firmware
необходимо перезагружать сервер. При этом может остаться старый firmware.
Не забудьте запустить утилиту update-initramfs
перед рестартом сервера.
Настройка сетевой карты¶
Прерывания сетевой карты¶
Современные 10-гигабитные сетевые адаптеры имеют несколько очередей для входящих и исходящих пакетов, которые иногда приходится вручную привязывать к ядрам процессоров.
Сервер на котором такую оптимизацию не сделали, обрабатывает всю сетевую подсистему на одном ядре. Выглядит это так:
cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
0: 2097 0 0 0 0 0 0 0 IR-IO-APIC timer
...
66: 2072120005 0 0 0 0 0 0 0 IR-PCI-MSI eth2-TxRx-0
67: 1562779 0 0 0 0 0 0 0 IR-PCI-MSI eth2-TxRx-1
68: 1830725 0 0 0 0 0 0 0 IR-PCI-MSI eth2-TxRx-2
69: 1504396 0 0 0 0 0 0 0 IR-PCI-MSI eth2-TxRx-3
70: 5112538 0 0 0 0 0 0 0 IR-PCI-MSI eth2-TxRx-4
71: 2229416 0 0 0 0 0 0 0 IR-PCI-MSI eth2-TxRx-5
72: 1686551 0 0 0 0 0 0 0 IR-PCI-MSI eth2-TxRx-6
73: 1217916 0 0 0 0 0 0 0 IR-PCI-MSI eth2-TxRx-7
74: 2358 0 0 0 0 0 0 0 IR-PCI-MSI eth2
Для сетевых карт Intel производитель предлагает скрипт set_irq_affinity
который раскидывает очереди по ядрам. После его запуска статистика прерываний выглядит так:
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
0: 2097 0 0 0 0 0 0 0 IR-IO-APIC timer
...
66: 2072120005 0 0 0 0 0 0 0 IR-PCI-MSI eth2-TxRx-0
67: 1562779 1162738082 0 0 0 0 0 0 IR-PCI-MSI eth2-TxRx-1
68: 1830725 0 1133908105 0 0 0 0 0 IR-PCI-MSI eth2-TxRx-2
69: 1504396 0 177620 1123678951 0 0 0 0 IR-PCI-MSI eth2-TxRx-3
70: 5112538 0 0 0 1638450740 0 0 0 IR-PCI-MSI eth2-TxRx-4
71: 2229416 130189 0 0 0 1441511712 0 0 IR-PCI-MSI eth2-TxRx-5
72: 1686551 0 0 0 0 0 1402472725 0 IR-PCI-MSI eth2-TxRx-6
73: 1217916 0 0 66145 0 0 0 1380402032 IR-PCI-MSI eth2-TxRx-7
74: 2358 0 0 0 0 0 0 0 IR-PCI-MSI eth2
Эта настройка становится критичной примерно в районе 3-5 Гбит/с трафика.
Соединение со свичем¶
При соединении сетевой карты сервера со свичем, проверьте, что с обоих сторон установлены совместимые настройки. Т.е. с обеих сторон должно быть либо auto select, либо строго одинаковая скорость и дуплекс.
Оптимизация сервера для VOD вещания¶
Отдельный, более детальный раздел посвящен оптимизации сервера для вещания фильмов.
Перевод процессора в режим высокой производительности¶
Для экономии энергии в ОС Linux по умолчанию регулятор scaling_governor
находится в режиме энергосбережения (powersave). В таком случае сервер не будет использовать все свои аппаратные ресурсы. Чтобы сервер работал в режиме высокой производительности, необходимо:
Отключить регулятор ondemand
:
systemctl disable ondemand
Перезагрузить сервер:
reboot
Проверить текущее значение scaling_governor
:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor