'

профилирование Эрливидео

Понравилась презентация – покажи это...





Слайд 0

профилирование Эрливидео Макс Лапшин max@erlyvideo.org


Слайд 1

Эрливидео Потоковое видео Разные протоколы: MPEG-TS, RTMP, … Высокая эффективность


Слайд 2

Разные нагрузки Тысячи пар: один источник, один клиент Один источник, тысячи клиентов


Слайд 3

Видео Один поток: 50 кадров/сек, 500 КБит/с 2000 клиентов — 100 000 кадров/сек. Суммарно 1 ГБит/с


Слайд 4

RTMP У каждого клиента своё Каждому клиенту своя копия потока Данные общие, заголовки разные


Слайд 5

RTMP Скорости не хватает — клиент залипает Ошибка в тайстемпе — клиент залипает Клиент залипает — надо что-то делать


Слайд 6

Рост эрливидео Начались проблемы на 800 клиентах Неверная архитектура Пришлось профилировать


Слайд 7

Профилирование Девелопмент одно — продакшн другое Разные версии клиентов Разные скорости каналов Разные задержки на каналах


Слайд 8

Профилирование Профилирование на продакшне Не отключая пользователей Без деградации системы


Слайд 9

Инструменты Valgrind и профилировщики тормозят систему gdb вносит искажения в код


Слайд 10

Инструменты Erlang предлагает другие подходы к профилированию


Слайд 11

Erlang Данные и потоки выполнения объединены, как процессы ОС Обмен асинхронными сообщениями Message box у каждого процесса


Слайд 12

Erlang Все данные немутабельные Процесс — рекурсивная функция, вызывающая себя с новым значением


Слайд 13

Erlang Один процесс под каждого клиента Один процесс под каждый «объект» Вызовы методов строго последовательны


Слайд 14

Lowload Процесс-«поток» шлет сообщения процессам-«клиентам» Клиенты упаковывают RTMP сами в системе FPS*N сообщений


Слайд 15

Тормоза Начинаются «лаги» и «залипание» Куда смотреть? Что мерять?


Слайд 16

Мониторинг Меряем очереди сообщений erlang:process_info(Pid,message_queue_len)


Слайд 17

Мониторинг Меряем загрузку CPU etop:start() мониторим общую память процессов


Слайд 18

Узкие места В узких местах накапливаются сообщения Растет CPU, потребляемый процессом Накапливается память


Слайд 19

Узкие места Процессу не хватает одного ядра Недообрабатывает сообщения Накапливается память Встают в ожидании клиентские процессы


Слайд 20

Как боролись? Уменьшили количество сообщений Прямая запись в сокет Распараллелили запись в сокеты по ядрам


Слайд 21

Результат Во много раз увеличили количество одновременных клиентов


Слайд 22

Рекомендации Планировать количество проходящих сообщений Уменьшать работу внутри вызываемого процесса Раскладывать работу по процессам — расползутся по ядрам


Слайд 23

Выводы Профилировка приложений на erlang возможен без деградации качества обслуживания Методы поиска проблем несложны и эффективны


Слайд 24

Вопросы? Макс Лапшин max@erlyvideo.org


×

HTML:





Ссылка: