Настройки микшера & CPU load

Develop-group

New Member
Здравствуйте.
Эксплуатируем ваш FlashphonerWebCallServer (обновлен до последней версии 5.2.795).
На базе функции микшера реального времени создаем систему ВКС с WebRTC браузерными клиентами.
Сейчас вся система с FlashphonerWebCallServer-ом расположена на 1-й физической машине.
Подскажите какие настройки и в какой степени влияют на то как микшер реального времени нагружает ядра физического сервера?
Т.е. интересует уменьшение каких параметров микширования позволит реально уменьшить нагрузку на ядра физического сервера без разнесения функций FlashphonerWebCallServer-ра по разным инстансам(серверам)?
 

Max

Administrator
Staff member
Добрый день.
Нагрузку на процессорные ядра дает кодирование. Один микшер кодирует один видеопоток и, если это MCU микшер, по два аудиопотока на каждого участника плюс один общий аудиопоток. Например, при 30 входящих потоках в микшере на сервер будет работать 1 видео энкодер и 61 аудио энкодер, что уже может давать значительную нагрузку.
На одном ядре CPU может кодироваться до двух потоков 720p (разрешение микшера по умолчанию).
Для того, чтобы уменьшить нагрузку на сервер, необходимо уменьшить разрешение и битрейт выходного потока микшера, например
Code:
mixer_video_width=640
mixer_video_height=360
mixer_video_bitrate_kbps=1000
Можно также снизить FPS до 24 (по умолчанию установлено 30)
Code:
mixer_video_fps=24
В последних сборках были добавлены оптимизации по микшеру для того, чтобы улучшить качество выходного потока под большими нагрузками, подробности можно прочитать здесь, например
Code:
mixer_type=MULTI_THREADED_NATIVE
mixer_mcu_multithreaded_mix=true
mixer_mcu_multithreaded_delivery=true
mixer_audio_threads=10
mixer_video_threads=4
При использовании многопоточного микширования, задействуется большее число процессорных потоков, но при этом нагрузка размазывается между ядрами.
Также на физическом сервере, особенно, если это Dell, рекомендуется отключить HyperThreading и включить, если есть, TurboBoost. Режим работы процессора (governor profile) рекомендуется установить при помощи tuned-adm в balanced или throughput-perfomance. Эти твики помогают планировщику ядра Linux равномерно распределять нагрузку по ядрам CPU.
 

Develop-group

New Member
Спасибо за рекомендации!
А можно ли данные параметры:
mixer_video_width=640
mixer_video_height=360
mixer_video_bitrate_kbps=1000

Устанавливать динамически при создании каждого микшера?
 

Max

Administrator
Staff member
А можно ли данные параметры:
mixer_video_width=640
mixer_video_height=360
mixer_video_bitrate_kbps=1000

Устанавливать динамически при создании каждого микшера?
Сейчас это можно делать, меняя настройки при помощи интерфейса командной строки перед запуском нового микшера
Code:
update node-setting --value 640 mixer_video_width 
update node-setting --value 360 mixer_video_height
update node-setting --value 1000 mixer_video_bitrate_kbps
что не совсем удобно. Кроме того, изменения в настройках действуют на все экземпляры микшера, которые будут созданы после этих изменений.
Мы создали тикет WCS-2943, чтобы добавить возможность управления этими параметрами через REST API. О результатах сообщим здесь.
 

Max

Administrator
Staff member
Добрый день.
В сборке 5.2.872 добавлена возможность передать параметры, аналогичные настройкам микшера в файле flashphoner.properties, при создании микшера по запросу /mixer/startup. В этом случае параметры будут применены только к этому экземпляру микшера. Например, запрос
Code:
{
 "uri": "mixer://mixer1",
 "localStreamName": "stream3",
 "mixerVideoWidth": 640,
 "mixerVideoHeight": 360,
 "mixerVideoFps": 24,
 "mixerVideoBitrateKbps": 500
}
создаст микшер с выходным потоком 640x360, fps 24 и битрейтом 500 кбит/с, независимо от того, какие настройки указаны в файле flashphoner.properties.
Полный список параметров микшера можно получить в ответе на запрос /mixer/find_all, пример приведен в документации.
 
Top