Денис Здесенко
16.03.2020
1937

Сравнение производительности и нагрузочное тестирование chan_sip и pjsip

Введение Технологии не стоят на месте и на смену нашему любимому chan_sip пришел его более навороченный братишка pjsip. Но везде ли уместно его использовать? Эффективнее ли он использует возможности «железа» наших серверов? В данной статье мы рассмотрим процесс нагрузочного тестирования с помощью связки sipp и htop и сравним результаты для chan_sip и pjsip. Будет собрано […]

Введение

Технологии не стоят на месте и на смену нашему любимому chan_sip пришел его более навороченный братишка pjsip. Но везде ли уместно его использовать? Эффективнее ли он использует возможности «железа» наших серверов? В данной статье мы рассмотрим процесс нагрузочного тестирования с помощью связки sipp и htop и сравним результаты для chan_sip и pjsip. Будет собрано 2 стенда (для Asterisk версий 13 и 15), в каждом будет по 2 виртуальные машины с установленными на них voxlink Distro на базе CentOS 6.10 (c chan_sip) и FreePBX Distro на базе SangomaLinux 7.5 (c pjsip) в одной локальной сети. На всех виртуалках «железо» будет одинаковое:

  • Процессор — Intel(R) Xeon(R) CPU E3-1226 v3 @ 3.30GHz
  • Оперативная память – 1Gb ddr3 RAM
  • Сеть – 1 Гбит/c

Так же стоит отметить, что на всех установленных дистрибутивах присутствует web-интерфейс FreePBX и необходимые нам утилиты sipp и htop.

Требования к тестированию и сборка стенда и начало тестов

Поскольку тестирование будет проводиться внутри локальной сети и на виртуальных машинах, результаты могут показаться несколько стерильными, но в достаточной мере будут демонстрировать отличия в производительности в работе протоколов без учета работы с диском (записи разговоров).

Итак, определим критерии отказа для нашего теста:

  • CPU поднимается выше 60%
  • «Проседания» в аудиопотоке в процессе звонка
  • Менее 5 минут устойчивой производительности

Поясним, почему именно такие критерии. Начнем с нагрузки на CPU – тут все просто, в большинстве случаев сервер телефонии размещается на сервере, выполняющем множество других функций, будь то проксирование, контроль и анализ трафика и множество других, да и запас производительности всегда иметь не повредит. Далее стоит упомянуть что нас интересует «чистая» связь, без артефактов в течение некоторого времени, минимум пять минут, чтобы убедиться, что все в порядке, что и подводит нас к оставшимся двум критериям.

Как и говорилось выше сами звонки мы будем генерировать с помощью sipp – утилиты для генерации трафика по sip протоколу, включающей в себя сценарии работы как SIP-сервера (UAS) так и SIP-клиента (UAC). На момент написания статьи, установить sipp можно с помощью менеджера пакетов yum

#yum install -y sipp

Тесты без медиа для chan_sip и pjsip

Все тесты будут проводиться для входящих звонков

Итак, виртуалки развернуты и запущены, прокидываем обычный сиповый транк для утилиты, добавляем простейший диалплан в /etc/asterisk/extensions_custom.conf и приступаем к тестированию. Диалплан выглядит так (для эхо-теста без медиа):

Простой диалплан для теста без медиа
Простой диалплан для теста без медиа

Транки для астерисков должны выглядеть примерно таким образом:

Настройки транка sip
Настройки транка sip

Начнем с chan_sip на Asterisk 13. Запускаем sipp указывая ей следующие параметры:

sipp 192.168.32.222 -s 101 -i 192.168.32.52 -d 300s -l 4000 -aa -mi 192.168.32.52 -rtp_echo -nd -r 20
  • 192.168.32.222 – это ip станции на которую звоним
  • -s 101 – номер на который звоним
  • -i 192.168.32.52 – адрес АТС с которой звоним (там где запустили sipp, адрес источника сообщений)
  • -d 300s – длительность звонка 5 минут (указано в секундах)
  • -l 4000 – ограничение на 4000 одновременных звонков
  • -aa – автоматические ответы ОК на UPDATE
  • -mi 192.168.32.52 задаем локальный ip для rtp (в нашем случае АТС на которой запускаем sipp)
  • -rtp_echo – запуск в режиме rtp-эха
  • -nd – прерывание звонков при неправильных sip-сообщениях
  • -r 20 -максимальное количество звонков в секунду (CPS)

В процессе тестирования меняем параметр -r, подставляя различные значения, и смотрим как ведет себя наша АТС.

Получаем вот такие результаты:

Результаты chan_sip Asterisk 13
Результаты chan_sip Asterisk 13

Эти же тесты теперь прогоним для станции использующей pjsip и получим следующие результаты:

Результаты pjsip Astersik 13
Результаты pjsip Astersik 13

Для виртуальных машин с Astrisk 15 проводим такие же тесты:

Результаты chan_sip Asterisk 15
Результаты chan_sip Asterisk 15
Результаты pjsip Asterisk 15
Результаты pjsip Asterisk 15

Итак, вывод: при работе с chan_sip в 13й и 15й версии мы получили примерно одинаковые результаты (около 40 звонков в секунду, если выше то начинается излишняя нагрузка на процессор и летят Warning’и) и они несколько ниже, чем при работе с pjsip (около 45-50 звонков в секунду, свыше так же загружается процессор). Теперь перейдем к тем же тестам, но уже с медиа.

Тесты с медиа для chan_sip и pjsip

Единственным отличием в исходных данных от предыдущих тестов будет разница в диалплане, теперь мы будем запускать в ответ медиа (проще всего для этого использовать music on hold).

Простой диалплан для теста с медиа
Простой диалплан для теста с медиа

Делаем все то же, что и делали до этого, используем sipp для наших астерисков и получаем интересующие нас результаты.

Результаты chan_sip Asterisk 13
Результаты chan_sip Asterisk 13
Результаты pjsip Astersik 13
Результаты pjsip Astersik 13
Результаты chan_sip Asterisk 15
Результаты chan_sip Asterisk 15
Результаты pjsip Asterisk 15
Результаты pjsip Asterisk 15

Из полученных данных можно сделать вывод, что в этот раз chan_sip проявил себя куда лучше, нежели его продвинутая версия в лице pjsip. Результаты таковы:

Для астериска 13й версии: chan_sip – 4 CPS, pjsip – 2

Для астериска 15й версии: chan_sip — 3, pjsip – 2

Вывод

Исходя из полученных результатов тестирования, хотелось бы отметить, что не всегда использование pjsip будет оправданно, и в процессе работы с ним может сложиться ситуация, что мы сами задушим производительность своей системы.

Подписаться
Уведомление о
guest
1 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Игорь Гончаровский
Игорь Гончаровский
25.03.2020 15:51

Я правильно понимаю, что статья утверждает, что PJSIP не выдерживает CPS более 2? Это кажется как минимум странным, так как тестирую media вы тестировали в основном media стэк астериска, а он один для SIP и PJSIP.

Также исходя из вывода SIPP у вас неправильно настроен сам сценарий и он не обрабатывает корректно ответы приходящие от asterisk.

Правильнее было бы вручную повышать интенсивность вызовов используя короткие вызовы и наблюдать за моментом появления retransmit, а проблемы со звуком отслеживать контрольными вызовами или voipmonitor.

Остались вопросы?

Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.